[linux-pm] Userspace interface breakage in power/state

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Po 16-01-06 21:22:10, Rafael J. Wysocki wrote:
> Hi,
> 
> On Monday, 16 January 2006 21:05, Pavel Machek wrote:
> > On Po 16-01-06 19:25:50, Matthew Garrett wrote:
> > > On Mon, Jan 16, 2006 at 08:20:36PM +0100, Pavel Machek wrote:
> > > 
> > > > I had patch to fix this breakage, but it was rejected. What depends on
> > > > that code?
> > > 
> > > Ubuntu's wireless disable script.
> > 
> > Can you search linux-pm archives? Search for "3" (that's '"', '3',
> > '"'). It should be somewhere. I no longer have a copy. (Probably could
> > get it from my working tree git...)
> 
> I think the appended message contains the latest version.

Thanks, thats it. Matthew, you probably want to replace "2" with "3"
below.

								Pavel

> Ok, so lets at least add value-checking to .../power file, and prevent
> userspace see changes to PM_EVENT_SUSPEND value. 2 and 0 are now
> "arbitrary cookies". I'd like to use "on" and "off", but pcmcia
> apparently depends on "2" and "0", so...
> 
> Any objections?
> 
> Signed-off-by: Pavel Machek <pavel@xxxxxxx>
> 								Pavel
> 
> diff --git a/drivers/base/power/sysfs.c b/drivers/base/power/sysfs.c
> --- a/drivers/base/power/sysfs.c
> +++ b/drivers/base/power/sysfs.c
> @@ -27,22 +27,25 @@
>  
>  static ssize_t state_show(struct device * dev, struct device_attribute *attr, char * buf)
>  {
> -	return sprintf(buf, "%u\n", dev->power.power_state.event);
> +	if (dev->power.power_state.event)
> +		return sprintf(buf, "2\n");
> +	else
> +		return sprintf(buf, "0\n");
>  }
>  
>  static ssize_t state_store(struct device * dev, struct device_attribute *attr, const char * buf, size_t n)
>  {
>  	pm_message_t state;
> -	char * rest;
> -	int error = 0;
> +	int error = -EINVAL;
>  
> -	state.event = simple_strtoul(buf, &rest, 10);
> -	if (*rest)
> -		return -EINVAL;
> -	if (state.event)
> -		error = dpm_runtime_suspend(dev, state);
> -	else
> +	state.event = PM_EVENT_SUSPEND;
> +	if ((n == 1) && !strncmp(buf, "2", 1)) {
>  		dpm_runtime_resume(dev);
> +		error = 0;
> +	}
> +	if ((n == 1) && !strncmp(buf, "0", 1))
> +		error = dpm_runtime_suspend(dev, state);
> +
>  	return error ? error : n;
>  }
>  

-- 
Thanks, Sharp!

[Index of Archives]     [Linux ACPI]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [CPU Freq]     [Kernel Newbies]     [Fedora Kernel]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux