--- /dev/null
+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;
+- }
+ }
+
+ /******************************************************************************
--- /dev/null
+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) {
--- /dev/null
+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");
+ }
+
--- /dev/null
+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;
+ }
+
--- /dev/null
+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 */
--- /dev/null
+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
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