[alsa-devel] [PATCH 1/2] ALSA: hda - skip runtime PM if async probe is not finished

Yang, Libin libin.yang at intel.com
Tue Jul 28 08:16:00 CEST 2015


> -----Original Message-----
> From: Takashi Iwai [mailto:tiwai at suse.de]
> Sent: Tuesday, July 28, 2015 2:13 PM
> To: Yang, Libin
> Cc: Eoff, Ullysses A; alsa-devel at alsa-project.org; Lee, Zhuo-hao
> Subject: Re: [PATCH 1/2] ALSA: hda - skip runtime PM if async probe is
> not finished
> 
> On Tue, 28 Jul 2015 08:05:08 +0200,
> Yang, Libin wrote:
> >
> > > -----Original Message-----
> > > From: Takashi Iwai [mailto:tiwai at suse.de]
> > > Sent: Tuesday, July 28, 2015 1:39 PM
> > > To: Eoff, Ullysses A
> > > Cc: alsa-devel at alsa-project.org; Lee, Zhuo-hao; Yang, Libin
> > > Subject: Re: [PATCH 1/2] ALSA: hda - skip runtime PM if async
> probe is
> > > not finished
> > >
> > > On Mon, 27 Jul 2015 23:34:53 +0200,
> > > U. Artie Eoff wrote:
> > > >
> > > > Crash can occur if runtime PM is triggered before the async probe
> > > > finishes via the azx_firmware_cb when
> > > CONFIG_SND_HDA_PATCH_LOADER
> > > > is defined.
> > > >
> > > > Don't execute PM ops if the async probe has not completed yet.
> > > >
> > > > The probe is finished when chip->running is true.
> > > >
> > > > Signed-off-by: U. Artie Eoff <ullysses.a.eoff at intel.com>
> > > > ---
> > > >  sound/pci/hda/hda_intel.c | 2 +-
> > > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > >
> > > > diff --git a/sound/pci/hda/hda_intel.c
> b/sound/pci/hda/hda_intel.c
> > > > index 735bdcb04ce8..b729b25a6ad6 100644
> > > > --- a/sound/pci/hda/hda_intel.c
> > > > +++ b/sound/pci/hda/hda_intel.c
> > > > @@ -1023,7 +1023,7 @@ static int azx_runtime_idle(struct device
> > > *dev)
> > > >
> > > >  	chip = card->private_data;
> > > >  	hda = container_of(chip, struct hda_intel, chip);
> > > > -	if (chip->disabled || hda->init_failed)
> > > > +	if (chip->disabled || hda->init_failed || !chip->running)
> > > >  		return 0;
> > >
> > > For !chip->running, it's better to return -EBUSY.
> > >
> > > The disabled and init_failed flags are checked in runtime_suspend()
> > > and runtime_resume() to skip the whole procedures, too.
> > >
> > > And I guess the check of chip->running should suffice even without
> > > the
> > > second patch.  It assures that the bus is powered on.
> >
> > As, in runtime_resume will call azx_init_chip(), which may sleep,
> > is there any race when calling azx_runtime_resume(),
> > azx_runtime_idle is called and enter azx_runtime_suspend()?
> > Or the ACPI subsystem will handle such situation?
> 
> The reentrace is avoided in the runtime PM core side, IIRC.

Got it. Thanks.

> 
> 
> Takashi


More information about the Alsa-devel mailing list