[PATCH 2/7] ALSA: control: Add power state check commonly for ioctl handlers

Jaroslav Kysela perex at perex.cz
Tue May 18 20:00:46 CEST 2021


Dne 18. 05. 21 v 18:51 Takashi Iwai napsal(a):
> The card power state check can be better put in the common ioctl
> handler, as basically we want to prevent ioctls during the power off
> state.  Although this situation won't happen normally any longer (*),
> it'll be helpful for catching this for the future implementation like
> the faked suspend that is needed for PCI rescan.
> 
> (*) Long long time ago, before the proper PM framework was introduced,
> it was still possible to reach SNDRV_CTL_IOCTL_POWER ioctl during the
> power off state.  This ioctl existed as a main control for the suspend
> resume state in the past, but the feature was already dropped along
> with the standard PM framework.

It seems like a function dup for the 5th patch which tracks in flight the
power state. I think that we should drop this (and reshuffle patches) or
remove this in or after the 5th patch.

					Jaroslav

> 
> Signed-off-by: Takashi Iwai <tiwai at suse.de>
> ---
>  sound/core/control.c        | 3 +++
>  sound/core/control_compat.c | 3 +++
>  2 files changed, 6 insertions(+)
> 
> diff --git a/sound/core/control.c b/sound/core/control.c
> index 498e3701514a..c22c3fad0c64 100644
> --- a/sound/core/control.c
> +++ b/sound/core/control.c
> @@ -1772,6 +1772,9 @@ static long snd_ctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg
>  	card = ctl->card;
>  	if (snd_BUG_ON(!card))
>  		return -ENXIO;
> +	err = snd_power_wait(card, SNDRV_CTL_POWER_D0);
> +	if (err < 0)
> +		return err;
>  	switch (cmd) {
>  	case SNDRV_CTL_IOCTL_PVERSION:
>  		return put_user(SNDRV_CTL_VERSION, ip) ? -EFAULT : 0;
> diff --git a/sound/core/control_compat.c b/sound/core/control_compat.c
> index 1d708aab9c98..d5b562ff237b 100644
> --- a/sound/core/control_compat.c
> +++ b/sound/core/control_compat.c
> @@ -438,6 +438,9 @@ static inline long snd_ctl_ioctl_compat(struct file *file, unsigned int cmd, uns
>  	if (snd_BUG_ON(!ctl || !ctl->card))
>  		return -ENXIO;
>  
> +	err = snd_power_wait(ctl->card, SNDRV_CTL_POWER_D0);
> +	if (err < 0)
> +		return err;
>  	switch (cmd) {
>  	case SNDRV_CTL_IOCTL_PVERSION:
>  	case SNDRV_CTL_IOCTL_CARD_INFO:
> 


-- 
Jaroslav Kysela <perex at perex.cz>
Linux Sound Maintainer; ALSA Project; Red Hat, Inc.


More information about the Alsa-devel mailing list