lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 10 Mar 2009 16:01:26 +0100 From: Gaudenz Steinlin <gaudenz@...iologie.ch> To: "Rafael J. Wysocki" <rjw@...k.pl> Cc: Benjamin Herrenschmidt <benh@...nel.crashing.org>, linux-kernel@...r.kernel.org, Andrew Morton <akpm@...ux-foundation.org> Subject: Re: commit "radeonfb: Fix resume from D3Cold on some platforms" breaks resume from RAM on PowerBook Hi Rafael On Tue, Mar 10, 2009 at 10:32:58AM +0100, Rafael J. Wysocki wrote: > > Gaudenz, I'd also like to know if the appended patch (on top of vanilla Linus' > tree) makes any different. Unfortunately, I haven't had the time to test it > myself yet. No, this patch does not make any difference. Gaudenz > > Thanks, > Rafael > > --- > drivers/pci/pci-driver.c | 42 ++++++++++++++++++++++++++++++------------ > 1 file changed, 30 insertions(+), 12 deletions(-) > > Index: linux-2.6/drivers/pci/pci-driver.c > =================================================================== > --- linux-2.6.orig/drivers/pci/pci-driver.c > +++ linux-2.6/drivers/pci/pci-driver.c > @@ -556,7 +556,7 @@ static int pci_pm_suspend_noirq(struct d > static int pci_pm_resume_noirq(struct device *dev) > { > struct pci_dev *pci_dev = to_pci_dev(dev); > - struct device_driver *drv = dev->driver; > + struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; > int error = 0; > > pci_pm_default_resume_noirq(pci_dev); > @@ -564,8 +564,13 @@ static int pci_pm_resume_noirq(struct de > if (pci_has_legacy_pm_support(pci_dev)) > return pci_legacy_resume_early(dev); > > - if (drv && drv->pm && drv->pm->resume_noirq) > - error = drv->pm->resume_noirq(dev); > + if (pm) { > + if (pm->resume_noirq) > + error = pm->resume_noirq(dev); > + } else { > + if (pci_is_bridge(pci_dev)) > + pci_pm_reenable_device(pci_dev); > + } > > return error; > } > @@ -592,7 +597,8 @@ static int pci_pm_resume(struct device * > if (pm->resume) > error = pm->resume(dev); > } else { > - pci_pm_reenable_device(pci_dev); > + if (!pci_is_bridge(pci_dev)) > + pci_pm_reenable_device(pci_dev); > } > > return 0; > @@ -662,7 +668,7 @@ static int pci_pm_freeze_noirq(struct de > static int pci_pm_thaw_noirq(struct device *dev) > { > struct pci_dev *pci_dev = to_pci_dev(dev); > - struct device_driver *drv = dev->driver; > + struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; > int error = 0; > > if (pci_has_legacy_pm_support(pci_dev)) > @@ -670,8 +676,13 @@ static int pci_pm_thaw_noirq(struct devi > > pci_update_current_state(pci_dev, PCI_D0); > > - if (drv && drv->pm && drv->pm->thaw_noirq) > - error = drv->pm->thaw_noirq(dev); > + if (pm) { > + if (pm->thaw_noirq) > + error = pm->thaw_noirq(dev); > + } else { > + if (pci_is_bridge(pci_dev)) > + pci_pm_reenable_device(pci_dev); > + } > > return error; > } > @@ -689,7 +700,8 @@ static int pci_pm_thaw(struct device *de > if (pm->thaw) > error = pm->thaw(dev); > } else { > - pci_pm_reenable_device(pci_dev); > + if (!pci_is_bridge(pci_dev)) > + pci_pm_reenable_device(pci_dev); > } > > return error; > @@ -744,7 +756,7 @@ static int pci_pm_poweroff_noirq(struct > static int pci_pm_restore_noirq(struct device *dev) > { > struct pci_dev *pci_dev = to_pci_dev(dev); > - struct device_driver *drv = dev->driver; > + struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; > int error = 0; > > pci_pm_default_resume_noirq(pci_dev); > @@ -752,8 +764,13 @@ static int pci_pm_restore_noirq(struct d > if (pci_has_legacy_pm_support(pci_dev)) > return pci_legacy_resume_early(dev); > > - if (drv && drv->pm && drv->pm->restore_noirq) > - error = drv->pm->restore_noirq(dev); > + if (pm) { > + if (pm->restore_noirq) > + error = pm->restore_noirq(dev); > + } else { > + if (pci_is_bridge(pci_dev)) > + pci_pm_reenable_device(pci_dev); > + } > > return error; > } > @@ -780,7 +797,8 @@ static int pci_pm_restore(struct device > if (pm->restore) > error = pm->restore(dev); > } else { > - pci_pm_reenable_device(pci_dev); > + if (!pci_is_bridge(pci_dev)) > + pci_pm_reenable_device(pci_dev); > } > > return error; -- Ever tried. Ever failed. No matter. Try again. Fail again. Fail better. ~ Samuel Beckett ~ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists