pm_message_t to struct conversion [was Re: 2.6.12-rc1-mm1: Kernel BUG at pci:389]

2005-03-22 Thread Pavel Machek
Hi!

> to Linus when he reappears and then I'll duck for cover and let you guys
> sort it out ;)

There should be little reason for taking cover, that patches were just
anotating types... BTW this is how switch to pm_message_t is going to
look. If you are developing something pm-related, you should probably
do it against this tree.
Pavel

--- clean/drivers/base/power/resume.c   2004-12-25 13:34:59.0 +0100
+++ linux/drivers/base/power/resume.c   2005-03-22 12:20:53.0 +0100
@@ -41,7 +41,7 @@
list_add_tail(entry, _active);
 
up(_list_sem);
-   if (!dev->power.prev_state)
+   if (!dev->power.prev_state.event)
resume_device(dev);
down(_list_sem);
put_device(dev);
--- clean/drivers/base/power/runtime.c  2005-01-12 11:07:39.0 +0100
+++ linux/drivers/base/power/runtime.c  2005-03-22 12:20:53.0 +0100
@@ -13,10 +13,10 @@
 static void runtime_resume(struct device * dev)
 {
dev_dbg(dev, "resuming\n");
-   if (!dev->power.power_state)
+   if (!dev->power.power_state.event)
return;
if (!resume_device(dev))
-   dev->power.power_state = 0;
+   dev->power.power_state = PMSG_ON;
 }
 
 
@@ -49,10 +49,10 @@
int error = 0;
 
down(_sem);
-   if (dev->power.power_state == state)
+   if (dev->power.power_state.event == state.event)
goto Done;
 
-   if (dev->power.power_state)
+   if (dev->power.power_state.event)
runtime_resume(dev);
 
if (!(error = suspend_device(dev, state)))
--- clean/drivers/base/power/shutdown.c 2004-08-15 19:14:55.0 +0200
+++ linux/drivers/base/power/shutdown.c 2005-03-22 12:20:53.0 +0100
@@ -29,7 +29,8 @@
dev->driver->shutdown(dev);
return 0;
}
-   return dpm_runtime_suspend(dev, dev->detach_state);
+   /* FIXME */
+   return dpm_runtime_suspend(dev, PMSG_FREEZE);
 }
 
 
--- clean/drivers/base/power/suspend.c  2005-01-12 11:07:39.0 +0100
+++ linux/drivers/base/power/suspend.c  2005-03-22 12:20:53.0 +0100
@@ -43,7 +43,7 @@
 
dev->power.prev_state = dev->power.power_state;
 
-   if (dev->bus && dev->bus->suspend && !dev->power.power_state)
+   if (dev->bus && dev->bus->suspend && (!dev->power.power_state.event))
error = dev->bus->suspend(dev, state);
 
return error;
--- clean/drivers/base/power/sysfs.c2004-08-15 19:14:55.0 +0200
+++ linux/drivers/base/power/sysfs.c2005-03-22 12:20:53.0 +0100
@@ -26,19 +26,20 @@
 
 static ssize_t state_show(struct device * dev, char * buf)
 {
-   return sprintf(buf, "%u\n", dev->power.power_state);
+   return sprintf(buf, "%u\n", dev->power.power_state.event);
 }
 
 static ssize_t state_store(struct device * dev, const char * buf, size_t n)
 {
-   u32 state;
+   pm_message_t state;
char * rest;
int error = 0;
 
-   state = simple_strtoul(buf, , 10);
+   state.event = simple_strtoul(buf, , 10);
+// state.flags = PFL_RUNTIME;
if (*rest)
return -EINVAL;
-   if (state)
+   if (state.event)
error = dpm_runtime_suspend(dev, state);
else
dpm_runtime_resume(dev);
--- clean/drivers/ide/ide.c 2005-03-19 00:31:23.0 +0100
+++ linux/drivers/ide/ide.c 2005-03-22 12:20:53.0 +0100
@@ -1390,7 +1390,7 @@
rq.special = 
rq.pm = 
rqpm.pm_step = ide_pm_state_start_suspend;
-   rqpm.pm_state = state;
+   rqpm.pm_state = state.event;
 
return ide_do_drive_cmd(drive, , ide_wait);
 }
@@ -1409,7 +1409,7 @@
rq.special = 
rq.pm = 
rqpm.pm_step = ide_pm_state_start_resume;
-   rqpm.pm_state = 0;
+   rqpm.pm_state = PM_EVENT_ON;
 
return ide_do_drive_cmd(drive, , ide_head_wait);
 }
--- clean/drivers/pci/pci.c 2005-03-19 00:31:43.0 +0100
+++ linux/drivers/pci/pci.c 2005-03-22 12:20:53.0 +0100
@@ -312,22 +312,24 @@
 /**
  * pci_choose_state - Choose the power state of a PCI device
  * @dev: PCI device to be suspended
- * @state: target sleep state for the whole system
+ * @state: target sleep state for the whole system. This is the value
+ * that is passed to suspend() function.
  *
  * Returns PCI power state suitable for given device and given system
  * message.
  */
 
-pci_power_t pci_choose_state(struct pci_dev *dev, u32 state)
+pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state)
 {
-   if (!pci_find_capability(dev, PCI_CAP_ID_PM))
+   switch (state.event) {
+   case PM_EVENT_ON:
return PCI_D0;
-
-   switch (state) {
-   case 0: return PCI_D0;
-   case 2: return PCI_D2;
-   case 3: return PCI_D3hot;
-   

pm_message_t to struct conversion [was Re: 2.6.12-rc1-mm1: Kernel BUG at pci:389]

2005-03-22 Thread Pavel Machek
Hi!

 to Linus when he reappears and then I'll duck for cover and let you guys
 sort it out ;)

There should be little reason for taking cover, that patches were just
anotating types... BTW this is how switch to pm_message_t is going to
look. If you are developing something pm-related, you should probably
do it against this tree.
Pavel

--- clean/drivers/base/power/resume.c   2004-12-25 13:34:59.0 +0100
+++ linux/drivers/base/power/resume.c   2005-03-22 12:20:53.0 +0100
@@ -41,7 +41,7 @@
list_add_tail(entry, dpm_active);
 
up(dpm_list_sem);
-   if (!dev-power.prev_state)
+   if (!dev-power.prev_state.event)
resume_device(dev);
down(dpm_list_sem);
put_device(dev);
--- clean/drivers/base/power/runtime.c  2005-01-12 11:07:39.0 +0100
+++ linux/drivers/base/power/runtime.c  2005-03-22 12:20:53.0 +0100
@@ -13,10 +13,10 @@
 static void runtime_resume(struct device * dev)
 {
dev_dbg(dev, resuming\n);
-   if (!dev-power.power_state)
+   if (!dev-power.power_state.event)
return;
if (!resume_device(dev))
-   dev-power.power_state = 0;
+   dev-power.power_state = PMSG_ON;
 }
 
 
@@ -49,10 +49,10 @@
int error = 0;
 
down(dpm_sem);
-   if (dev-power.power_state == state)
+   if (dev-power.power_state.event == state.event)
goto Done;
 
-   if (dev-power.power_state)
+   if (dev-power.power_state.event)
runtime_resume(dev);
 
if (!(error = suspend_device(dev, state)))
--- clean/drivers/base/power/shutdown.c 2004-08-15 19:14:55.0 +0200
+++ linux/drivers/base/power/shutdown.c 2005-03-22 12:20:53.0 +0100
@@ -29,7 +29,8 @@
dev-driver-shutdown(dev);
return 0;
}
-   return dpm_runtime_suspend(dev, dev-detach_state);
+   /* FIXME */
+   return dpm_runtime_suspend(dev, PMSG_FREEZE);
 }
 
 
--- clean/drivers/base/power/suspend.c  2005-01-12 11:07:39.0 +0100
+++ linux/drivers/base/power/suspend.c  2005-03-22 12:20:53.0 +0100
@@ -43,7 +43,7 @@
 
dev-power.prev_state = dev-power.power_state;
 
-   if (dev-bus  dev-bus-suspend  !dev-power.power_state)
+   if (dev-bus  dev-bus-suspend  (!dev-power.power_state.event))
error = dev-bus-suspend(dev, state);
 
return error;
--- clean/drivers/base/power/sysfs.c2004-08-15 19:14:55.0 +0200
+++ linux/drivers/base/power/sysfs.c2005-03-22 12:20:53.0 +0100
@@ -26,19 +26,20 @@
 
 static ssize_t state_show(struct device * dev, char * buf)
 {
-   return sprintf(buf, %u\n, dev-power.power_state);
+   return sprintf(buf, %u\n, dev-power.power_state.event);
 }
 
 static ssize_t state_store(struct device * dev, const char * buf, size_t n)
 {
-   u32 state;
+   pm_message_t state;
char * rest;
int error = 0;
 
-   state = simple_strtoul(buf, rest, 10);
+   state.event = simple_strtoul(buf, rest, 10);
+// state.flags = PFL_RUNTIME;
if (*rest)
return -EINVAL;
-   if (state)
+   if (state.event)
error = dpm_runtime_suspend(dev, state);
else
dpm_runtime_resume(dev);
--- clean/drivers/ide/ide.c 2005-03-19 00:31:23.0 +0100
+++ linux/drivers/ide/ide.c 2005-03-22 12:20:53.0 +0100
@@ -1390,7 +1390,7 @@
rq.special = args;
rq.pm = rqpm;
rqpm.pm_step = ide_pm_state_start_suspend;
-   rqpm.pm_state = state;
+   rqpm.pm_state = state.event;
 
return ide_do_drive_cmd(drive, rq, ide_wait);
 }
@@ -1409,7 +1409,7 @@
rq.special = args;
rq.pm = rqpm;
rqpm.pm_step = ide_pm_state_start_resume;
-   rqpm.pm_state = 0;
+   rqpm.pm_state = PM_EVENT_ON;
 
return ide_do_drive_cmd(drive, rq, ide_head_wait);
 }
--- clean/drivers/pci/pci.c 2005-03-19 00:31:43.0 +0100
+++ linux/drivers/pci/pci.c 2005-03-22 12:20:53.0 +0100
@@ -312,22 +312,24 @@
 /**
  * pci_choose_state - Choose the power state of a PCI device
  * @dev: PCI device to be suspended
- * @state: target sleep state for the whole system
+ * @state: target sleep state for the whole system. This is the value
+ * that is passed to suspend() function.
  *
  * Returns PCI power state suitable for given device and given system
  * message.
  */
 
-pci_power_t pci_choose_state(struct pci_dev *dev, u32 state)
+pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state)
 {
-   if (!pci_find_capability(dev, PCI_CAP_ID_PM))
+   switch (state.event) {
+   case PM_EVENT_ON:
return PCI_D0;
-
-   switch (state) {
-   case 0: return PCI_D0;
-   case 2: return PCI_D2;
-   case 3: return PCI_D3hot;
-