diff mbox

audio: ac97: add exit function

Message ID CAJ+F1C+NpMcr+Kx9uOYbmjrPf2bQ5LBh+qVosG1OWMVi6wqJgg@mail.gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Marc-André Lureau Dec. 13, 2016, 5:43 p.m. UTC
Hi

On Tue, Dec 13, 2016 at 11:56 AM Li Qiang <liq3ea@gmail.com> wrote:

> Ping!
>
> 2016-11-29 18:33 GMT+08:00 Li Qiang <liq3ea@gmail.com>:
>
> > From: Li Qiang <liqiang6-s@360.cn>
> >
> > Currently the ac97 device emulation doesn't have a exit function,
> > hot unplug this device will leak some leak. Add a exit function to
> > avoid this.
> >
> > Signed-off-by: Li Qiang <liqiang6-s@360.cn>
> > ---
> >  hw/audio/ac97.c | 8 ++++++++
> >  1 file changed, 8 insertions(+)
> >
> > diff --git a/hw/audio/ac97.c b/hw/audio/ac97.c
> > index cbd959e..2faed35 100644
> > --- a/hw/audio/ac97.c
> > +++ b/hw/audio/ac97.c
> > @@ -1387,6 +1387,13 @@ static void ac97_realize(PCIDevice *dev, Error
> > **errp)
> >      ac97_on_reset (&s->dev.qdev);
> >  }
> >
> > +static void ac97_exit(PCIDevice *dev)
> > +{
> > +    AC97LinkState *s = DO_UPCAST(AC97LinkState, dev, dev);
> > +
> > +    AUD_remove_card(&s->card);
> > +}
> > +
>

Looks good, but even better is to close the streams

 diff --git a/hw/audio/ac97.c b/hw/audio/ac97.c
index 2faed35627..3dcfe9d67c 100644
We could also investigate if AUD_remove_card could do that instead.

>  static int ac97_init (PCIBus *bus)
> >  {
> >      pci_create_simple (bus, -1, "AC97");
> > @@ -1404,6 +1411,7 @@ static void ac97_class_init (ObjectClass *klass,
> > void *data)
> >      PCIDeviceClass *k = PCI_DEVICE_CLASS (klass);
> >
> >      k->realize = ac97_realize;
> > +    k->exit = ac97_exit;
> >      k->vendor_id = PCI_VENDOR_ID_INTEL;
> >      k->device_id = PCI_DEVICE_ID_INTEL_82801AA_5;
> >      k->revision = 0x01;
> > --
> > 1.8.3.1
> >
> >
>
diff mbox

Patch

--- a/hw/audio/ac97.c
+++ b/hw/audio/ac97.c
@@ -1391,6 +1391,9 @@  static void ac97_exit(PCIDevice *dev)
 {
     AC97LinkState *s = DO_UPCAST(AC97LinkState, dev, dev);

+    AUD_close_in (&s->card, s->voice_pi);
+    AUD_close_out (&s->card, s->voice_po);
+    AUD_close_in (&s->card, s->voice_mc);
     AUD_remove_card(&s->card);
 }