--- /dev/null
+From b5eae9ff5ba6d76de19286dd6429acd7cde3f79d Mon Sep 17 00:00:00 2001
+From: Bruno Randolf <br1@einfach.org>
+Date: Wed, 19 May 2010 10:18:16 +0900
+Subject: ath5k: consistently use rx_bufsize for RX DMA
+
+From: Bruno Randolf <br1@einfach.org>
+
+commit b5eae9ff5ba6d76de19286dd6429acd7cde3f79d upstream.
+
+We should use the same buffer size we set up for DMA also in the hardware
+descriptor. Previously we used common->rx_bufsize for setting up the DMA
+mapping, but used skb_tailroom(skb) for the size we tell to the hardware in the
+descriptor itself. The problem is that skb_tailroom(skb) can give us a larger
+value than the size we set up for DMA before. This allows the hardware to write
+into memory locations not set up for DMA. In practice this should rarely happen
+because all packets should be smaller than the maximum 802.11 packet size.
+
+On the tested platform rx_bufsize is 2528, and we allocated an skb of 2559
+bytes length (including padding for cache alignment) but sbk_tailroom() was
+2592. Just consistently use rx_bufsize for all RX DMA memory sizes.
+
+Also use the return value of the descriptor setup function.
+
+Signed-off-by: Bruno Randolf <br1@einfach.org>
+Reviewed-by: Luis R. Rodriguez <lrodriguez@atheros.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/ath/ath5k/base.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath5k/base.c
++++ b/drivers/net/wireless/ath/ath5k/base.c
+@@ -1211,6 +1211,7 @@ ath5k_rxbuf_setup(struct ath5k_softc *sc
+ struct ath5k_hw *ah = sc->ah;
+ struct sk_buff *skb = bf->skb;
+ struct ath5k_desc *ds;
++ int ret;
+
+ if (!skb) {
+ skb = ath5k_rx_skb_alloc(sc, &bf->skbaddr);
+@@ -1237,9 +1238,9 @@ ath5k_rxbuf_setup(struct ath5k_softc *sc
+ ds = bf->desc;
+ ds->ds_link = bf->daddr; /* link to self */
+ ds->ds_data = bf->skbaddr;
+- ah->ah_setup_rx_desc(ah, ds,
+- skb_tailroom(skb), /* buffer size */
+- 0);
++ ret = ah->ah_setup_rx_desc(ah, ds, ah->common.rx_bufsize, 0);
++ if (ret)
++ return ret;
+
+ if (sc->rxlink != NULL)
+ *sc->rxlink = bf->daddr;
--- /dev/null
+From 736b3a27b3c50c4a23717b802240435a69e8d0ff Mon Sep 17 00:00:00 2001
+From: Sujith <Sujith.Manoharan@atheros.com>
+Date: Wed, 17 Mar 2010 14:25:24 +0530
+Subject: ath9k_hw: fix hardware deinit
+
+From: Sujith <Sujith.Manoharan@atheros.com>
+
+commit 736b3a27b3c50c4a23717b802240435a69e8d0ff upstream.
+
+Without this you will get a panic if the device initialization
+fails. Also, free ath_hw instance properly. ath9k_hw_deinit()
+shouldn't do it.
+
+Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
+Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/ath/ath9k/hw.c | 4 +---
+ drivers/net/wireless/ath/ath9k/init.c | 3 +++
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -1241,7 +1241,7 @@ void ath9k_hw_deinit(struct ath_hw *ah)
+ {
+ struct ath_common *common = ath9k_hw_common(ah);
+
+- if (common->state <= ATH_HW_INITIALIZED)
++ if (common->state < ATH_HW_INITIALIZED)
+ goto free_hw;
+
+ if (!AR_SREV_9100(ah))
+@@ -1252,8 +1252,6 @@ void ath9k_hw_deinit(struct ath_hw *ah)
+ free_hw:
+ if (!AR_SREV_9280_10_OR_LATER(ah))
+ ath9k_hw_rf_free_ext_banks(ah);
+- kfree(ah);
+- ah = NULL;
+ }
+ EXPORT_SYMBOL(ath9k_hw_deinit);
+
+--- a/drivers/net/wireless/ath/ath9k/init.c
++++ b/drivers/net/wireless/ath/ath9k/init.c
+@@ -760,6 +760,9 @@ static void ath9k_deinit_softc(struct at
+
+ tasklet_kill(&sc->intr_tq);
+ tasklet_kill(&sc->bcon_tasklet);
++
++ kfree(sc->sc_ah);
++ sc->sc_ah = NULL;
+ }
+
+ void ath9k_deinit_device(struct ath_softc *sc)
--- /dev/null
+From 57c8a456640fa3ca777652f11f2db4179a3e66b6 Mon Sep 17 00:00:00 2001
+From: Oliver Hartkopp <socketcan@hartkopp.net>
+Date: Tue, 18 May 2010 14:03:10 -0700
+Subject: can: Fix SJA1000 command register writes on SMP systems
+
+From: Oliver Hartkopp <socketcan@hartkopp.net>
+
+commit 57c8a456640fa3ca777652f11f2db4179a3e66b6 upstream.
+
+The SJA1000 command register is concurrently written in the rx-path to free
+the receive buffer _and_ in the tx-path to start the transmission.
+
+The SJA1000 data sheet, 6.4.4 COMMAND REGISTER (CMR) states:
+"Between two commands at least one internal clock cycle is needed in
+order to proceed. The internal clock is half of the external oscillator
+frequency."
+
+On SMP systems the current implementation leads to a write stall in the
+tx-path, which can be solved by adding some general locking and some time
+to settle the write_reg() operation for the command register.
+
+Thanks to Klaus Hitschler for the original fix and detailed problem
+description.
+
+This patch applies on net-2.6 and (with some offsets) on net-next-2.6 .
+
+Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
+Acked-by: Wolfgang Grandegger <wg@grandegger.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/can/sja1000/sja1000.c | 20 +++++++++++++++++---
+ drivers/net/can/sja1000/sja1000.h | 1 +
+ 2 files changed, 18 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/can/sja1000/sja1000.c
++++ b/drivers/net/can/sja1000/sja1000.c
+@@ -84,6 +84,20 @@ static struct can_bittiming_const sja100
+ .brp_inc = 1,
+ };
+
++static void sja1000_write_cmdreg(struct sja1000_priv *priv, u8 val)
++{
++ unsigned long flags;
++
++ /*
++ * The command register needs some locking and time to settle
++ * the write_reg() operation - especially on SMP systems.
++ */
++ spin_lock_irqsave(&priv->cmdreg_lock, flags);
++ priv->write_reg(priv, REG_CMR, val);
++ priv->read_reg(priv, REG_SR);
++ spin_unlock_irqrestore(&priv->cmdreg_lock, flags);
++}
++
+ static int sja1000_probe_chip(struct net_device *dev)
+ {
+ struct sja1000_priv *priv = netdev_priv(dev);
+@@ -297,7 +311,7 @@ static netdev_tx_t sja1000_start_xmit(st
+
+ can_put_echo_skb(skb, dev, 0);
+
+- priv->write_reg(priv, REG_CMR, CMD_TR);
++ sja1000_write_cmdreg(priv, CMD_TR);
+
+ return NETDEV_TX_OK;
+ }
+@@ -346,7 +360,7 @@ static void sja1000_rx(struct net_device
+ cf->can_id = id;
+
+ /* release receive buffer */
+- priv->write_reg(priv, REG_CMR, CMD_RRB);
++ sja1000_write_cmdreg(priv, CMD_RRB);
+
+ netif_rx(skb);
+
+@@ -374,7 +388,7 @@ static int sja1000_err(struct net_device
+ cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
+ stats->rx_over_errors++;
+ stats->rx_errors++;
+- priv->write_reg(priv, REG_CMR, CMD_CDO); /* clear bit */
++ sja1000_write_cmdreg(priv, CMD_CDO); /* clear bit */
+ }
+
+ if (isrc & IRQ_EI) {
+--- a/drivers/net/can/sja1000/sja1000.h
++++ b/drivers/net/can/sja1000/sja1000.h
+@@ -167,6 +167,7 @@ struct sja1000_priv {
+
+ void __iomem *reg_base; /* ioremap'ed address to registers */
+ unsigned long irq_flags; /* for request_irq() */
++ spinlock_t cmdreg_lock; /* lock for concurrent cmd register writes */
+
+ u16 flags; /* custom mode flags */
+ u8 ocr; /* output control register */
--- /dev/null
+From cdc6e3d3968052cebb2f2ddcd742bff29fbd1a90 Mon Sep 17 00:00:00 2001
+From: Jan Beulich <JBeulich@novell.com>
+Date: Tue, 27 Apr 2010 14:01:20 -0700
+Subject: drivers/base/cpu.c: fix the output from /sys/devices/system/cpu/offline
+
+From: Jan Beulich <JBeulich@novell.com>
+
+commit cdc6e3d3968052cebb2f2ddcd742bff29fbd1a90 upstream.
+
+Without CONFIG_CPUMASK_OFFSTACK, simply inverting cpu_online_mask leads
+to CPUs beyond nr_cpu_ids to be displayed twice and CPUs not even
+possible to be displayed as offline.
+
+Signed-off-by: Jan Beulich <jbeulich@novell.com>
+Cc: Andi Kleen <ak@linux.intel.com>
+Cc: Stephen Rothwell <sfr@canb.auug.org.au>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/base/cpu.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/base/cpu.c
++++ b/drivers/base/cpu.c
+@@ -186,7 +186,7 @@ static ssize_t print_cpus_offline(struct
+ /* display offline cpus < nr_cpu_ids */
+ if (!alloc_cpumask_var(&offline, GFP_KERNEL))
+ return -ENOMEM;
+- cpumask_complement(offline, cpu_online_mask);
++ cpumask_andnot(offline, cpu_possible_mask, cpu_online_mask);
+ n = cpulist_scnprintf(buf, len, offline);
+ free_cpumask_var(offline);
+
--- /dev/null
+From 654fc6073f68efa3b6c466825749e73e7fbb92cd Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Thu, 27 May 2010 13:18:21 +0100
+Subject: drm/i915: Reject bind_to_gtt() early if object > aperture
+
+From: Chris Wilson <chris@chris-wilson.co.uk>
+
+commit 654fc6073f68efa3b6c466825749e73e7fbb92cd upstream.
+
+If the object is bigger than the entire aperture, reject it early
+before evicting everything in a vain attempt to find space.
+
+v2: Use E2BIG as suggested by Owain G. Ainsworth.
+
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Signed-off-by: Eric Anholt <eric@anholt.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/i915/i915_gem.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/drivers/gpu/drm/i915/i915_gem.c
++++ b/drivers/gpu/drm/i915/i915_gem.c
+@@ -2688,6 +2688,14 @@ i915_gem_object_bind_to_gtt(struct drm_g
+ return -EINVAL;
+ }
+
++ /* If the object is bigger than the entire aperture, reject it early
++ * before evicting everything in a vain attempt to find space.
++ */
++ if (obj->size > dev->gtt_total) {
++ DRM_ERROR("Attempting to bind an object larger than the aperture\n");
++ return -E2BIG;
++ }
++
+ search_free:
+ free_space = drm_mm_search_free(&dev_priv->mm.gtt_space,
+ obj->size, alignment, 0);
--- /dev/null
+From bd9b5caf8616501d2ab6f17210b11f81ea7546eb Mon Sep 17 00:00:00 2001
+From: Henrik Kretzschmar <henne@nachtwindheim.de>
+Date: Mon, 24 May 2010 14:33:54 -0700
+Subject: fbdev: section cleanup in arcfb
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Henrik Kretzschmar <henne@nachtwindheim.de>
+
+commit bd9b5caf8616501d2ab6f17210b11f81ea7546eb upstream.
+
+Fix the sections in the arcfb driver, by moving:
+
+* the variables arcfb_fix and arcfb_var from .init.data to .devinit.data
+
+* arcfb_remove() from .text to .devexit.text
+
+This fixes the following warnings issued by modpost:
+
+WARNING: drivers/video/built-in.o(.devinit.text+0x543): Section mismatch in reference from the function arcfb_probe() to the variable .init.data:arcfb_var
+The function __devinit arcfb_probe() references
+a variable __initdata arcfb_var.
+If arcfb_var is only used by arcfb_probe then
+annotate arcfb_var with a matching annotation.
+
+WARNING: drivers/video/built-in.o(.devinit.text+0x558): Section mismatch in reference from the function arcfb_probe() to the variable .init.data:arcfb_fix
+The function __devinit arcfb_probe() references
+a variable __initdata arcfb_fix.
+If arcfb_fix is only used by arcfb_probe then
+annotate arcfb_fix with a matching annotation.
+
+Signed-off-by: Henrik Kretzschmar <henne@nachtwindheim.de>
+Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/video/arcfb.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/drivers/video/arcfb.c
++++ b/drivers/video/arcfb.c
+@@ -80,7 +80,7 @@ struct arcfb_par {
+ spinlock_t lock;
+ };
+
+-static struct fb_fix_screeninfo arcfb_fix __initdata = {
++static struct fb_fix_screeninfo arcfb_fix __devinitdata = {
+ .id = "arcfb",
+ .type = FB_TYPE_PACKED_PIXELS,
+ .visual = FB_VISUAL_MONO01,
+@@ -90,7 +90,7 @@ static struct fb_fix_screeninfo arcfb_fi
+ .accel = FB_ACCEL_NONE,
+ };
+
+-static struct fb_var_screeninfo arcfb_var __initdata = {
++static struct fb_var_screeninfo arcfb_var __devinitdata = {
+ .xres = 128,
+ .yres = 64,
+ .xres_virtual = 128,
+@@ -588,7 +588,7 @@ err:
+ return retval;
+ }
+
+-static int arcfb_remove(struct platform_device *dev)
++static int __devexit arcfb_remove(struct platform_device *dev)
+ {
+ struct fb_info *info = platform_get_drvdata(dev);
+
+@@ -602,7 +602,7 @@ static int arcfb_remove(struct platform_
+
+ static struct platform_driver arcfb_driver = {
+ .probe = arcfb_probe,
+- .remove = arcfb_remove,
++ .remove = __devexit_p(arcfb_remove),
+ .driver = {
+ .name = "arcfb",
+ },
--- /dev/null
+From e217e6e39f62e47f7e659b715235dbd57df480f8 Mon Sep 17 00:00:00 2001
+From: Henrik Kretzschmar <henne@nachtwindheim.de>
+Date: Mon, 24 May 2010 14:33:56 -0700
+Subject: fbdev: section cleanup in hgafb
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Henrik Kretzschmar <henne@nachtwindheim.de>
+
+commit e217e6e39f62e47f7e659b715235dbd57df480f8 upstream.
+
+Fix up the sections in the hgafb driver, by
+
+* moving hga_default_var and hga_fix from .init.data to .devinit.data
+
+* moving hga_detect() from .init.text to .devinit.text
+
+* moving hga_fb_remove() from .text to .devexit.text
+
+This fixes the following warnings issued by modpost:
+
+WARNING: drivers/video/hgafb.o(.devinit.text+0x18): Section mismatch in referenc
+e from the function hgafb_probe() to the function .init.text:hga_card_detect()
+The function __devinit hgafb_probe() references
+a function __init hga_card_detect().
+If hga_card_detect is only used by hgafb_probe then
+annotate hga_card_detect with a matching annotation.
+
+WARNING: drivers/video/hgafb.o(.devinit.text+0xfe): Section mismatch in referenc
+e from the function hgafb_probe() to the variable .init.data:hga_fix
+The function __devinit hgafb_probe() references
+a variable __initdata hga_fix.
+If hga_fix is only used by hgafb_probe then
+annotate hga_fix with a matching annotation.
+
+WARNING: drivers/video/hgafb.o(.devinit.text+0x105): Section mismatch in reference from the function hgafb_probe() to the variable .init.data:hga_default_var
+The function __devinit hgafb_probe() references
+a variable __initdata hga_default_var.
+If hga_default_var is only used by hgafb_probe then
+annotate hga_default_var with a matching annotation.
+
+Signed-off-by: Henrik Kretzschmar <henne@nachtwindheim.de>
+Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/video/hgafb.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+--- a/drivers/video/hgafb.c
++++ b/drivers/video/hgafb.c
+@@ -106,7 +106,7 @@ static DEFINE_SPINLOCK(hga_reg_lock);
+
+ /* Framebuffer driver structures */
+
+-static struct fb_var_screeninfo __initdata hga_default_var = {
++static struct fb_var_screeninfo hga_default_var __devinitdata = {
+ .xres = 720,
+ .yres = 348,
+ .xres_virtual = 720,
+@@ -120,7 +120,7 @@ static struct fb_var_screeninfo __initda
+ .width = -1,
+ };
+
+-static struct fb_fix_screeninfo __initdata hga_fix = {
++static struct fb_fix_screeninfo hga_fix __devinitdata = {
+ .id = "HGA",
+ .type = FB_TYPE_PACKED_PIXELS, /* (not sure) */
+ .visual = FB_VISUAL_MONO10,
+@@ -276,7 +276,7 @@ static void hga_blank(int blank_mode)
+ spin_unlock_irqrestore(&hga_reg_lock, flags);
+ }
+
+-static int __init hga_card_detect(void)
++static int __devinit hga_card_detect(void)
+ {
+ int count = 0;
+ void __iomem *p, *q;
+@@ -596,7 +596,7 @@ static int __devinit hgafb_probe(struct
+ return 0;
+ }
+
+-static int hgafb_remove(struct platform_device *pdev)
++static int __devexit hgafb_remove(struct platform_device *pdev)
+ {
+ struct fb_info *info = platform_get_drvdata(pdev);
+
+@@ -621,7 +621,7 @@ static int hgafb_remove(struct platform_
+
+ static struct platform_driver hgafb_driver = {
+ .probe = hgafb_probe,
+- .remove = hgafb_remove,
++ .remove = __devexit_p(hgafb_remove),
+ .driver = {
+ .name = "hgafb",
+ },
--- /dev/null
+From 3cc04971661e37e7de6fbf9808ede554b5e1cb4e Mon Sep 17 00:00:00 2001
+From: Henrik Kretzschmar <henne@nachtwindheim.de>
+Date: Mon, 24 May 2010 14:33:57 -0700
+Subject: fbdev: section cleanup in vfb
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Henrik Kretzschmar <henne@nachtwindheim.de>
+
+commit 3cc04971661e37e7de6fbf9808ede554b5e1cb4e upstream.
+
+Fix up the section in the vfb driver, by moving the variables vfb_default
+and vfb_fix from .init.data to .devinit.data
+
+This fixes the following warnings issued by modpost:
+
+WARNING: drivers/video/vfb.o(.devinit.text+0xf8): Section mismatch in reference from the function vfb_probe() to the variable .init.data:vfb_default
+The function __devinit vfb_probe() references
+a variable __initdata vfb_default.
+If vfb_default is only used by vfb_probe then
+annotate vfb_default with a matching annotation.
+
+WARNING: drivers/video/vfb.o(.devinit.text+0x114): Section mismatch in reference from the function vfb_probe() to the variable .init.data:vfb_fix
+The function __devinit vfb_probe() references
+a variable __initdata vfb_fix.
+If vfb_fix is only used by vfb_probe then
+annotate vfb_fix with a matching annotation.
+
+Signed-off-by: Henrik Kretzschmar <henne@nachtwindheim.de>
+Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/video/vfb.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/video/vfb.c
++++ b/drivers/video/vfb.c
+@@ -78,7 +78,7 @@ static void rvfree(void *mem, unsigned l
+ vfree(mem);
+ }
+
+-static struct fb_var_screeninfo vfb_default __initdata = {
++static struct fb_var_screeninfo vfb_default __devinitdata = {
+ .xres = 640,
+ .yres = 480,
+ .xres_virtual = 640,
+@@ -100,7 +100,7 @@ static struct fb_var_screeninfo vfb_defa
+ .vmode = FB_VMODE_NONINTERLACED,
+ };
+
+-static struct fb_fix_screeninfo vfb_fix __initdata = {
++static struct fb_fix_screeninfo vfb_fix __devinitdata = {
+ .id = "Virtual FB",
+ .type = FB_TYPE_PACKED_PIXELS,
+ .visual = FB_VISUAL_PSEUDOCOLOR,
--- /dev/null
+From ad1458464cbbe6935be6e20d70920301733158af Mon Sep 17 00:00:00 2001
+From: Henrik Kretzschmar <henne@nachtwindheim.de>
+Date: Mon, 24 May 2010 14:33:59 -0700
+Subject: fbdev: section cleanup in vga16fb
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Henrik Kretzschmar <henne@nachtwindheim.de>
+
+commit ad1458464cbbe6935be6e20d70920301733158af upstream.
+
+Fix up the sections in the vga16fb driver, by moving:
+
+* the variables vga16_defined and vga16fb
+ from .init.data to .devinit.data
+
+* vga16fb_setup() from .text to .init.text
+
+* vga16fb_remove() from .text. to .devexit.text
+
+This fixes the following warnings issued by modpost:
+
+WARNING: drivers/video/built-in.o(.devinit.text+0x1a420): Section mismatch in re
+ference from the function vga16fb_probe() to the (unknown reference) .init.data:
+(unknown)
+The function __devinit vga16fb_probe() references
+a (unknown reference) __initdata (unknown).
+If (unknown) is only used by vga16fb_probe then
+annotate (unknown) with a matching annotation.
+
+WARNING: drivers/video/built-in.o(.devinit.text+0x1a437): Section mismatch in reference from the function vga16fb_probe() to the variable .init.data:vga16fb_defined
+The function __devinit vga16fb_probe() references
+a variable __initdata vga16fb_defined.
+If vga16fb_defined is only used by vga16fb_probe then
+annotate vga16fb_defined with a matching annotation.
+
+WARNING: drivers/video/built-in.o(.devinit.text+0x1a457): Section mismatch in reference from the function vga16fb_probe() to the variable .init.data:vga16fb_fix
+The function __devinit vga16fb_probe() references
+a variable __initdata vga16fb_fix.
+If vga16fb_fix is only used by vga16fb_probe then
+annotate vga16fb_fix with a matching annotation.
+
+Signed-off-by: Henrik Kretzschmar <henne@nachtwindheim.de>
+Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/video/vga16fb.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+--- a/drivers/video/vga16fb.c
++++ b/drivers/video/vga16fb.c
+@@ -65,7 +65,7 @@ struct vga16fb_par {
+
+ /* --------------------------------------------------------------------- */
+
+-static struct fb_var_screeninfo vga16fb_defined __initdata = {
++static struct fb_var_screeninfo vga16fb_defined __devinitdata = {
+ .xres = 640,
+ .yres = 480,
+ .xres_virtual = 640,
+@@ -85,7 +85,7 @@ static struct fb_var_screeninfo vga16fb_
+ };
+
+ /* name should not depend on EGA/VGA */
+-static struct fb_fix_screeninfo vga16fb_fix __initdata = {
++static struct fb_fix_screeninfo vga16fb_fix __devinitdata = {
+ .id = "VGA16 VGA",
+ .smem_start = VGA_FB_PHYS,
+ .smem_len = VGA_FB_PHYS_LEN,
+@@ -1278,7 +1278,7 @@ static struct fb_ops vga16fb_ops = {
+ };
+
+ #ifndef MODULE
+-static int vga16fb_setup(char *options)
++static int __init vga16fb_setup(char *options)
+ {
+ char *this_opt;
+
+@@ -1376,7 +1376,7 @@ static int __devinit vga16fb_probe(struc
+ return ret;
+ }
+
+-static int vga16fb_remove(struct platform_device *dev)
++static int __devexit vga16fb_remove(struct platform_device *dev)
+ {
+ struct fb_info *info = platform_get_drvdata(dev);
+
+@@ -1393,7 +1393,7 @@ static int vga16fb_remove(struct platfor
+
+ static struct platform_driver vga16fb_driver = {
+ .probe = vga16fb_probe,
+- .remove = vga16fb_remove,
++ .remove = __devexit_p(vga16fb_remove),
+ .driver = {
+ .name = "vga16fb",
+ },
--- /dev/null
+From fb6cb3270af8f2ad3dd556906a9c52aa85754849 Mon Sep 17 00:00:00 2001
+From: Henrik Kretzschmar <henne@nachtwindheim.de>
+Date: Mon, 24 May 2010 14:34:00 -0700
+Subject: fbdev: section cleanup in w100fb
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Henrik Kretzschmar <henne@nachtwindheim.de>
+
+commit fb6cb3270af8f2ad3dd556906a9c52aa85754849 upstream.
+
+Fix up the section in the w100fb driver, by moving:
+
+* w100fb_remove() from .text to .devexit.text
+
+* w100_get_xtal_table() from .text to .devinit.text
+
+* w100fb_init() from .devinit.text to .init.text
+
+Signed-off-by: Henrik Kretzschmar <henne@nachtwindheim.de>
+Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/video/w100fb.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+--- a/drivers/video/w100fb.c
++++ b/drivers/video/w100fb.c
+@@ -53,7 +53,7 @@ static void w100_update_enable(void);
+ static void w100_update_disable(void);
+ static void calc_hsync(struct w100fb_par *par);
+ static void w100_init_graphic_engine(struct w100fb_par *par);
+-struct w100_pll_info *w100_get_xtal_table(unsigned int freq);
++struct w100_pll_info *w100_get_xtal_table(unsigned int freq) __devinit;
+
+ /* Pseudo palette size */
+ #define MAX_PALETTES 16
+@@ -782,7 +782,7 @@ out:
+ }
+
+
+-static int w100fb_remove(struct platform_device *pdev)
++static int __devexit w100fb_remove(struct platform_device *pdev)
+ {
+ struct fb_info *info = platform_get_drvdata(pdev);
+ struct w100fb_par *par=info->par;
+@@ -1020,7 +1020,7 @@ static struct pll_entries {
+ { 0 },
+ };
+
+-struct w100_pll_info *w100_get_xtal_table(unsigned int freq)
++struct w100_pll_info __devinit *w100_get_xtal_table(unsigned int freq)
+ {
+ struct pll_entries *pll_entry = w100_pll_tables;
+
+@@ -1611,7 +1611,7 @@ static void w100_vsync(void)
+
+ static struct platform_driver w100fb_driver = {
+ .probe = w100fb_probe,
+- .remove = w100fb_remove,
++ .remove = __devexit_p(w100fb_remove),
+ .suspend = w100fb_suspend,
+ .resume = w100fb_resume,
+ .driver = {
+@@ -1619,7 +1619,7 @@ static struct platform_driver w100fb_dri
+ },
+ };
+
+-int __devinit w100fb_init(void)
++int __init w100fb_init(void)
+ {
+ return platform_driver_register(&w100fb_driver);
+ }
--- /dev/null
+From 1b4d0d8ea7b3cbd107f345ab766416f9b38ce66a Mon Sep 17 00:00:00 2001
+From: James Bottomley <James.Bottomley@suse.de>
+Date: Thu, 13 May 2010 09:31:54 -0500
+Subject: [SCSI] libsas: fix deref before check in commit 70b25f890ce
+
+From: James Bottomley <James.Bottomley@suse.de>
+
+commit 1b4d0d8ea7b3cbd107f345ab766416f9b38ce66a upstream.
+
+commit 70b25f890ce9f0520c64075ce9225a5b020a513e
+Author: Tejun Heo <tj@kernel.org>
+Date: Thu Apr 15 09:00:08 2010 +0900
+
+ [SCSI] fix locking around blk_abort_request()
+
+Introduced a reference before check problem, fix this by moving the
+lock shorthand code to be right at the point of actual use.
+
+Reported-by: Dan Carpenter <error27@gmail.com>
+Acked-by: Tejun Heo <tj@kernel.org>
+Signed-off-by: James Bottomley <James.Bottomley@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/scsi/libsas/sas_ata.c | 5 +++--
+ drivers/scsi/libsas/sas_scsi_host.c | 16 ++++++++--------
+ 2 files changed, 11 insertions(+), 10 deletions(-)
+
+--- a/drivers/scsi/libsas/sas_ata.c
++++ b/drivers/scsi/libsas/sas_ata.c
+@@ -395,12 +395,13 @@ int sas_ata_init_host_and_port(struct do
+ void sas_ata_task_abort(struct sas_task *task)
+ {
+ struct ata_queued_cmd *qc = task->uldd_task;
+- struct request_queue *q = qc->scsicmd->device->request_queue;
+ struct completion *waiting;
+- unsigned long flags;
+
+ /* Bounce SCSI-initiated commands to the SCSI EH */
+ if (qc->scsicmd) {
++ struct request_queue *q = qc->scsicmd->device->request_queue;
++ unsigned long flags;
++
+ spin_lock_irqsave(q->queue_lock, flags);
+ blk_abort_request(qc->scsicmd->request);
+ spin_unlock_irqrestore(q->queue_lock, flags);
+--- a/drivers/scsi/libsas/sas_scsi_host.c
++++ b/drivers/scsi/libsas/sas_scsi_host.c
+@@ -1030,8 +1030,6 @@ int __sas_task_abort(struct sas_task *ta
+ void sas_task_abort(struct sas_task *task)
+ {
+ struct scsi_cmnd *sc = task->uldd_task;
+- struct request_queue *q = sc->device->request_queue;
+- unsigned long flags;
+
+ /* Escape for libsas internal commands */
+ if (!sc) {
+@@ -1043,13 +1041,15 @@ void sas_task_abort(struct sas_task *tas
+
+ if (dev_is_sata(task->dev)) {
+ sas_ata_task_abort(task);
+- return;
+- }
++ } else {
++ struct request_queue *q = sc->device->request_queue;
++ unsigned long flags;
+
+- spin_lock_irqsave(q->queue_lock, flags);
+- blk_abort_request(sc->request);
+- spin_unlock_irqrestore(q->queue_lock, flags);
+- scsi_schedule_eh(sc->device->host);
++ spin_lock_irqsave(q->queue_lock, flags);
++ blk_abort_request(sc->request);
++ spin_unlock_irqrestore(q->queue_lock, flags);
++ scsi_schedule_eh(sc->device->host);
++ }
+ }
+
+ int sas_slave_alloc(struct scsi_device *scsi_dev)
--- /dev/null
+From f7917af92024d43bc20bc1afc92de27b0bd0f50b Mon Sep 17 00:00:00 2001
+From: Felix Fietkau <nbd@openwrt.org>
+Date: Tue, 27 Apr 2010 00:26:34 +0200
+Subject: mac80211: fix handling of 4-address-mode in ieee80211_change_iface
+
+From: Felix Fietkau <nbd@openwrt.org>
+
+commit f7917af92024d43bc20bc1afc92de27b0bd0f50b upstream.
+
+A misplaced interface type check bails out too early if the interface
+is not in monitor mode. This patch moves it to the right place, so that
+it only covers changes to the monitor flags.
+
+Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/mac80211/cfg.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+--- a/net/mac80211/cfg.c
++++ b/net/mac80211/cfg.c
+@@ -97,9 +97,6 @@ static int ieee80211_change_iface(struct
+ params->mesh_id_len,
+ params->mesh_id);
+
+- if (sdata->vif.type != NL80211_IFTYPE_MONITOR || !flags)
+- return 0;
+-
+ if (type == NL80211_IFTYPE_AP_VLAN &&
+ params && params->use_4addr == 0)
+ rcu_assign_pointer(sdata->u.vlan.sta, NULL);
+@@ -107,7 +104,9 @@ static int ieee80211_change_iface(struct
+ params && params->use_4addr >= 0)
+ sdata->u.mgd.use_4addr = params->use_4addr;
+
+- sdata->u.mntr_flags = *flags;
++ if (sdata->vif.type == NL80211_IFTYPE_MONITOR && flags)
++ sdata->u.mntr_flags = *flags;
++
+ return 0;
+ }
+
--- /dev/null
+From d211e90e28a074447584729018a39910d691d1a8 Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <j@w1.fi>
+Date: Sun, 28 Mar 2010 22:29:52 -0700
+Subject: mac80211: Fix robust management frame handling (MFP)
+
+From: Jouni Malinen <j@w1.fi>
+
+commit d211e90e28a074447584729018a39910d691d1a8 upstream.
+
+Commit e34e09401ee9888dd662b2fca5d607794a56daf2 incorrectly removed
+use of ieee80211_has_protected() from the management frame case and in
+practice, made this validation drop all Action frames when MFP is
+enabled. This should have only been done for frames with Protected
+field set to zero.
+
+Signed-off-by: Jouni Malinen <j@w1.fi>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/mac80211/rx.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/net/mac80211/rx.c
++++ b/net/mac80211/rx.c
+@@ -1414,7 +1414,8 @@ ieee80211_drop_unencrypted_mgmt(struct i
+ return res;
+
+ if (rx->sta && test_sta_flags(rx->sta, WLAN_STA_MFP)) {
+- if (unlikely(ieee80211_is_unicast_robust_mgmt_frame(rx->skb) &&
++ if (unlikely(!ieee80211_has_protected(fc) &&
++ ieee80211_is_unicast_robust_mgmt_frame(rx->skb) &&
+ rx->key))
+ return -EACCES;
+ /* BIP does not use Protected field, so need to check MMIE */
--- /dev/null
+From a2c40249a36d0b4d76d1caf6bf806e4ae5b06e8a Mon Sep 17 00:00:00 2001
+From: Shanyu Zhao <shanyu.zhao@intel.com>
+Date: Tue, 27 Apr 2010 11:15:12 -0700
+Subject: mac80211: fix rts threshold check
+
+From: Shanyu Zhao <shanyu.zhao@intel.com>
+
+commit a2c40249a36d0b4d76d1caf6bf806e4ae5b06e8a upstream.
+
+Currently whenever rts thresold is set, every packet will use RTS
+protection no matter its size exceeds the threshold or not. This is
+due to a bug in the rts threshold check.
+ if (len > tx->local->hw.wiphy->rts_threshold) {
+ txrc.rts = rts = true;
+ }
+Basically it is comparing an int (len) and a u32 (rts_threshold),
+and the variable len is assigned as:
+ len = min_t(int, tx->skb->len + FCS_LEN,
+ tx->local->hw.wiphy->frag_threshold);
+However, when frag_threshold is "-1", len is always "-1", which is
+0xffffffff therefore rts is always set to true.
+
+Signed-off-by: Shanyu Zhao <shanyu.zhao@intel.com>
+Reviewed-by: Johannes Berg <johannes@sipsolutions.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/mac80211/tx.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/net/mac80211/tx.c
++++ b/net/mac80211/tx.c
+@@ -584,7 +584,8 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
+ struct ieee80211_hdr *hdr = (void *)tx->skb->data;
+ struct ieee80211_supported_band *sband;
+ struct ieee80211_rate *rate;
+- int i, len;
++ int i;
++ u32 len;
+ bool inval = false, rts = false, short_preamble = false;
+ struct ieee80211_tx_rate_control txrc;
+ u32 sta_flags;
+@@ -593,7 +594,7 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
+
+ sband = tx->local->hw.wiphy->bands[tx->channel->band];
+
+- len = min_t(int, tx->skb->len + FCS_LEN,
++ len = min_t(u32, tx->skb->len + FCS_LEN,
+ tx->local->hw.wiphy->frag_threshold);
+
+ /* set up the tx rate control struct we give the RC algo */
--- /dev/null
+From c2ef355bf3ef0b8006b96128726684fba47ac928 Mon Sep 17 00:00:00 2001
+From: Andres Salomon <dilinger@collabora.co.uk>
+Date: Thu, 25 Feb 2010 19:18:47 -0500
+Subject: mac80211: give warning if building w/out rate ctrl algorithm
+
+From: Andres Salomon <dilinger@collabora.co.uk>
+
+commit c2ef355bf3ef0b8006b96128726684fba47ac928 upstream.
+
+I discovered that if EMBEDDED=y, one can accidentally build a mac80211 stack
+and drivers w/ no rate control algorithm. For drivers like RTL8187 that don't
+supply their own RC algorithms, this will cause ieee80211_register_hw to
+fail (making the driver unusable).
+
+This will tell kconfig to provide a warning if no rate control algorithms
+have been selected. That'll at least warn the user; users that know that
+their drivers supply a rate control algorithm can safely ignore the
+warning, and those who don't know (or who expect to be using multiple
+drivers) can select a default RC algorithm.
+
+Signed-off-by: Andres Salomon <dilinger@collabora.co.uk>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/mac80211/Kconfig | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/net/mac80211/Kconfig
++++ b/net/mac80211/Kconfig
+@@ -15,8 +15,12 @@ comment "CFG80211 needs to be enabled fo
+
+ if MAC80211 != n
+
++config MAC80211_HAS_RC
++ def_bool n
++
+ config MAC80211_RC_PID
+ bool "PID controller based rate control algorithm" if EMBEDDED
++ select MAC80211_HAS_RC
+ ---help---
+ This option enables a TX rate control algorithm for
+ mac80211 that uses a PID controller to select the TX
+@@ -24,12 +28,14 @@ config MAC80211_RC_PID
+
+ config MAC80211_RC_MINSTREL
+ bool "Minstrel" if EMBEDDED
++ select MAC80211_HAS_RC
+ default y
+ ---help---
+ This option enables the 'minstrel' TX rate control algorithm
+
+ choice
+ prompt "Default rate control algorithm"
++ depends on MAC80211_HAS_RC
+ default MAC80211_RC_DEFAULT_MINSTREL
+ ---help---
+ This option selects the default rate control algorithm
+@@ -62,6 +68,9 @@ config MAC80211_RC_DEFAULT
+
+ endif
+
++comment "Some wireless drivers require a rate control algorithm"
++ depends on MAC80211_HAS_RC=n
++
+ config MAC80211_MESH
+ bool "Enable mac80211 mesh networking (pre-802.11s) support"
+ depends on MAC80211 && EXPERIMENTAL
--- /dev/null
+From e4146bb9088c01c8b6e82be11f0c371f8aff023c Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sun, 16 May 2010 02:28:49 +0100
+Subject: PCI: Disable MSI for MCP55 on P5N32-E SLI
+
+From: Ben Hutchings <ben@decadent.org.uk>
+
+commit e4146bb9088c01c8b6e82be11f0c371f8aff023c upstream.
+
+As reported in <http://bugs.debian.org/552299>, MSI appears to be
+broken for this on-board device. We already have a quirk for the
+P5N32-SLI Premium; extend it to cover both variants of the board.
+
+Reported-by: Romain DEGEZ <romain.degez@smartjog.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/pci/quirks.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+--- a/drivers/pci/quirks.c
++++ b/drivers/pci/quirks.c
+@@ -2219,15 +2219,16 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S
+ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8132_BRIDGE,
+ ht_enable_msi_mapping);
+
+-/* The P5N32-SLI Premium motherboard from Asus has a problem with msi
++/* The P5N32-SLI motherboards from Asus have a problem with msi
+ * for the MCP55 NIC. It is not yet determined whether the msi problem
+ * also affects other devices. As for now, turn off msi for this device.
+ */
+ static void __devinit nvenet_msi_disable(struct pci_dev *dev)
+ {
+- if (dmi_name_in_vendors("P5N32-SLI PREMIUM")) {
++ if (dmi_name_in_vendors("P5N32-SLI PREMIUM") ||
++ dmi_name_in_vendors("P5N32-E SLI")) {
+ dev_info(&dev->dev,
+- "Disabling msi for MCP55 NIC on P5N32-SLI Premium\n");
++ "Disabling msi for MCP55 NIC on P5N32-SLI\n");
+ dev->no_msi = 1;
+ }
+ }
--- /dev/null
+From 9313ff450400e6a2ab10fe6b9bdb12a828329410 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexdeucher@gmail.com>
+Date: Tue, 18 May 2010 10:42:53 -0400
+Subject: PCI quirks: disable msi on AMD rs4xx internal gfx bridges
+
+From: Alex Deucher <alexdeucher@gmail.com>
+
+commit 9313ff450400e6a2ab10fe6b9bdb12a828329410 upstream.
+
+Doesn't work reliably for internal gfx. Fixes kernel bug
+https://bugzilla.kernel.org/show_bug.cgi?id=15626.
+
+Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/pci/quirks.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/pci/quirks.c
++++ b/drivers/pci/quirks.c
+@@ -2127,6 +2127,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AM
+ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ASUSTEK, 0x9602, quirk_disable_msi);
+ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AI, 0x9602, quirk_disable_msi);
+ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, 0xa238, quirk_disable_msi);
++DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x5a3f, quirk_disable_msi);
+
+ /* Go through the list of Hypertransport capabilities and
+ * return 1 if a HT MSI capability is found and enabled */
usb-xhci-limit-bus-sg_tablesize-to-62-trbs.patch
usb-xhci-fix-check-for-room-on-the-ring.patch
usb-xhci-fix-wrong-usage-of-macro-trb_type.patch
+ath5k-consistently-use-rx_bufsize-for-rx-dma.patch
+fbdev-section-cleanup-in-hgafb.patch
+fbdev-section-cleanup-in-vfb.patch
+fbdev-section-cleanup-in-vga16fb.patch
+fbdev-section-cleanup-in-arcfb.patch
+fbdev-section-cleanup-in-w100fb.patch
+mac80211-give-warning-if-building-w-out-rate-ctrl-algorithm.patch
+mac80211-fix-robust-management-frame-handling-mfp.patch
+mac80211-fix-rts-threshold-check.patch
+mac80211-fix-handling-of-4-address-mode-in-ieee80211_change_iface.patch
+ath9k_hw-fix-hardware-deinit.patch
+drm-i915-reject-bind_to_gtt-early-if-object-aperture.patch
+libsas-fix-deref-before-check-in-commit-70b25f890ce.patch
+drivers-base-cpu.c-fix-the-output-from-sys-devices-system-cpu-offline.patch
+can-fix-sja1000-command-register-writes-on-smp-systems.patch
+pci-quirks-disable-msi-on-amd-rs4xx-internal-gfx-bridges.patch
+pci-disable-msi-for-mcp55-on-p5n32-e-sli.patch