[PATCH v2] pci: check saved state before restore

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Here is the updated one...



>From 972c7f371604f837a70cc5e9948749f423cf64eb Mon Sep 17 00:00:00 2001
From: Alek Du <alek.du@xxxxxxxxx>
Date: Wed, 5 Aug 2009 15:25:26 +0800
Subject: [PATCH] pci: check saved state before restore

Without the check, the config space may be filled with zeros. Though
the driver should try to avoid call restoring before saving, but the
pci layer also should check this.

Also removed the existing check in pci_restore_standard_config.

Signed-off-by: Alek Du <alek.du@xxxxxxxxx>
---
 drivers/pci/pci-driver.c |    2 +-
 drivers/pci/pci.c        |    2 ++
 2 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index d76c4c8..f99bc7f 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -508,7 +508,7 @@ static int pci_restore_standard_config(struct pci_dev *pci_dev)
 			return error;
 	}
 
-	return pci_dev->state_saved ? pci_restore_state(pci_dev) : 0;
+	return pci_restore_state(pci_dev);
 }
 
 static void pci_pm_default_resume_noirq(struct pci_dev *pci_dev)
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index dbd0f94..7b70312 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -846,6 +846,8 @@ pci_restore_state(struct pci_dev *dev)
 	int i;
 	u32 val;
 
+	if (!dev->state_saved)
+		return 0;
 	/* PCI Express register must be restored first */
 	pci_restore_pcie_state(dev);
 
-- 
1.6.0.4



On Sat, 8 Aug 2009 06:16:04 +0800
"Rafael J. Wysocki" <rjw@xxxxxxx> wrote:

> On Friday 07 August 2009, Rafael J. Wysocki wrote:
> > On Friday 07 August 2009, Jesse Barnes wrote:
> > > On Wed, 5 Aug 2009 16:46:39 +0800
> > > Alek Du <alek.du@xxxxxxxxx> wrote:
> > > 
> > > > From f701d50e53d794309d92980ffa77d54606d44601 Mon Sep 17 00:00:00 2001
> > > > From: Alek Du <alek.du@xxxxxxxxx>
> > > > Date: Wed, 5 Aug 2009 15:25:26 +0800
> > > > Subject: [PATCH] pci: check saved state before restore
> > > > 
> > > > Without the check, the config space may be filled with zeros. Though
> > > > the driver should try to avoid call restoring before saving, but the
> > > > pci layer also should check this.
> > > > 
> > > > Signed-off-by: Alek Du <alek.du@xxxxxxxxx>
> > > > ---
> > > >  drivers/pci/pci.c |    2 ++
> > > >  1 files changed, 2 insertions(+), 0 deletions(-)
> > > > 
> > > > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> > > > index dbd0f94..7b70312 100644
> > > > --- a/drivers/pci/pci.c
> > > > +++ b/drivers/pci/pci.c
> > > > @@ -846,6 +846,8 @@ pci_restore_state(struct pci_dev *dev)
> > > >  	int i;
> > > >  	u32 val;
> > > >  
> > > > +	if (!dev->state_saved)
> > > > +		return 0;
> > > >  	/* PCI Express register must be restored first */
> > > >  	pci_restore_pcie_state(dev);
> > > 
> > > If we check here, we can probably remove some of the checks in the
> > > suspend/resume paths.  Rafael?
> > 
> > Well, I don't really think the patch is correct, because pci_restore_state()
> > is not only used for PM.  Namely, pci_reset_function() uses it.
> 
> Ah, ok, it also uses pci_save_state() before.
> 
> But Alek, can you please modify the last line of
> pci_restore_standard_config() in your patch too?
> 
> Thanks,
> Rafael
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux