pm_message_t to struct conversion [was Re: 2.6.12-rc1-mm1: Kernel BUG at pci:389]
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]
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; -