Linux ACPI
 help / color / mirror / Atom feed
* ACPI: Make /proc/acpi/wakeup interface handle PCI devices (again)
@ 2008-09-26 20:21 Rafael J. Wysocki
  2008-10-03 12:51 ` Andrew Morton
  0 siblings, 1 reply; 3+ messages in thread
From: Rafael J. Wysocki @ 2008-09-26 20:21 UTC (permalink / raw)
  To: Len Brown; +Cc: Jesse Barnes, ACPI Devel Maling List, pm list

Len,

I think we should do this in .27.

Thanks,
Rafael

---
From: Rafael J. Wysocki <rjw@sisk.pl>

ACPI: Make /proc/acpi/wakeup interface handle PCI devices (again)

Make the ACPI /proc/acpi/wakeup interface set the appropriate
wake-up bits of physical devices corresponding to the ACPI
devices and make those bits be set initially for devices that are
enabled to wake up by default.  This is needed to restore the
previous behavior for the PCI devices that were previously handled
correctly with the help of the /proc/acpi/wakeup interface.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
---
 drivers/acpi/glue.c       |    5 ++++-
 drivers/acpi/sleep/proc.c |   10 ++++++++++
 2 files changed, 14 insertions(+), 1 deletion(-)

Index: linux-2.6/drivers/acpi/sleep/proc.c
===================================================================
--- linux-2.6.orig/drivers/acpi/sleep/proc.c
+++ linux-2.6/drivers/acpi/sleep/proc.c
@@ -377,6 +377,14 @@ acpi_system_wakeup_device_seq_show(struc
 	return 0;
 }
 
+static void physical_device_enable_wakeup(struct acpi_device *adev)
+{
+	struct device *dev = acpi_get_physical_device(adev->handle);
+
+	if (dev && device_can_wakeup(dev))
+		device_set_wakeup_enable(dev, adev->wakeup.state.enabled);
+}
+
 static ssize_t
 acpi_system_write_wakeup_device(struct file *file,
 				const char __user * buffer,
@@ -411,6 +419,7 @@ acpi_system_write_wakeup_device(struct f
 		}
 	}
 	if (found_dev) {
+		physical_device_enable_wakeup(found_dev);
 		list_for_each_safe(node, next, &acpi_wakeup_device_list) {
 			struct acpi_device *dev = container_of(node,
 							       struct
@@ -428,6 +437,7 @@ acpi_system_write_wakeup_device(struct f
 				       dev->pnp.bus_id, found_dev->pnp.bus_id);
 				dev->wakeup.state.enabled =
 				    found_dev->wakeup.state.enabled;
+				physical_device_enable_wakeup(dev);
 			}
 		}
 	}
Index: linux-2.6/drivers/acpi/glue.c
===================================================================
--- linux-2.6.orig/drivers/acpi/glue.c
+++ linux-2.6/drivers/acpi/glue.c
@@ -165,8 +165,11 @@ static int acpi_bind_one(struct device *
 				"firmware_node");
 		ret = sysfs_create_link(&acpi_dev->dev.kobj, &dev->kobj,
 				"physical_node");
-		if (acpi_dev->wakeup.flags.valid)
+		if (acpi_dev->wakeup.flags.valid) {
 			device_set_wakeup_capable(dev, true);
+			device_set_wakeup_enable(dev,
+						acpi_dev->wakeup.state.enabled);
+		}
 	}
 
 	return 0;

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: ACPI: Make /proc/acpi/wakeup interface handle PCI devices (again)
  2008-09-26 20:21 ACPI: Make /proc/acpi/wakeup interface handle PCI devices (again) Rafael J. Wysocki
@ 2008-10-03 12:51 ` Andrew Morton
  2008-10-03 15:10   ` Rafael J. Wysocki
  0 siblings, 1 reply; 3+ messages in thread
From: Andrew Morton @ 2008-10-03 12:51 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Len Brown, Jesse Barnes, ACPI Devel Maling List, pm list

On Fri, 26 Sep 2008 22:21:47 +0200 "Rafael J. Wysocki" <rjw@sisk.pl> wrote:

> Len,
> 
> I think we should do this in .27.

Is Len not there?  Can some other acpi person please review this for
2.6.27 inclusion?


> From: Rafael J. Wysocki <rjw@sisk.pl>
> 
> ACPI: Make /proc/acpi/wakeup interface handle PCI devices (again)
> 
> Make the ACPI /proc/acpi/wakeup interface set the appropriate
> wake-up bits of physical devices corresponding to the ACPI
> devices and make those bits be set initially for devices that are
> enabled to wake up by default.  This is needed to restore the
> previous behavior for the PCI devices that were previously handled
> correctly with the help of the /proc/acpi/wakeup interface.

hm, if you say so.  It's a bit hard to judge the impact of not fixing this?

When is "previous"?  Was 2.6.26 similarly busted?

Thanks.

> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
> ---
>  drivers/acpi/glue.c       |    5 ++++-
>  drivers/acpi/sleep/proc.c |   10 ++++++++++
>  2 files changed, 14 insertions(+), 1 deletion(-)
> 
> Index: linux-2.6/drivers/acpi/sleep/proc.c
> ===================================================================
> --- linux-2.6.orig/drivers/acpi/sleep/proc.c
> +++ linux-2.6/drivers/acpi/sleep/proc.c
> @@ -377,6 +377,14 @@ acpi_system_wakeup_device_seq_show(struc
>  	return 0;
>  }
>  
> +static void physical_device_enable_wakeup(struct acpi_device *adev)
> +{
> +	struct device *dev = acpi_get_physical_device(adev->handle);
> +
> +	if (dev && device_can_wakeup(dev))
> +		device_set_wakeup_enable(dev, adev->wakeup.state.enabled);
> +}
> +
>  static ssize_t
>  acpi_system_write_wakeup_device(struct file *file,
>  				const char __user * buffer,
> @@ -411,6 +419,7 @@ acpi_system_write_wakeup_device(struct f
>  		}
>  	}
>  	if (found_dev) {
> +		physical_device_enable_wakeup(found_dev);
>  		list_for_each_safe(node, next, &acpi_wakeup_device_list) {
>  			struct acpi_device *dev = container_of(node,
>  							       struct
> @@ -428,6 +437,7 @@ acpi_system_write_wakeup_device(struct f
>  				       dev->pnp.bus_id, found_dev->pnp.bus_id);
>  				dev->wakeup.state.enabled =
>  				    found_dev->wakeup.state.enabled;
> +				physical_device_enable_wakeup(dev);
>  			}
>  		}
>  	}
> Index: linux-2.6/drivers/acpi/glue.c
> ===================================================================
> --- linux-2.6.orig/drivers/acpi/glue.c
> +++ linux-2.6/drivers/acpi/glue.c
> @@ -165,8 +165,11 @@ static int acpi_bind_one(struct device *
>  				"firmware_node");
>  		ret = sysfs_create_link(&acpi_dev->dev.kobj, &dev->kobj,
>  				"physical_node");
> -		if (acpi_dev->wakeup.flags.valid)
> +		if (acpi_dev->wakeup.flags.valid) {
>  			device_set_wakeup_capable(dev, true);
> +			device_set_wakeup_enable(dev,
> +						acpi_dev->wakeup.state.enabled);
> +		}
>  	}
>  
>  	return 0;


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: ACPI: Make /proc/acpi/wakeup interface handle PCI devices (again)
  2008-10-03 12:51 ` Andrew Morton
@ 2008-10-03 15:10   ` Rafael J. Wysocki
  0 siblings, 0 replies; 3+ messages in thread
From: Rafael J. Wysocki @ 2008-10-03 15:10 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Len Brown, Jesse Barnes, ACPI Devel Maling List, pm list,
	Tino Keitel

On Friday, 3 of October 2008, Andrew Morton wrote:
> On Fri, 26 Sep 2008 22:21:47 +0200 "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
> 
> > Len,
> > 
> > I think we should do this in .27.
> 
> Is Len not there?  Can some other acpi person please review this for
> 2.6.27 inclusion?
> 
> 
> > From: Rafael J. Wysocki <rjw@sisk.pl>
> > 
> > ACPI: Make /proc/acpi/wakeup interface handle PCI devices (again)
> > 
> > Make the ACPI /proc/acpi/wakeup interface set the appropriate
> > wake-up bits of physical devices corresponding to the ACPI
> > devices and make those bits be set initially for devices that are
> > enabled to wake up by default.  This is needed to restore the
> > previous behavior for the PCI devices that were previously handled
> > correctly with the help of the /proc/acpi/wakeup interface.
> 
> hm, if you say so.  It's a bit hard to judge the impact of not fixing this?

There are people for whom /proc/acpi/wakeup worked, but since Tino Keitel
was the only person reporting this problem, I think it's not widespread.

> When is "previous"?  Was 2.6.26 similarly busted?

Well, "previous" means "as in 2.6.26 and earlier", so this is a recent
regression.

/proc/acpi/ is going to go away at one point, but I think we shouldn't break 
working setups given that the fix is not very intrusive.

> > Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
> > ---
> >  drivers/acpi/glue.c       |    5 ++++-
> >  drivers/acpi/sleep/proc.c |   10 ++++++++++
> >  2 files changed, 14 insertions(+), 1 deletion(-)
> > 
> > Index: linux-2.6/drivers/acpi/sleep/proc.c
> > ===================================================================
> > --- linux-2.6.orig/drivers/acpi/sleep/proc.c
> > +++ linux-2.6/drivers/acpi/sleep/proc.c
> > @@ -377,6 +377,14 @@ acpi_system_wakeup_device_seq_show(struc
> >  	return 0;
> >  }
> >  
> > +static void physical_device_enable_wakeup(struct acpi_device *adev)
> > +{
> > +	struct device *dev = acpi_get_physical_device(adev->handle);
> > +
> > +	if (dev && device_can_wakeup(dev))
> > +		device_set_wakeup_enable(dev, adev->wakeup.state.enabled);
> > +}
> > +
> >  static ssize_t
> >  acpi_system_write_wakeup_device(struct file *file,
> >  				const char __user * buffer,
> > @@ -411,6 +419,7 @@ acpi_system_write_wakeup_device(struct f
> >  		}
> >  	}
> >  	if (found_dev) {
> > +		physical_device_enable_wakeup(found_dev);
> >  		list_for_each_safe(node, next, &acpi_wakeup_device_list) {
> >  			struct acpi_device *dev = container_of(node,
> >  							       struct
> > @@ -428,6 +437,7 @@ acpi_system_write_wakeup_device(struct f
> >  				       dev->pnp.bus_id, found_dev->pnp.bus_id);
> >  				dev->wakeup.state.enabled =
> >  				    found_dev->wakeup.state.enabled;
> > +				physical_device_enable_wakeup(dev);
> >  			}
> >  		}
> >  	}
> > Index: linux-2.6/drivers/acpi/glue.c
> > ===================================================================
> > --- linux-2.6.orig/drivers/acpi/glue.c
> > +++ linux-2.6/drivers/acpi/glue.c
> > @@ -165,8 +165,11 @@ static int acpi_bind_one(struct device *
> >  				"firmware_node");
> >  		ret = sysfs_create_link(&acpi_dev->dev.kobj, &dev->kobj,
> >  				"physical_node");
> > -		if (acpi_dev->wakeup.flags.valid)
> > +		if (acpi_dev->wakeup.flags.valid) {
> >  			device_set_wakeup_capable(dev, true);
> > +			device_set_wakeup_enable(dev,
> > +						acpi_dev->wakeup.state.enabled);
> > +		}
> >  	}
> >  
> >  	return 0;
> 
> 
> 



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2008-10-03 15:05 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-09-26 20:21 ACPI: Make /proc/acpi/wakeup interface handle PCI devices (again) Rafael J. Wysocki
2008-10-03 12:51 ` Andrew Morton
2008-10-03 15:10   ` Rafael J. Wysocki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox