Messages in this thread | | | From | "Rafael J. Wysocki" <> | Subject | Re: [PATCH] ricoh_mmc: Use suspend/resume_noirq (v2) (resend) | Date | Wed, 7 Jan 2009 23:33:21 +0100 |
| |
On Wednesday 07 January 2009, philipl@overt.org wrote: > If ricoh_mmc suspends before sdhci_pci, it will pull the card > out from under the controller, which could leave the system in > a very confused state. > > Using suspend/resume_noirq ensures that sdhci_pci suspends first > and resumes second. > > Signed-off-by: Philip Langdale <philipl@overt.org> > Acked-by: Pierre Ossman <drzeus@drzeus.cx> > --- > > ricoh_mmc.c | 20 ++++++++++++++++---- > 1 file changed, 16 insertions(+), 4 deletions(-) > > diff --git a/drivers/mmc/host/ricoh_mmc.c b/drivers/mmc/host/ricoh_mmc.c > index 1837719..b4958a7 100644 > --- a/drivers/mmc/host/ricoh_mmc.c > +++ b/drivers/mmc/host/ricoh_mmc.c > @@ -194,10 +194,14 @@ static void __devexit ricoh_mmc_remove(struct pci_dev *pdev) > pci_set_drvdata(pdev, NULL); > } > > -static int ricoh_mmc_suspend(struct pci_dev *pdev, pm_message_t state) +static int > ricoh_mmc_suspend_noirq(struct device *dev) > { > + struct pci_dev *pdev = NULL; > struct pci_dev *fw_dev = NULL; > > + pdev = to_pci_dev(dev); > + BUG_ON(pdev == NULL); > + > fw_dev = pci_get_drvdata(pdev); > BUG_ON(fw_dev == NULL); > > @@ -208,10 +212,14 @@ static int ricoh_mmc_suspend(struct pci_dev *pdev, pm_message_t state) > return 0; > } > > -static int ricoh_mmc_resume(struct pci_dev *pdev) > +static int ricoh_mmc_resume_noirq(struct device *dev) > { > + struct pci_dev *pdev = NULL; > struct pci_dev *fw_dev = NULL; > > + pdev = to_pci_dev(dev); > + BUG_ON(pdev == NULL); > + > fw_dev = pci_get_drvdata(pdev); > BUG_ON(fw_dev == NULL); > > @@ -222,13 +230,17 @@ static int ricoh_mmc_resume(struct pci_dev *pdev) > return 0; > } > > +static struct dev_pm_ops ricoh_mmc_pm_opts = { > + .suspend_noirq = ricoh_mmc_suspend_noirq, > + .resume_noirq = ricoh_mmc_resume_noirq, > +}; > + > static struct pci_driver ricoh_mmc_driver = { > .name = DRIVER_NAME, > .id_table = pci_ids, > .probe = ricoh_mmc_probe, > .remove = __devexit_p(ricoh_mmc_remove), > - .suspend = ricoh_mmc_suspend, > - .resume = ricoh_mmc_resume, > + .driver.pm = &ricoh_mmc_pm_opts, > }; > > /*****************************************************************************\ > > Rafael, > > Pierre asked that you take this patch into your tree because it depends on > the new pm ops design.
Yes, thanks.
I'll look into this and get back to you shortly, most likely tomorrow.
Thanks, Rafael
| |