]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
more 2.6.22 patches queued up
authorGreg Kroah-Hartman <gregkh@suse.de>
Tue, 21 Aug 2007 05:50:52 +0000 (22:50 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 21 Aug 2007 05:50:52 +0000 (22:50 -0700)
queue-2.6.22/acpica-clear-reserved-fields-for-incoming-acpi-1.0-fadts.patch [new file with mode: 0644]
queue-2.6.22/acpica-fixed-possible-corruption-of-global-gpe-list.patch [new file with mode: 0644]
queue-2.6.22/avr32-fix-atomic_add_unless-and-atomic_sub_unless.patch [new file with mode: 0644]
queue-2.6.22/forcedeth-fix-random-hang-in-forcedeth-driver-when-using-netconsole.patch [new file with mode: 0644]
queue-2.6.22/libata-add-ati-sb700-device-ids-to-ahci-driver.patch [new file with mode: 0644]
queue-2.6.22/r8169-avoid-needless-napi-poll-scheduling.patch [new file with mode: 0644]
queue-2.6.22/series

diff --git a/queue-2.6.22/acpica-clear-reserved-fields-for-incoming-acpi-1.0-fadts.patch b/queue-2.6.22/acpica-clear-reserved-fields-for-incoming-acpi-1.0-fadts.patch
new file mode 100644 (file)
index 0000000..cf00bfb
--- /dev/null
@@ -0,0 +1,119 @@
+From stable-bounces@linux.kernel.org Wed Aug 15 12:00:34 2007
+From: Bob Moore <robert.moore@intel.com>
+Date: Wed, 15 Aug 2007 15:00:18 -0400
+Subject: ACPICA: Clear reserved fields for incoming ACPI 1.0 FADTs
+To: linux-stable <stable@kernel.org>
+Cc: "Brown, Len" <len.brown@intel.com>
+Message-ID: <46C34D42.3030101@redhat.com>
+
+
+From: Bob Moore <robert.moore@intel.com>
+
+ACPICA: Clear reserved fields for incoming ACPI 1.0 FADTs
+
+Fixed a problem with the internal FADT conversion where ACPI 1.0
+FADTs that contained invalid non-zero values in reserved fields
+could cause later failures because these fields have meaning in
+later revisions of the FADT. For incoming ACPI 1.0 FADTs, these
+fields are now always zeroed. (Preferred_PM_Profile, PSTATE_CNT,
+CST_CNT, IAPC_BOOT_FLAGS.)
+
+Signed-off-by: Bob Moore <robert.moore@intel.com>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Cc: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/acpi/tables/tbfadt.c |   44 +++++++++++++++++++++++++------------------
+ 1 file changed, 26 insertions(+), 18 deletions(-)
+
+--- a/drivers/acpi/tables/tbfadt.c
++++ b/drivers/acpi/tables/tbfadt.c
+@@ -211,14 +211,17 @@ void acpi_tb_parse_fadt(acpi_native_uint
+  * DESCRIPTION: Get a local copy of the FADT and convert it to a common format.
+  *              Performs validation on some important FADT fields.
+  *
++ * NOTE:        We create a local copy of the FADT regardless of the version.
++ *
+  ******************************************************************************/
+ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length)
+ {
+       /*
+-       * Check if the FADT is larger than what we know about (ACPI 2.0 version).
+-       * Truncate the table, but make some noise.
++       * Check if the FADT is larger than the largest table that we expect
++       * (the ACPI 2.0/3.0 version). If so, truncate the table, and issue
++       * a warning.
+        */
+       if (length > sizeof(struct acpi_table_fadt)) {
+               ACPI_WARNING((AE_INFO,
+@@ -227,10 +230,12 @@ void acpi_tb_create_local_fadt(struct ac
+                             sizeof(struct acpi_table_fadt)));
+       }
+-      /* Copy the entire FADT locally. Zero first for tb_convert_fadt */
++      /* Clear the entire local FADT */
+       ACPI_MEMSET(&acpi_gbl_FADT, 0, sizeof(struct acpi_table_fadt));
++      /* Copy the original FADT, up to sizeof (struct acpi_table_fadt) */
++
+       ACPI_MEMCPY(&acpi_gbl_FADT, table,
+                   ACPI_MIN(length, sizeof(struct acpi_table_fadt)));
+@@ -251,7 +256,7 @@ void acpi_tb_create_local_fadt(struct ac
+  * RETURN:      None
+  *
+  * DESCRIPTION: Converts all versions of the FADT to a common internal format.
+- *              -> Expand all 32-bit addresses to 64-bit.
++ *              Expand all 32-bit addresses to 64-bit.
+  *
+  * NOTE:        acpi_gbl_FADT must be of size (struct acpi_table_fadt),
+  *              and must contain a copy of the actual FADT.
+@@ -292,8 +297,23 @@ static void acpi_tb_convert_fadt(void)
+       }
+       /*
+-       * Expand the 32-bit V1.0 addresses to the 64-bit "X" generic address
+-       * structures as necessary.
++       * For ACPI 1.0 FADTs (revision 1 or 2), ensure that reserved fields which
++       * should be zero are indeed zero. This will workaround BIOSs that
++       * inadvertently place values in these fields.
++       *
++       * The ACPI 1.0 reserved fields that will be zeroed are the bytes located at
++       * offset 45, 55, 95, and the word located at offset 109, 110.
++       */
++      if (acpi_gbl_FADT.header.revision < 3) {
++              acpi_gbl_FADT.preferred_profile = 0;
++              acpi_gbl_FADT.pstate_control = 0;
++              acpi_gbl_FADT.cst_control = 0;
++              acpi_gbl_FADT.boot_flags = 0;
++      }
++
++      /*
++       * Expand the ACPI 1.0 32-bit V1.0 addresses to the ACPI 2.0 64-bit "X"
++       * generic address structures as necessary.
+        */
+       for (i = 0; i < ACPI_FADT_INFO_ENTRIES; i++) {
+               target =
+@@ -349,18 +369,6 @@ static void acpi_tb_convert_fadt(void)
+                   acpi_gbl_FADT.xpm1a_event_block.space_id;
+       }
+-
+-      /*
+-       * For ACPI 1.0 FADTs, ensure that reserved fields (which should be zero)
+-       * are indeed zero. This will workaround BIOSs that inadvertently placed
+-       * values in these fields.
+-       */
+-      if (acpi_gbl_FADT.header.revision < 3) {
+-              acpi_gbl_FADT.preferred_profile = 0;
+-              acpi_gbl_FADT.pstate_control = 0;
+-              acpi_gbl_FADT.cst_control = 0;
+-              acpi_gbl_FADT.boot_flags = 0;
+-      }
+ }
+ /******************************************************************************
diff --git a/queue-2.6.22/acpica-fixed-possible-corruption-of-global-gpe-list.patch b/queue-2.6.22/acpica-fixed-possible-corruption-of-global-gpe-list.patch
new file mode 100644 (file)
index 0000000..d62f84e
--- /dev/null
@@ -0,0 +1,39 @@
+From stable-bounces@linux.kernel.org Wed Aug 15 11:58:37 2007
+From: Bob Moore <robert.moore@intel.com>
+Date: Wed, 15 Aug 2007 14:58:15 -0400
+Subject: ACPICA: Fixed possible corruption of global GPE list
+To: linux-stable <stable@kernel.org>
+Cc: "Brown, Len" <len.brown@intel.com>
+Message-ID: <46C34CC7.2090504@redhat.com>
+
+
+From: Bob Moore <robert.moore@intel.com>
+
+ACPICA: Fixed possible corruption of global GPE list
+
+Fixed a problem in acpi_ev_delete_gpe_xrupt where the global interrupt
+list could be corrupted if the interrupt being removed was at
+the head of the list. Reported by Linn Crosetto.
+
+Signed-off-by: Bob Moore <robert.moore@intel.com>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Cc: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/acpi/events/evgpeblk.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/acpi/events/evgpeblk.c
++++ b/drivers/acpi/events/evgpeblk.c
+@@ -586,6 +586,10 @@ acpi_ev_delete_gpe_xrupt(struct acpi_gpe
+       flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
+       if (gpe_xrupt->previous) {
+               gpe_xrupt->previous->next = gpe_xrupt->next;
++      } else {
++              /* No previous, update list head */
++
++              acpi_gbl_gpe_xrupt_list_head = gpe_xrupt->next;
+       }
+       if (gpe_xrupt->next) {
diff --git a/queue-2.6.22/avr32-fix-atomic_add_unless-and-atomic_sub_unless.patch b/queue-2.6.22/avr32-fix-atomic_add_unless-and-atomic_sub_unless.patch
new file mode 100644 (file)
index 0000000..6ded0f0
--- /dev/null
@@ -0,0 +1,46 @@
+From hskinnemoen@norway.atmel.com Wed Aug 15 06:32:16 2007
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date: Wed, 15 Aug 2007 15:31:01 +0200
+Subject: AVR32: Fix atomic_add_unless() and atomic_sub_unless()
+To: Greg KH <greg@kroah.com>
+Cc: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Message-ID: <11871846612734-git-send-email-hskinnemoen@atmel.com>
+
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+These functions depend on "result" being initalized to 0, but "result"
+is not included as an input constraint to the inline assembly block
+following its initialization, only as an output constraint. Thus gcc
+thinks it doesn't need to initialize it, so result ends up undefined
+if the "unless" condition is true.
+
+This fixes an oops in sunrpc where the faulty atomics caused
+rpciod_up() to not start the workqueue as it should.
+
+Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/asm-avr32/atomic.h |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/include/asm-avr32/atomic.h
++++ b/include/asm-avr32/atomic.h
+@@ -101,7 +101,7 @@ static inline int atomic_sub_unless(atom
+               "       mov     %1, 1\n"
+               "1:"
+               : "=&r"(tmp), "=&r"(result), "=o"(v->counter)
+-              : "m"(v->counter), "rKs21"(a), "rKs21"(u)
++              : "m"(v->counter), "rKs21"(a), "rKs21"(u), "1"(result)
+               : "cc", "memory");
+       return result;
+@@ -137,7 +137,7 @@ static inline int atomic_add_unless(atom
+                       "       mov     %1, 1\n"
+                       "1:"
+                       : "=&r"(tmp), "=&r"(result), "=o"(v->counter)
+-                      : "m"(v->counter), "r"(a), "ir"(u)
++                      : "m"(v->counter), "r"(a), "ir"(u), "1"(result)
+                       : "cc", "memory");
+       }
diff --git a/queue-2.6.22/forcedeth-fix-random-hang-in-forcedeth-driver-when-using-netconsole.patch b/queue-2.6.22/forcedeth-fix-random-hang-in-forcedeth-driver-when-using-netconsole.patch
new file mode 100644 (file)
index 0000000..893db97
--- /dev/null
@@ -0,0 +1,84 @@
+From stable-bounces@linux.kernel.org Tue Aug 14 11:57:11 2007
+From: Timo Jantunen <jeti@iki.fi>
+Date: Tue, 14 Aug 2007 21:56:57 +0300 (EEST)
+Subject: forcedeth: fix random hang in forcedeth driver when using netconsole
+To: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: stable@kernel.org
+Message-ID: <Pine.LNX.4.64.0708142147130.6769@limbo>
+
+From: Timo Jantunen <jeti@iki.fi>
+
+If the forcedeth driver receives too much work in an interrupt, it
+assumes it has a broken hardware with stuck IRQ. It works around the
+problem by disabling interrupts on the nic but makes a printk while
+holding device spinlog - which isn't smart thing to do if you have
+netconsole on the same nic.
+
+This patch moves the printk's out of the spinlock protected area.
+
+
+Without this patch the machine hangs hard. With this patch everything
+still works even when there is significant increase on CPU usage while
+using the nic.
+
+Signed-off-by: Timo Jantunen <jeti@iki.fi>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ drivers/net/forcedeth.c |   10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+--- a/drivers/net/forcedeth.c
++++ b/drivers/net/forcedeth.c
+@@ -3067,8 +3067,8 @@ static irqreturn_t nv_nic_irq(int foo, v
+                               np->nic_poll_irq = np->irqmask;
+                               mod_timer(&np->nic_poll, jiffies + POLL_WAIT);
+                       }
+-                      printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq.\n", dev->name, i);
+                       spin_unlock(&np->lock);
++                      printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq.\n", dev->name, i);
+                       break;
+               }
+@@ -3185,8 +3185,8 @@ static irqreturn_t nv_nic_irq_optimized(
+                               np->nic_poll_irq = np->irqmask;
+                               mod_timer(&np->nic_poll, jiffies + POLL_WAIT);
+                       }
+-                      printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq.\n", dev->name, i);
+                       spin_unlock(&np->lock);
++                      printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq.\n", dev->name, i);
+                       break;
+               }
+@@ -3232,8 +3232,8 @@ static irqreturn_t nv_nic_irq_tx(int foo
+                               np->nic_poll_irq |= NVREG_IRQ_TX_ALL;
+                               mod_timer(&np->nic_poll, jiffies + POLL_WAIT);
+                       }
+-                      printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq_tx.\n", dev->name, i);
+                       spin_unlock_irqrestore(&np->lock, flags);
++                      printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq_tx.\n", dev->name, i);
+                       break;
+               }
+@@ -3347,8 +3347,8 @@ static irqreturn_t nv_nic_irq_rx(int foo
+                               np->nic_poll_irq |= NVREG_IRQ_RX_ALL;
+                               mod_timer(&np->nic_poll, jiffies + POLL_WAIT);
+                       }
+-                      printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq_rx.\n", dev->name, i);
+                       spin_unlock_irqrestore(&np->lock, flags);
++                      printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq_rx.\n", dev->name, i);
+                       break;
+               }
+       }
+@@ -3420,8 +3420,8 @@ static irqreturn_t nv_nic_irq_other(int 
+                               np->nic_poll_irq |= NVREG_IRQ_OTHER;
+                               mod_timer(&np->nic_poll, jiffies + POLL_WAIT);
+                       }
+-                      printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq_other.\n", dev->name, i);
+                       spin_unlock_irqrestore(&np->lock, flags);
++                      printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq_other.\n", dev->name, i);
+                       break;
+               }
diff --git a/queue-2.6.22/libata-add-ati-sb700-device-ids-to-ahci-driver.patch b/queue-2.6.22/libata-add-ati-sb700-device-ids-to-ahci-driver.patch
new file mode 100644 (file)
index 0000000..de8eb08
--- /dev/null
@@ -0,0 +1,46 @@
+From stable-bounces@linux.kernel.org Tue Aug 14 10:21:05 2007
+From: su henry <henry.su.ati@gmail.com>
+Date: Tue, 14 Aug 2007 13:20:46 -0400
+Subject: libata: add ATI SB700 device IDs to AHCI driver
+To: linux-stable <stable@kernel.org>
+Cc: Jeff Garzik <jeff@garzik.org>
+Message-ID: <46C1E46E.1060307@redhat.com>
+
+
+From: su henry <henry.su.ati@gmail.com>
+
+The SATA controller device ID is different according to
+the onchip SATA type set in the system BIOS:
+Device                              Device ID
+SATA in IDE mode             0x4390
+SATA in AHCI mode           0x4391
+SATA in non-raid5 driver     0x4392
+SATA in raid5 driver           0x4393
+
+Although the device ID is different, they use the same AHCI driver
+.The attached file is the patch for adding these device
+IDs for ATI SB700.
+
+Signed-off-by: su henry <henry.su.ati@gmail.com>
+Signed-off-by: Jeff Garzik <jeff@garzik.org>
+Cc: Chuck Ebbert <cebbert@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ata/ahci.c |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/drivers/ata/ahci.c
++++ b/drivers/ata/ahci.c
+@@ -399,7 +399,10 @@ static const struct pci_device_id ahci_p
+       /* ATI */
+       { PCI_VDEVICE(ATI, 0x4380), board_ahci_sb600 }, /* ATI SB600 */
+-      { PCI_VDEVICE(ATI, 0x4390), board_ahci_sb600 }, /* ATI SB700 */
++      { PCI_VDEVICE(ATI, 0x4390), board_ahci_sb600 }, /* ATI SB700 IDE */
++      { PCI_VDEVICE(ATI, 0x4391), board_ahci_sb600 }, /* ATI SB700 AHCI */
++      { PCI_VDEVICE(ATI, 0x4392), board_ahci_sb600 }, /* ATI SB700 nraid5 */
++      { PCI_VDEVICE(ATI, 0x4393), board_ahci_sb600 }, /* ATI SB700 raid5 */
+       /* VIA */
+       { PCI_VDEVICE(VIA, 0x3349), board_ahci_vt8251 }, /* VIA VT8251 */
diff --git a/queue-2.6.22/r8169-avoid-needless-napi-poll-scheduling.patch b/queue-2.6.22/r8169-avoid-needless-napi-poll-scheduling.patch
new file mode 100644 (file)
index 0000000..669540c
--- /dev/null
@@ -0,0 +1,57 @@
+From stable-bounces@linux.kernel.org Tue Aug 14 15:33:16 2007
+From: Francois Romieu <romieu@fr.zoreil.com>
+Date: Wed, 15 Aug 2007 00:29:27 +0200
+Subject: r8169: avoid needless NAPI poll scheduling
+To: stable@kernel.org
+Cc: Thomas Müller <thomas@mathtm.de>, Chuck Ebbert <cebbert@redhat.com>, Andreas Adamis <blindg0@gmail.com>
+Message-ID: <20070814222927.GA7631@electric-eye.fr.zoreil.com>
+Content-Disposition: inline
+
+From: Francois Romieu <romieu@fr.zoreil.com>
+
+Theory  : though needless, it should not have hurt.
+Practice: it does not play nice with DEBUG_SHIRQ + LOCKDEP + UP
+(see https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=3D242572).
+
+The patch makes sense in itself but I should dig why it has an effect
+on #242572 (assuming that NAPI do not change in a near future).
+
+Patch in mainline as 313b0305b5a1e7e0fb39383befbf79558ce68a9c.
+Backported to 2.6.22-stable by Thomas M=FCller.
+
+Signed-off-by: Thomas M=FCller <thomas@mathtm.de>
+Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/r8169.c |   18 ++++++++++--------
+ 1 file changed, 10 insertions(+), 8 deletions(-)
+
+--- a/drivers/net/r8169.c
++++ b/drivers/net/r8169.c
+@@ -2649,14 +2649,16 @@ rtl8169_interrupt(int irq, void *dev_ins
+                       rtl8169_check_link_status(dev, tp, ioaddr);
+ #ifdef CONFIG_R8169_NAPI
+-              RTL_W16(IntrMask, rtl8169_intr_mask & ~rtl8169_napi_event);
+-              tp->intr_mask = ~rtl8169_napi_event;
+-
+-              if (likely(netif_rx_schedule_prep(dev)))
+-                      __netif_rx_schedule(dev);
+-              else if (netif_msg_intr(tp)) {
+-                      printk(KERN_INFO "%s: interrupt %04x taken in poll\n",
+-                             dev->name, status);
++              if (status & rtl8169_napi_event) {
++                      RTL_W16(IntrMask, rtl8169_intr_mask & ~rtl8169_napi_event);
++                      tp->intr_mask = ~rtl8169_napi_event;
++
++                      if (likely(netif_rx_schedule_prep(dev)))
++                              __netif_rx_schedule(dev);
++                      else if (netif_msg_intr(tp)) {
++                              printk(KERN_INFO "%s: interrupt %04x in poll\n",
++                                     dev->name, status);
++                      }
+               }
+               break;
+ #else
index e95a7fd240f891c87d67804e99748f8e8891df3a..b8fd0bde0c4f86a887573b8d7e53832e5018a930 100644 (file)
@@ -5,3 +5,9 @@ sky2-carrier-mgmt.patch
 sky2-napi-fill.patch
 sky2-stable-trunc.patch
 revert-x86-serial-convert-legacy-com-ports-to-platform-devices.patch
+acpica-fixed-possible-corruption-of-global-gpe-list.patch
+acpica-clear-reserved-fields-for-incoming-acpi-1.0-fadts.patch
+avr32-fix-atomic_add_unless-and-atomic_sub_unless.patch
+r8169-avoid-needless-napi-poll-scheduling.patch
+forcedeth-fix-random-hang-in-forcedeth-driver-when-using-netconsole.patch
+libata-add-ati-sb700-device-ids-to-ahci-driver.patch