[RFC PATCH] power: support _noirq actions on device types and classes

Rafael J. Wysocki rjw at sisk.pl
Mon Mar 15 17:44:15 EDT 2010


On Monday 15 March 2010, Dominik Brodowski wrote:
> Hey,
> 
> Does this look right?

Yes, it does.

> As PCMCIA seems to be the first user (for 2.6.35), I can carry it if you
> prefer.

Well, that would be better for linux-next too, but we'd need a documentation
update along with it.  Unfortunately, the documentation patch affected by this
change hasn't been merged yet. ;-)

I think I'll push the documentation update shortly and let you know when it's
in (/me hopes documentation updates count as fixes).

> Otherwise, we'd need to be careful that this
> gets merged before the next big PCMCIA update for 2.6.35-rc1.
> 
> What's possible with this -- 66 insertions(+), 288 deletions(-) -- for the
> PCMCIA subsystem can be seen here:
> 
> http://git.kernel.org/?p=linux/kernel/git/brodo/pcmcia-2.6.git;a=commitdiff;h=ac1986af0977c339dc6072f476e23a42103c980f
> 
> 
> From: Dominik Brodowski <linux at dominikbrodowski.net>
> Date: Mon, 15 Mar 2010 21:43:11 +0100
> Subject: [PATCH] power: support _noirq actions on device types and classes
> 
> The new-style dev_pm_ops provide callbacks for both IRQs enabled
> and disabled. However, the _noirq variants were only called for
> buses registered with a device, not for classes and types.
> 
> In order to properly use dev_pm_ops in class pcmcia_socket_class,
> support _noirq actions also on classes and types.
> 
> Signed-off-by: Dominik Brodowski <linux at dominikbrodowski.net>

Acked-by: Rafael J. Wysocki <rjw at sisk.pl>

> diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
> index d477f4d..941fcb8 100644
> --- a/drivers/base/power/main.c
> +++ b/drivers/base/power/main.c
> @@ -439,8 +439,23 @@ static int device_resume_noirq(struct device *dev, pm_message_t state)
>  	if (dev->bus && dev->bus->pm) {
>  		pm_dev_dbg(dev, state, "EARLY ");
>  		error = pm_noirq_op(dev, dev->bus->pm, state);
> +		if (error)
> +			goto End;
>  	}
>  
> +	if (dev->type && dev->type->pm) {
> +		pm_dev_dbg(dev, state, "EARLY type ");
> +		error = pm_noirq_op(dev, dev->type->pm, state);
> +		if (error)
> +			goto End;
> +	}
> +
> +	if (dev->class && dev->class->pm) {
> +		pm_dev_dbg(dev, state, "EARLY class ");
> +		error = pm_noirq_op(dev, dev->class->pm, state);
> +	}
> +
> +End:
>  	TRACE_RESUME(error);
>  	return error;
>  }
> @@ -735,10 +750,26 @@ static int device_suspend_noirq(struct device *dev, pm_message_t state)
>  {
>  	int error = 0;
>  
> +	if (dev->class && dev->class->pm) {
> +		pm_dev_dbg(dev, state, "LATE class ");
> +		error = pm_noirq_op(dev, dev->class->pm, state);
> +		if (error)
> +			goto End;
> +	}
> +
> +	if (dev->type && dev->type->pm) {
> +		pm_dev_dbg(dev, state, "LATE type ");
> +		error = pm_noirq_op(dev, dev->type->pm, state);
> +		if (error)
> +			goto End;
> +	}
> +
>  	if (dev->bus && dev->bus->pm) {
>  		pm_dev_dbg(dev, state, "LATE ");
>  		error = pm_noirq_op(dev, dev->bus->pm, state);
>  	}
> +
> +End:
>  	return error;
>  }
>  
> 
> 




More information about the linux-pcmcia mailing list