aboutsummaryrefslogtreecommitdiffstats
diff options
authorGreg Kroah-Hartman <gregkh@suse.de>2007-03-13 12:33:30 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2007-03-13 12:33:30 -0700
commit1a71ae94fc8fffde987dc043ef7dd91e44240c4d (patch)
tree5e6a79de2c1e7292b3ff22d92087174e35322169
parent0e17f7c0bde133ba377ac005f6dc5f085ccda916 (diff)
downloadpatches-1a71ae94fc8fffde987dc043ef7dd91e44240c4d.tar.gz
version update
-rw-r--r--driver-class/block-device.patch2
-rw-r--r--driver-class/sys-subsys-unification.patch10
-rw-r--r--driver/driver-core-per-subsystem-multithreaded-probing.patch2
-rw-r--r--pci/msi-safer-state-caching.patch326
-rw-r--r--pci/pci-new-pci-e-reset-api.patch6
-rw-r--r--pci/pci-repair-pci_save-restore_state-so-we-can-restore-one-save-many-times.patch87
-rw-r--r--series2
-rw-r--r--version2
8 files changed, 11 insertions, 426 deletions
diff --git a/driver-class/block-device.patch b/driver-class/block-device.patch
index 27d2047eb19af5..4acbad22f4f22a 100644
--- a/driver-class/block-device.patch
+++ b/driver-class/block-device.patch
@@ -704,7 +704,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
}
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
-@@ -783,7 +783,7 @@ void device_del(struct device * dev)
+@@ -821,7 +821,7 @@ void device_del(struct device * dev)
if (dev->kobj.parent != &dev->class->subsys.kset.kobj)
sysfs_remove_link(&dev->class->subsys.kset.kobj,
dev->bus_id);
diff --git a/driver-class/sys-subsys-unification.patch b/driver-class/sys-subsys-unification.patch
index 07f934f1524b54..d45c6dd1628780 100644
--- a/driver-class/sys-subsys-unification.patch
+++ b/driver-class/sys-subsys-unification.patch
@@ -469,7 +469,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
/**
* device_create_file - create sysfs attribute file for device.
* @dev: device.
-@@ -605,13 +594,21 @@ int device_add(struct device *dev)
+@@ -640,13 +629,21 @@ int device_add(struct device *dev)
}
if (dev->class) {
@@ -498,9 +498,9 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
if (parent) {
sysfs_create_link(&dev->kobj, &dev->parent->kobj,
"device");
-@@ -777,12 +774,18 @@ void device_del(struct device * dev)
- kfree(dev->devt_attr);
- }
+@@ -815,12 +812,18 @@ void device_del(struct device * dev)
+ list_for_each_entry_safe(vd, temp_vd, &dev->virtual_dirs, list)
+ kfree(vd);
if (dev->class) {
+ struct kobject *devices_dir;
+
@@ -522,7 +522,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
if (parent && parent->bus) {
#ifdef CONFIG_SYSFS_DEPRECATED
char *class_name = make_class_name(dev->class->name,
-@@ -913,9 +916,20 @@ struct device * device_find_child(struct
+@@ -951,9 +954,20 @@ struct device * device_find_child(struct
return child;
}
diff --git a/driver/driver-core-per-subsystem-multithreaded-probing.patch b/driver/driver-core-per-subsystem-multithreaded-probing.patch
index 0584b95848907e..7c8d660ddd08ac 100644
--- a/driver/driver-core-per-subsystem-multithreaded-probing.patch
+++ b/driver/driver-core-per-subsystem-multithreaded-probing.patch
@@ -201,7 +201,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
-@@ -366,8 +366,6 @@ struct pci_driver {
+@@ -361,8 +361,6 @@ struct pci_driver {
struct pci_error_handlers *err_handler;
struct device_driver driver;
struct pci_dynids dynids;
diff --git a/pci/msi-safer-state-caching.patch b/pci/msi-safer-state-caching.patch
deleted file mode 100644
index 7274e13688f795..00000000000000
--- a/pci/msi-safer-state-caching.patch
+++ /dev/null
@@ -1,326 +0,0 @@
-From owner-linux-pci@atrey.karlin.mff.cuni.cz Thu Mar 8 12:05:21 2007
-From: Eric W. Biederman <ebiederm@xmission.com>
-Date: Thu, 08 Mar 2007 13:04:57 -0700
-Subject: msi: Safer state caching.
-To: Andrew Morton <akpm@linux-foundation.org>, Linus Torvalds <torvalds@linux-foundation.org>
-Cc: Jeff Garzik <jeff@garzik.org>, "Kok, Auke" <auke-jan.h.kok@intel.com>, Ingo Molnar <mingo@elte.hu>, "Michael S. Tsirkin" <mst@mellanox.co.il>, Pavel Machek <pavel@ucw.cz>, Jens Axboe <jens.axboe@oracle.com>, Adrian Bunk <bunk@stusta.de>, Linux Kernel Mailing List <linux-kernel@vger.kernel.org>, Thomas Gleixner <tglx@linutronix.de>, linux-pm@lists.osdl.org, Michal Piotrowski <michal.k.k.piotrowski@gmail.com>, Greg Kroah-Hartman <gregkh@suse.de>, <linux-pci@atrey.karlin.mff.cuni.cz>, michael@ellerman.id.au
-Message-ID: <m1ps7j5wnq.fsf_-_@ebiederm.dsl.xmission.com>
-
-From: Eric W. Biederman <ebiederm@xmission.com>
-
-
-There are two ways pci_save_state and pci_restore_state are used. As
-helper functions during suspend/resume, and as helper functions around
-a hardware reset event. When used as helper functions around a hardware
-reset event there is no reason to believe the calls will be paired, nor
-is there a good reason to believe that if we restore the msi state from
-before the reset that it will match the current msi state. Since arch
-code may change the msi message without going through the driver, drivers
-currently do not have enough information to even know when to call
-pci_save_state to ensure they will have msi state in sync with the other
-kernel irq reception data structures.
-
-It turns out the solution is straight forward, cache the state in the
-existing msi data structures (not the magic pci saved things) and
-have the msi code update the cached state each time we write to the hardware.
-This means we never need to read the hardware to figure out what the hardware
-state should be.
-
-By modifying the caching in this manner we get to remove our save_state
-routines and only need to provide restore_state routines.
-
-The only fields that were at all tricky to regenerate were the msi and msi-x
-control registers and the way we regenerate them currently is a bit dependent
-upon assumptions on how we use the allow msi registers to be configured and used
-making the code a little bit brittle. If we ever change what cases we allow
-or how we configure the msi bits we can address the fragility then.
-
-Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/msi.c | 150 +++++++----------------------------------------
- drivers/pci/pci.c | 2
- drivers/pci/pci.h | 2
- include/linux/msi.h | 8 --
- include/linux/pci_regs.h | 1
- 5 files changed, 29 insertions(+), 134 deletions(-)
-
---- a/drivers/pci/msi.c
-+++ b/drivers/pci/msi.c
-@@ -100,6 +100,7 @@ static void msi_set_mask_bit(unsigned in
- BUG();
- break;
- }
-+ entry->msi_attrib.masked = !!flag;
- }
-
- void read_msi_msg(unsigned int irq, struct msi_msg *msg)
-@@ -179,6 +180,7 @@ void write_msi_msg(unsigned int irq, str
- default:
- BUG();
- }
-+ entry->msg = *msg;
- }
-
- void mask_msi_irq(unsigned int irq)
-@@ -225,164 +227,60 @@ static struct msi_desc* alloc_msi_entry(
- }
-
- #ifdef CONFIG_PM
--static int __pci_save_msi_state(struct pci_dev *dev)
--{
-- int pos, i = 0;
-- u16 control;
-- struct pci_cap_saved_state *save_state;
-- u32 *cap;
--
-- if (!dev->msi_enabled)
-- return 0;
--
-- pos = pci_find_capability(dev, PCI_CAP_ID_MSI);
-- if (pos <= 0)
-- return 0;
--
-- save_state = kzalloc(sizeof(struct pci_cap_saved_state) + sizeof(u32) * 5,
-- GFP_KERNEL);
-- if (!save_state) {
-- printk(KERN_ERR "Out of memory in pci_save_msi_state\n");
-- return -ENOMEM;
-- }
-- cap = &save_state->data[0];
--
-- pci_read_config_dword(dev, pos, &cap[i++]);
-- control = cap[0] >> 16;
-- pci_read_config_dword(dev, pos + PCI_MSI_ADDRESS_LO, &cap[i++]);
-- if (control & PCI_MSI_FLAGS_64BIT) {
-- pci_read_config_dword(dev, pos + PCI_MSI_ADDRESS_HI, &cap[i++]);
-- pci_read_config_dword(dev, pos + PCI_MSI_DATA_64, &cap[i++]);
-- } else
-- pci_read_config_dword(dev, pos + PCI_MSI_DATA_32, &cap[i++]);
-- if (control & PCI_MSI_FLAGS_MASKBIT)
-- pci_read_config_dword(dev, pos + PCI_MSI_MASK_BIT, &cap[i++]);
-- save_state->cap_nr = PCI_CAP_ID_MSI;
-- pci_add_saved_cap(dev, save_state);
-- return 0;
--}
--
- static void __pci_restore_msi_state(struct pci_dev *dev)
- {
-- int i = 0, pos;
-+ int pos;
- u16 control;
-- struct pci_cap_saved_state *save_state;
-- u32 *cap;
-+ struct msi_desc *entry;
-
- if (!dev->msi_enabled)
- return;
-
-- save_state = pci_find_saved_cap(dev, PCI_CAP_ID_MSI);
-- pos = pci_find_capability(dev, PCI_CAP_ID_MSI);
-- if (!save_state || pos <= 0)
-- return;
-- cap = &save_state->data[0];
-+ entry = get_irq_msi(dev->irq);
-+ pos = entry->msi_attrib.pos;
-
- pci_intx(dev, 0); /* disable intx */
-- control = cap[i++] >> 16;
- msi_set_enable(dev, 0);
-- pci_write_config_dword(dev, pos + PCI_MSI_ADDRESS_LO, cap[i++]);
-- if (control & PCI_MSI_FLAGS_64BIT) {
-- pci_write_config_dword(dev, pos + PCI_MSI_ADDRESS_HI, cap[i++]);
-- pci_write_config_dword(dev, pos + PCI_MSI_DATA_64, cap[i++]);
-- } else
-- pci_write_config_dword(dev, pos + PCI_MSI_DATA_32, cap[i++]);
-- if (control & PCI_MSI_FLAGS_MASKBIT)
-- pci_write_config_dword(dev, pos + PCI_MSI_MASK_BIT, cap[i++]);
-+ write_msi_msg(dev->irq, &entry->msg);
-+ if (entry->msi_attrib.maskbit)
-+ msi_set_mask_bit(dev->irq, entry->msi_attrib.masked);
-+
-+ pci_read_config_word(dev, pos + PCI_MSI_FLAGS, &control);
-+ control &= ~(PCI_MSI_FLAGS_QSIZE | PCI_MSI_FLAGS_ENABLE);
-+ if (entry->msi_attrib.maskbit || !entry->msi_attrib.masked)
-+ control |= PCI_MSI_FLAGS_ENABLE;
- pci_write_config_word(dev, pos + PCI_MSI_FLAGS, control);
-- pci_remove_saved_cap(save_state);
-- kfree(save_state);
--}
--
--static int __pci_save_msix_state(struct pci_dev *dev)
--{
-- int pos;
-- int irq, head, tail = 0;
-- u16 control;
-- struct pci_cap_saved_state *save_state;
--
-- if (!dev->msix_enabled)
-- return 0;
--
-- pos = pci_find_capability(dev, PCI_CAP_ID_MSIX);
-- if (pos <= 0)
-- return 0;
--
-- /* save the capability */
-- pci_read_config_word(dev, msi_control_reg(pos), &control);
-- save_state = kzalloc(sizeof(struct pci_cap_saved_state) + sizeof(u16),
-- GFP_KERNEL);
-- if (!save_state) {
-- printk(KERN_ERR "Out of memory in pci_save_msix_state\n");
-- return -ENOMEM;
-- }
-- *((u16 *)&save_state->data[0]) = control;
--
-- /* save the table */
-- irq = head = dev->first_msi_irq;
-- while (head != tail) {
-- struct msi_desc *entry;
--
-- entry = get_irq_msi(irq);
-- read_msi_msg(irq, &entry->msg_save);
--
-- tail = entry->link.tail;
-- irq = tail;
-- }
--
-- save_state->cap_nr = PCI_CAP_ID_MSIX;
-- pci_add_saved_cap(dev, save_state);
-- return 0;
--}
--
--int pci_save_msi_state(struct pci_dev *dev)
--{
-- int rc;
--
-- rc = __pci_save_msi_state(dev);
-- if (rc)
-- return rc;
--
-- rc = __pci_save_msix_state(dev);
--
-- return rc;
- }
-
- static void __pci_restore_msix_state(struct pci_dev *dev)
- {
-- u16 save;
- int pos;
- int irq, head, tail = 0;
- struct msi_desc *entry;
-- struct pci_cap_saved_state *save_state;
-+ u16 control;
-
- if (!dev->msix_enabled)
- return;
-
-- save_state = pci_find_saved_cap(dev, PCI_CAP_ID_MSIX);
-- if (!save_state)
-- return;
-- save = *((u16 *)&save_state->data[0]);
-- pci_remove_saved_cap(save_state);
-- kfree(save_state);
--
-- pos = pci_find_capability(dev, PCI_CAP_ID_MSIX);
-- if (pos <= 0)
-- return;
--
- /* route the table */
- pci_intx(dev, 0); /* disable intx */
- msix_set_enable(dev, 0);
- irq = head = dev->first_msi_irq;
-+ entry = get_irq_msi(irq);
-+ pos = entry->msi_attrib.pos;
- while (head != tail) {
- entry = get_irq_msi(irq);
-- write_msi_msg(irq, &entry->msg_save);
-+ write_msi_msg(irq, &entry->msg);
-+ msi_set_mask_bit(irq, entry->msi_attrib.masked);
-
- tail = entry->link.tail;
- irq = tail;
- }
-
-- pci_write_config_word(dev, msi_control_reg(pos), save);
-+ pci_read_config_word(dev, pos + PCI_MSIX_FLAGS, &control);
-+ control &= ~PCI_MSIX_FLAGS_MASKALL;
-+ control |= PCI_MSIX_FLAGS_ENABLE;
-+ pci_write_config_word(dev, pos + PCI_MSIX_FLAGS, control);
- }
-
- void pci_restore_msi_state(struct pci_dev *dev)
-@@ -420,6 +318,7 @@ static int msi_capability_init(struct pc
- entry->msi_attrib.is_64 = is_64bit_address(control);
- entry->msi_attrib.entry_nr = 0;
- entry->msi_attrib.maskbit = is_mask_bit_support(control);
-+ entry->msi_attrib.masked = 1;
- entry->msi_attrib.default_irq = dev->irq; /* Save IOAPIC IRQ */
- entry->msi_attrib.pos = pos;
- if (is_mask_bit_support(control)) {
-@@ -507,6 +406,7 @@ static int msix_capability_init(struct p
- entry->msi_attrib.is_64 = 1;
- entry->msi_attrib.entry_nr = j;
- entry->msi_attrib.maskbit = 1;
-+ entry->msi_attrib.masked = 1;
- entry->msi_attrib.default_irq = dev->irq;
- entry->msi_attrib.pos = pos;
- entry->dev = dev;
---- a/drivers/pci/pci.c
-+++ b/drivers/pci/pci.c
-@@ -638,8 +638,6 @@ pci_save_state(struct pci_dev *dev)
- /* XXX: 100% dword access ok here? */
- for (i = 0; i < 16; i++)
- pci_read_config_dword(dev, i * 4,&dev->saved_config_space[i]);
-- if ((i = pci_save_msi_state(dev)) != 0)
-- return i;
- if ((i = pci_save_pcie_state(dev)) != 0)
- return i;
- if ((i = pci_save_pcix_state(dev)) != 0)
---- a/drivers/pci/pci.h
-+++ b/drivers/pci/pci.h
-@@ -52,10 +52,8 @@ static inline void pci_no_msi(void) { }
- #endif
-
- #if defined(CONFIG_PCI_MSI) && defined(CONFIG_PM)
--int pci_save_msi_state(struct pci_dev *dev);
- void pci_restore_msi_state(struct pci_dev *dev);
- #else
--static inline int pci_save_msi_state(struct pci_dev *dev) { return 0; }
- static inline void pci_restore_msi_state(struct pci_dev *dev) {}
- #endif
-
---- a/include/linux/msi.h
-+++ b/include/linux/msi.h
-@@ -17,7 +17,7 @@ struct msi_desc {
- struct {
- __u8 type : 5; /* {0: unused, 5h:MSI, 11h:MSI-X} */
- __u8 maskbit : 1; /* mask-pending bit supported ? */
-- __u8 unused : 1;
-+ __u8 masked : 1;
- __u8 is_64 : 1; /* Address size: 0=32bit 1=64bit */
- __u8 pos; /* Location of the msi capability */
- __u16 entry_nr; /* specific enabled entry */
-@@ -32,10 +32,8 @@ struct msi_desc {
- void __iomem *mask_base;
- struct pci_dev *dev;
-
--#ifdef CONFIG_PM
-- /* PM save area for MSIX address/data */
-- struct msi_msg msg_save;
--#endif
-+ /* Last set MSI message */
-+ struct msi_msg msg;
- };
-
- /*
---- a/include/linux/pci_regs.h
-+++ b/include/linux/pci_regs.h
-@@ -296,6 +296,7 @@
- #define PCI_MSIX_FLAGS 2
- #define PCI_MSIX_FLAGS_QSIZE 0x7FF
- #define PCI_MSIX_FLAGS_ENABLE (1 << 15)
-+#define PCI_MSIX_FLAGS_MASKALL (1 << 14)
- #define PCI_MSIX_FLAGS_BIRMASK (7 << 0)
- #define PCI_MSIX_FLAGS_BITMASK (1 << 0)
-
diff --git a/pci/pci-new-pci-e-reset-api.patch b/pci/pci-new-pci-e-reset-api.patch
index a079f39860c0c5..bb057256a33566 100644
--- a/pci/pci-new-pci-e-reset-api.patch
+++ b/pci/pci-new-pci-e-reset-api.patch
@@ -27,7 +27,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
-@@ -893,6 +893,34 @@ pci_disable_device(struct pci_dev *dev)
+@@ -891,6 +891,34 @@ pci_disable_device(struct pci_dev *dev)
}
/**
@@ -62,7 +62,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* pci_enable_wake - enable device to generate PME# when suspended
* @dev: - PCI device to operate on
* @state: - Current state of device.
-@@ -1405,4 +1433,5 @@ EXPORT_SYMBOL(pci_set_power_state);
+@@ -1403,4 +1431,5 @@ EXPORT_SYMBOL(pci_set_power_state);
EXPORT_SYMBOL(pci_save_state);
EXPORT_SYMBOL(pci_restore_state);
EXPORT_SYMBOL(pci_enable_wake);
@@ -90,7 +90,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
typedef unsigned short __bitwise pci_bus_flags_t;
enum pci_bus_flags {
PCI_BUS_FLAGS_NO_MSI = (__force pci_bus_flags_t) 1,
-@@ -537,6 +550,7 @@ static inline int pci_is_managed(struct
+@@ -532,6 +545,7 @@ static inline int pci_is_managed(struct
void pci_disable_device(struct pci_dev *dev);
void pci_set_master(struct pci_dev *dev);
diff --git a/pci/pci-repair-pci_save-restore_state-so-we-can-restore-one-save-many-times.patch b/pci/pci-repair-pci_save-restore_state-so-we-can-restore-one-save-many-times.patch
deleted file mode 100644
index d623e1b2f4c4d3..00000000000000
--- a/pci/pci-repair-pci_save-restore_state-so-we-can-restore-one-save-many-times.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-From owner-linux-pci@atrey.karlin.mff.cuni.cz Thu Mar 8 12:06:39 2007
-From: Eric W. Biederman <ebiederm@xmission.com>
-Date: Thu, 08 Mar 2007 13:06:13 -0700
-Subject: pci: Repair pci_save/restore_state so we can restore one save many times.
-To: Andrew Morton <akpm@linux-foundation.org>, Linus Torvalds <torvalds@linux-foundation.org>
-Cc: Jeff Garzik <jeff@garzik.org>, "Kok, Auke" <auke-jan.h.kok@intel.com>, Ingo Molnar <mingo@elte.hu>, "Michael S. Tsirkin" <mst@mellanox.co.il>, Pavel Machek <pavel@ucw.cz>, Jens Axboe <jens.axboe@oracle.com>, Adrian Bunk <bunk@stusta.de>, Linux Kernel Mailing List <linux-kernel@vger.kernel.org>, Thomas Gleixner <tglx@linutronix.de>, linux-pm@lists.osdl.org, Michal Piotrowski <michal.k.k.piotrowski@gmail.com>, Greg Kroah-Hartman <gregkh@suse.de>, <linux-pci@atrey.karlin.mff.cuni.cz>, michael@ellerman.id.au
-Message-ID: <m1lki75wlm.fsf_-_@ebiederm.dsl.xmission.com>
-
-
-From: Eric W. Biederman <ebiederm@xmission.com>
-
-Because we do not reserve space for the pci-x and pci-e state in struct
-pci dev we need to dynamically allocate it. However because we need
-to support restore being called multiple times after a single save
-it is never safe to free the buffers we have allocated to hold the
-state.
-
-So this patch modifies the save routines to first check to see
-if we have already allocated a state buffer before allocating
-a new one. Then the restore routines are modified to not free
-the state after restoring it. Simple and it fixes some subtle
-error path handling bugs, that are hard to test for.
-
-Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/pci/pci.c | 12 ++++++------
- include/linux/pci.h | 5 -----
- 2 files changed, 6 insertions(+), 11 deletions(-)
-
---- a/drivers/pci/pci.c
-+++ b/drivers/pci/pci.c
-@@ -551,7 +551,9 @@ static int pci_save_pcie_state(struct pc
- if (pos <= 0)
- return 0;
-
-- save_state = kzalloc(sizeof(*save_state) + sizeof(u16) * 4, GFP_KERNEL);
-+ save_state = pci_find_saved_cap(dev, PCI_CAP_ID_EXP);
-+ if (!save_state)
-+ save_state = kzalloc(sizeof(*save_state) + sizeof(u16) * 4, GFP_KERNEL);
- if (!save_state) {
- dev_err(&dev->dev, "Out of memory in pci_save_pcie_state\n");
- return -ENOMEM;
-@@ -582,8 +584,6 @@ static void pci_restore_pcie_state(struc
- pci_write_config_word(dev, pos + PCI_EXP_LNKCTL, cap[i++]);
- pci_write_config_word(dev, pos + PCI_EXP_SLTCTL, cap[i++]);
- pci_write_config_word(dev, pos + PCI_EXP_RTCTL, cap[i++]);
-- pci_remove_saved_cap(save_state);
-- kfree(save_state);
- }
-
-
-@@ -597,7 +597,9 @@ static int pci_save_pcix_state(struct pc
- if (pos <= 0)
- return 0;
-
-- save_state = kzalloc(sizeof(*save_state) + sizeof(u16), GFP_KERNEL);
-+ save_state = pci_find_saved_cap(dev, PCI_CAP_ID_EXP);
-+ if (!save_state)
-+ save_state = kzalloc(sizeof(*save_state) + sizeof(u16), GFP_KERNEL);
- if (!save_state) {
- dev_err(&dev->dev, "Out of memory in pci_save_pcie_state\n");
- return -ENOMEM;
-@@ -622,8 +624,6 @@ static void pci_restore_pcix_state(struc
- cap = (u16 *)&save_state->data[0];
-
- pci_write_config_word(dev, pos + PCI_X_CMD, cap[i++]);
-- pci_remove_saved_cap(save_state);
-- kfree(save_state);
- }
-
-
---- a/include/linux/pci.h
-+++ b/include/linux/pci.h
-@@ -222,11 +222,6 @@ static inline void pci_add_saved_cap(str
- hlist_add_head(&new_cap->next, &pci_dev->saved_cap_space);
- }
-
--static inline void pci_remove_saved_cap(struct pci_cap_saved_state *cap)
--{
-- hlist_del(&cap->next);
--}
--
- /*
- * For PCI devices, the region numbers are assigned this way:
- *
diff --git a/series b/series
index 759a768884643d..ea5e2c10ff1789 100644
--- a/series
+++ b/series
@@ -39,8 +39,6 @@ pci/pciehp-event-handling-rework.patch
pci/pciehp-adapt-to-device-driver-model.patch
pci/pci-scatterlist.h-needs-types.h.patch
pci/pci-cleanup-the-includes-of-linux-pci.h.patch
-pci/msi-safer-state-caching.patch
-pci/pci-repair-pci_save-restore_state-so-we-can-restore-one-save-many-times.patch
# usb patches queued for 2.6.21 (bugfixes, new ids, etc.)
usb/pxa2xx_udc-cleanups-use-platform_get_irq.patch
diff --git a/version b/version
index ceddf8de115c41..c6f97b4842a974 100644
--- a/version
+++ b/version
@@ -1 +1 @@
-2.6.21-rc3-git7
+2.6.21-rc3-git8