--- /dev/null
+From b26623dab7eeb1e9f5898c7a49458789dd492f20 Mon Sep 17 00:00:00 2001
+From: Francois Romieu <romieu@fr.zoreil.com>
+Date: Wed, 21 Nov 2012 10:07:29 +0000
+Subject: 8139cp: revert "set ring address before enabling receiver"
+
+From: Francois Romieu <romieu@fr.zoreil.com>
+
+commit b26623dab7eeb1e9f5898c7a49458789dd492f20 upstream.
+
+This patch reverts b01af4579ec41f48e9b9c774e70bd6474ad210db.
+
+The original patch was tested with emulated hardware. Real
+hardware chokes.
+
+Fixes https://bugzilla.kernel.org/show_bug.cgi?id=47041
+
+Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
+Acked-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: CAI Qian <caiqian@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/ethernet/realtek/8139cp.c | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+--- a/drivers/net/ethernet/realtek/8139cp.c
++++ b/drivers/net/ethernet/realtek/8139cp.c
+@@ -979,17 +979,6 @@ static void cp_init_hw (struct cp_privat
+ cpw32_f (MAC0 + 0, le32_to_cpu (*(__le32 *) (dev->dev_addr + 0)));
+ cpw32_f (MAC0 + 4, le32_to_cpu (*(__le32 *) (dev->dev_addr + 4)));
+
+- cpw32_f(HiTxRingAddr, 0);
+- cpw32_f(HiTxRingAddr + 4, 0);
+-
+- ring_dma = cp->ring_dma;
+- cpw32_f(RxRingAddr, ring_dma & 0xffffffff);
+- cpw32_f(RxRingAddr + 4, (ring_dma >> 16) >> 16);
+-
+- ring_dma += sizeof(struct cp_desc) * CP_RX_RING_SIZE;
+- cpw32_f(TxRingAddr, ring_dma & 0xffffffff);
+- cpw32_f(TxRingAddr + 4, (ring_dma >> 16) >> 16);
+-
+ cp_start_hw(cp);
+ cpw8(TxThresh, 0x06); /* XXX convert magic num to a constant */
+
+@@ -1003,6 +992,17 @@ static void cp_init_hw (struct cp_privat
+
+ cpw8(Config5, cpr8(Config5) & PMEStatus);
+
++ cpw32_f(HiTxRingAddr, 0);
++ cpw32_f(HiTxRingAddr + 4, 0);
++
++ ring_dma = cp->ring_dma;
++ cpw32_f(RxRingAddr, ring_dma & 0xffffffff);
++ cpw32_f(RxRingAddr + 4, (ring_dma >> 16) >> 16);
++
++ ring_dma += sizeof(struct cp_desc) * CP_RX_RING_SIZE;
++ cpw32_f(TxRingAddr, ring_dma & 0xffffffff);
++ cpw32_f(TxRingAddr + 4, (ring_dma >> 16) >> 16);
++
+ cpw16(MultiIntr, 0);
+
+ cpw8_f(Cfg9346, Cfg9346_Lock);
--- /dev/null
+From 879dca019dc43a1622edca3e7dde644b14b5acc5 Mon Sep 17 00:00:00 2001
+From: Alan Cox <alan@linux.intel.com>
+Date: Fri, 26 Oct 2012 01:05:56 +0200
+Subject: ACPI: missing break
+
+From: Alan Cox <alan@linux.intel.com>
+
+commit 879dca019dc43a1622edca3e7dde644b14b5acc5 upstream.
+
+We handle NOTIFY_THROTTLING so don't then fall through to unsupported event.
+
+Signed-off-by: Alan Cox <alan@linux.intel.com>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Peter Huewe <peterhuewe@gmx.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+
+---
+ drivers/acpi/processor_driver.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/acpi/processor_driver.c
++++ b/drivers/acpi/processor_driver.c
+@@ -409,6 +409,7 @@ static void acpi_processor_notify(struct
+ acpi_bus_generate_proc_event(device, event, 0);
+ acpi_bus_generate_netlink_event(device->pnp.device_class,
+ dev_name(&device->dev), event, 0);
++ break;
+ default:
+ ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+ "Unsupported event [0x%x]\n", event));
--- /dev/null
+From c31407a3672aaebb4acddf90944a114fa5c8af7b Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Thu, 18 Oct 2012 21:07:01 +0100
+Subject: drm/i915: Add no-lvds quirk for Supermicro X7SPA-H
+
+From: Chris Wilson <chris@chris-wilson.co.uk>
+
+commit c31407a3672aaebb4acddf90944a114fa5c8af7b upstream.
+
+Reported-and-tested-by: Francois Tigeot <ftigeot@wolfpond.org>
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=55375
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Peter Huewe <peterhuewe@gmx.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/i915/intel_lvds.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/drivers/gpu/drm/i915/intel_lvds.c
++++ b/drivers/gpu/drm/i915/intel_lvds.c
+@@ -796,6 +796,14 @@ static const struct dmi_system_id intel_
+ DMI_MATCH(DMI_BOARD_NAME, "D525TUD"),
+ },
+ },
++ {
++ .callback = intel_no_lvds_dmi_callback,
++ .ident = "Supermicro X7SPA-H",
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "Supermicro"),
++ DMI_MATCH(DMI_PRODUCT_NAME, "X7SPA-H"),
++ },
++ },
+
+ { } /* terminating entry */
+ };
--- /dev/null
+From a51d4ed01e5bb39d2cf36a12f9976ab08872c192 Mon Sep 17 00:00:00 2001
+From: Calvin Walton <calvin.walton@kepstin.ca>
+Date: Fri, 24 Aug 2012 07:56:31 -0400
+Subject: i915: Quirk no_lvds on Gigabyte GA-D525TUD ITX motherboard
+
+From: Calvin Walton <calvin.walton@kepstin.ca>
+
+commit a51d4ed01e5bb39d2cf36a12f9976ab08872c192 upstream.
+
+This board is incorrectly detected as having an LVDS connector,
+resulting in the VGA output (the only available output on the board)
+showing the console only in the top-left 1024x768 pixels, and an extra
+LVDS connector appearing in X.
+
+It's a desktop Mini-ITX board using an Atom D525 CPU with an NM10
+chipset.
+
+I've had this board for about a year, but this is the first time I
+noticed the issue because I've been running it headless for most of its
+life.
+
+Signed-off-by: Calvin Walton <calvin.walton@kepstin.ca>
+Signed-off-by: Peter Huewe <peterhuewe@gmx.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/i915/intel_lvds.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/drivers/gpu/drm/i915/intel_lvds.c
++++ b/drivers/gpu/drm/i915/intel_lvds.c
+@@ -788,6 +788,14 @@ static const struct dmi_system_id intel_
+ DMI_MATCH(DMI_BOARD_NAME, "D525TUD"),
+ },
+ },
++ {
++ .callback = intel_no_lvds_dmi_callback,
++ .ident = "Gigabyte GA-D525TUD",
++ .matches = {
++ DMI_MATCH(DMI_BOARD_VENDOR, "Gigabyte Technology Co., Ltd."),
++ DMI_MATCH(DMI_BOARD_NAME, "D525TUD"),
++ },
++ },
+
+ { } /* terminating entry */
+ };
--- /dev/null
+From ba695af067f9cadfec84457ac06b44e3fa849b15 Mon Sep 17 00:00:00 2001
+From: Bjørn Mork <bjorn@mork.no>
+Date: Sun, 25 Nov 2012 06:03:59 +0000
+Subject: net: qmi_wwan: add Huawei E173
+
+From: Bjørn Mork <bjorn@mork.no>
+
+commit ba695af067f9cadfec84457ac06b44e3fa849b15 upstream.
+
+The Huawei E173 is a QMI/wwan device which normally appear
+as 12d1:1436 in Linux. The descriptors displayed in that
+mode will be picked up by cdc_ether. But the modem has
+another mode with a different device ID and a slightly
+different set of descriptors. This is the mode used by
+Windows like this:
+
+3Modem: USB\VID_12D1&PID_140C&MI_00\6&3A1D2012&0&0000
+Networkcard: USB\VID_12D1&PID_140C&MI_01\6&3A1D2012&0&0001
+Appli.Inter: USB\VID_12D1&PID_140C&MI_02\6&3A1D2012&0&0002
+PC UI Inter: USB\VID_12D1&PID_140C&MI_03\6&3A1D2012&0&0003
+
+Reported-by: Thomas Schäfer <tschaefer@t-online.de>
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Peter Huewe <peterhuewe@gmx.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/usb/qmi_wwan.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/net/usb/qmi_wwan.c
++++ b/drivers/net/usb/qmi_wwan.c
+@@ -398,6 +398,7 @@ static const struct usb_device_id produc
+ },
+
+ /* 3. Combined interface devices matching on interface number */
++ {QMI_FIXED_INTF(0x12d1, 0x140c, 1)}, /* Huawei E173 */
+ {QMI_FIXED_INTF(0x19d2, 0x0002, 1)},
+ {QMI_FIXED_INTF(0x19d2, 0x0012, 1)},
+ {QMI_FIXED_INTF(0x19d2, 0x0017, 3)},
--- /dev/null
+From c6846ee148e07e4cfae4de486532efb02d238938 Mon Sep 17 00:00:00 2001
+From: Bjørn Mork <bjorn@mork.no>
+Date: Thu, 18 Oct 2012 05:11:29 +0000
+Subject: net: qmi_wwan: adding more ZTE devices
+
+From: Bjørn Mork <bjorn@mork.no>
+
+commit c6846ee148e07e4cfae4de486532efb02d238938 upstream.
+
+Analyzed a few Windows driver description files, supporting
+this long list of devices:
+
+%ztewwan.DeviceDesc0002% = ztewwan.ndi, USB\VID_19D2&PID_0002&MI_01
+%ztewwan.DeviceDesc0012% = ztewwan.ndi, USB\VID_19D2&PID_0012&MI_01
+%ztewwan.DeviceDesc0017% = ztewwan.ndi, USB\VID_19D2&PID_0017&MI_03
+%ztewwan.DeviceDesc0021% = ztewwan.ndi, USB\VID_19D2&PID_0021&MI_04
+%ztewwan.DeviceDesc0025% = ztewwan.ndi, USB\VID_19D2&PID_0025&MI_01
+%ztewwan.DeviceDesc0031% = ztewwan.ndi, USB\VID_19D2&PID_0031&MI_04
+%ztewwan.DeviceDesc0042% = ztewwan.ndi, USB\VID_19D2&PID_0042&MI_04
+%ztewwan.DeviceDesc0049% = ztewwan.ndi, USB\VID_19D2&PID_0049&MI_05
+%ztewwan.DeviceDesc0052% = ztewwan.ndi, USB\VID_19D2&PID_0052&MI_04
+%ztewwan.DeviceDesc0055% = ztewwan.ndi, USB\VID_19D2&PID_0055&MI_01
+%ztewwan.DeviceDesc0058% = ztewwan.ndi, USB\VID_19D2&PID_0058&MI_04
+%ztewwan.DeviceDesc0063% = ztewwan.ndi, USB\VID_19D2&PID_0063&MI_04
+%ztewwan.DeviceDesc2002% = ztewwan.ndi, USB\VID_19D2&PID_2002&MI_04
+%ztewwan.DeviceDesc0104% = ztewwan.ndi, USB\VID_19D2&PID_0104&MI_04
+%ztewwan.DeviceDesc0113% = ztewwan.ndi, USB\VID_19D2&PID_0113&MI_05
+%ztewwan.DeviceDesc0118% = ztewwan.ndi, USB\VID_19D2&PID_0118&MI_05
+%ztewwan.DeviceDesc0121% = ztewwan.ndi, USB\VID_19D2&PID_0121&MI_05
+%ztewwan.DeviceDesc0123% = ztewwan.ndi, USB\VID_19D2&PID_0123&MI_04
+%ztewwan.DeviceDesc0124% = ztewwan.ndi, USB\VID_19D2&PID_0124&MI_05
+%ztewwan.DeviceDesc0125% = ztewwan.ndi, USB\VID_19D2&PID_0125&MI_06
+%ztewwan.DeviceDesc0126% = ztewwan.ndi, USB\VID_19D2&PID_0126&MI_05
+%ztewwan.DeviceDesc1008% = ztewwan.ndi, USB\VID_19D2&PID_1008&MI_04
+%ztewwan.DeviceDesc1010% = ztewwan.ndi, USB\VID_19D2&PID_1010&MI_04
+%ztewwan.DeviceDesc1012% = ztewwan.ndi, USB\VID_19D2&PID_1012&MI_04
+%ztewwan.DeviceDesc1402% = ztewwan.ndi, USB\VID_19D2&PID_1402&MI_02
+%ztewwan.DeviceDesc0157% = ztewwan.ndi, USB\VID_19D2&PID_0157&MI_05
+%ztewwan.DeviceDesc0158% = ztewwan.ndi, USB\VID_19D2&PID_0158&MI_03
+%ztewwan.DeviceDesc1401% = ztewwan.ndi, USB\VID_19D2&PID_1401&MI_02
+%ztewwan.DeviceDesc0130% = ztewwan.ndi, USB\VID_19D2&PID_0130&MI_01
+%ztewwan.DeviceDesc0133% = ztewwan.ndi, USB\VID_19D2&PID_0133&MI_03
+%ztewwan.DeviceDesc0176% = ztewwan.ndi, USB\VID_19D2&PID_0176&MI_03
+%ztewwan.DeviceDesc0178% = ztewwan.ndi, USB\VID_19D2&PID_0178&MI_03
+%ztewwan.DeviceDesc0168% = ztewwan.ndi, USB\VID_19D2&PID_0168&MI_04
+;EuFi890
+%ztewwan.DeviceDesc0191% = ztewwan.ndi, USB\VID_19D2&PID_0191&MI_04
+;AL621
+%ztewwan.DeviceDesc0167% = ztewwan.ndi, USB\VID_19D2&PID_0167&MI_04
+;MF821
+%ztewwan.DeviceDesc0199% = ztewwan.ndi, USB\VID_19D2&PID_0199&MI_01
+%ztewwan.DeviceDesc0200% = ztewwan.ndi, USB\VID_19D2&PID_0200&MI_01
+%ztewwan.DeviceDesc0257% = ztewwan.ndi, USB\VID_19D2&PID_0257&MI_03
+;MF821V
+%ztewwan.DeviceDesc1018% = ztewwan.ndi, USB\VID_19D2&PID_1018&MI_03
+;MF91
+%ztewwan.DeviceDesc1426% = ztewwan.ndi, USB\VID_19D2&PID_1426&MI_02
+;0141
+%ztewwan.DeviceDesc1247% = ztewwan.ndi, USB\VID_19D2&PID_1247&MI_04
+%ztewwan.DeviceDesc1425% = ztewwan.ndi, USB\VID_19D2&PID_1425&MI_02
+%ztewwan.DeviceDesc1424% = ztewwan.ndi, USB\VID_19D2&PID_1424&MI_02
+%ztewwan.DeviceDesc1252% = ztewwan.ndi, USB\VID_19D2&PID_1252&MI_04
+%ztewwan.DeviceDesc1254% = ztewwan.ndi, USB\VID_19D2&PID_1254&MI_04
+%ztewwan.DeviceDesc1255A% = ztewwan.ndi, USB\VID_19D2&PID_1255&MI_03
+%ztewwan.DeviceDesc1255B% = ztewwan.ndi, USB\VID_19D2&PID_1255&MI_04
+%ztewwan.DeviceDesc1256% = ztewwan.ndi, USB\VID_19D2&PID_1256&MI_04
+%ztewwan.DeviceDesc1245% = ztewwanCombB.ndi, USB\VID_19D2&PID_1245&MI_04
+%ztewwan.DeviceDesc1021% = ztewwan.ndi, USB\VID_19D2&PID_1021&MI_02
+
+Adding the ones we were missing.
+
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Peter Huewe <peterhuewe@gmx.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/usb/qmi_wwan.c | 41 +++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 41 insertions(+)
+
+--- a/drivers/net/usb/qmi_wwan.c
++++ b/drivers/net/usb/qmi_wwan.c
+@@ -398,16 +398,57 @@ static const struct usb_device_id produc
+ },
+
+ /* 3. Combined interface devices matching on interface number */
++ {QMI_FIXED_INTF(0x19d2, 0x0002, 1)},
++ {QMI_FIXED_INTF(0x19d2, 0x0012, 1)},
++ {QMI_FIXED_INTF(0x19d2, 0x0017, 3)},
++ {QMI_FIXED_INTF(0x19d2, 0x0021, 4)},
++ {QMI_FIXED_INTF(0x19d2, 0x0025, 1)},
++ {QMI_FIXED_INTF(0x19d2, 0x0031, 4)},
++ {QMI_FIXED_INTF(0x19d2, 0x0042, 4)},
++ {QMI_FIXED_INTF(0x19d2, 0x0049, 5)},
++ {QMI_FIXED_INTF(0x19d2, 0x0052, 4)},
+ {QMI_FIXED_INTF(0x19d2, 0x0055, 1)}, /* ZTE (Vodafone) K3520-Z */
++ {QMI_FIXED_INTF(0x19d2, 0x0058, 4)},
+ {QMI_FIXED_INTF(0x19d2, 0x0063, 4)}, /* ZTE (Vodafone) K3565-Z */
+ {QMI_FIXED_INTF(0x19d2, 0x0104, 4)}, /* ZTE (Vodafone) K4505-Z */
++ {QMI_FIXED_INTF(0x19d2, 0x0113, 5)},
++ {QMI_FIXED_INTF(0x19d2, 0x0118, 5)},
++ {QMI_FIXED_INTF(0x19d2, 0x0121, 5)},
++ {QMI_FIXED_INTF(0x19d2, 0x0123, 4)},
++ {QMI_FIXED_INTF(0x19d2, 0x0124, 5)},
++ {QMI_FIXED_INTF(0x19d2, 0x0125, 6)},
++ {QMI_FIXED_INTF(0x19d2, 0x0126, 5)},
++ {QMI_FIXED_INTF(0x19d2, 0x0130, 1)},
++ {QMI_FIXED_INTF(0x19d2, 0x0133, 3)},
++ {QMI_FIXED_INTF(0x19d2, 0x0141, 5)},
+ {QMI_FIXED_INTF(0x19d2, 0x0157, 5)}, /* ZTE MF683 */
++ {QMI_FIXED_INTF(0x19d2, 0x0158, 3)},
+ {QMI_FIXED_INTF(0x19d2, 0x0167, 4)}, /* ZTE MF820D */
++ {QMI_FIXED_INTF(0x19d2, 0x0168, 4)},
++ {QMI_FIXED_INTF(0x19d2, 0x0176, 3)},
++ {QMI_FIXED_INTF(0x19d2, 0x0178, 3)},
++ {QMI_FIXED_INTF(0x19d2, 0x0191, 4)}, /* ZTE EuFi890 */
++ {QMI_FIXED_INTF(0x19d2, 0x0199, 1)}, /* ZTE MF820S */
++ {QMI_FIXED_INTF(0x19d2, 0x0200, 1)},
++ {QMI_FIXED_INTF(0x19d2, 0x0257, 3)}, /* ZTE MF821 */
+ {QMI_FIXED_INTF(0x19d2, 0x0326, 4)}, /* ZTE MF821D */
+ {QMI_FIXED_INTF(0x19d2, 0x1008, 4)}, /* ZTE (Vodafone) K3570-Z */
+ {QMI_FIXED_INTF(0x19d2, 0x1010, 4)}, /* ZTE (Vodafone) K3571-Z */
++ {QMI_FIXED_INTF(0x19d2, 0x1012, 4)},
+ {QMI_FIXED_INTF(0x19d2, 0x1018, 3)}, /* ZTE (Vodafone) K5006-Z */
++ {QMI_FIXED_INTF(0x19d2, 0x1021, 2)},
++ {QMI_FIXED_INTF(0x19d2, 0x1245, 4)},
++ {QMI_FIXED_INTF(0x19d2, 0x1247, 4)},
++ {QMI_FIXED_INTF(0x19d2, 0x1252, 4)},
++ {QMI_FIXED_INTF(0x19d2, 0x1254, 4)},
++ {QMI_FIXED_INTF(0x19d2, 0x1255, 3)},
++ {QMI_FIXED_INTF(0x19d2, 0x1255, 4)},
++ {QMI_FIXED_INTF(0x19d2, 0x1256, 4)},
++ {QMI_FIXED_INTF(0x19d2, 0x1401, 2)},
+ {QMI_FIXED_INTF(0x19d2, 0x1402, 2)}, /* ZTE MF60 */
++ {QMI_FIXED_INTF(0x19d2, 0x1424, 2)},
++ {QMI_FIXED_INTF(0x19d2, 0x1425, 2)},
++ {QMI_FIXED_INTF(0x19d2, 0x1426, 2)}, /* ZTE MF91 */
+ {QMI_FIXED_INTF(0x19d2, 0x2002, 4)}, /* ZTE (Vodafone) K3765-Z */
+ {QMI_FIXED_INTF(0x0f3d, 0x68a2, 8)}, /* Sierra Wireless MC7700 */
+ {QMI_FIXED_INTF(0x114f, 0x68a2, 8)}, /* Sierra Wireless MC7750 */
--- /dev/null
+From 4bffbb3455372a26816e364fb4448810f7014452 Mon Sep 17 00:00:00 2001
+From: Heiko Carstens <heiko.carstens@de.ibm.com>
+Date: Thu, 8 Nov 2012 14:18:47 +0100
+Subject: s390/mm: have 16 byte aligned struct pages
+
+From: Heiko Carstens <heiko.carstens@de.ibm.com>
+
+commit 4bffbb3455372a26816e364fb4448810f7014452 upstream.
+
+Select HAVE_ALIGNED_STRUCT_PAGE on s390, so that the slub allocator can make
+use of compare and swap double for lockless updates. This increases the size
+of struct page to 64 bytes (instead of 56 bytes), however the performance gain
+justifies the increased size:
+
+- now excactly four struct pages fit into a single cache line; the
+ case that accessing a struct page causes two cache line loads
+ does not exist anymore.
+- calculating the offset of a struct page within the memmap array
+ is only a simple shift instead of a more expensive multiplication.
+
+A "hackbench 200 process 200" run on a 32 cpu system did show an 8% runtime
+improvement.
+
+Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
+Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Signed-off-by: CAI Qian <caiqian@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/s390/Kconfig | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/arch/s390/Kconfig
++++ b/arch/s390/Kconfig
+@@ -89,6 +89,7 @@ config S390
+ select HAVE_MEMBLOCK
+ select HAVE_MEMBLOCK_NODE_MAP
+ select HAVE_CMPXCHG_LOCAL
++ select HAVE_ALIGNED_STRUCT_PAGE if SLUB
+ select ARCH_DISCARD_MEMBLOCK
+ select BUILDTIME_EXTABLE_SORT
+ select ARCH_INLINE_SPIN_TRYLOCK
revert-sched-autogroup-stop-going-ahead-if-autogroup-is-disabled.patch
bnx2x-remove-redundant-warning-log.patch
i7core_edac-fix-panic-when-accessing-sysfs-files.patch
+s390-mm-have-16-byte-aligned-struct-pages.patch
+net-qmi_wwan-adding-more-zte-devices.patch
+net-qmi_wwan-add-huawei-e173.patch
+acpi-missing-break.patch
+i915-quirk-no_lvds-on-gigabyte-ga-d525tud-itx-motherboard.patch
+drm-i915-add-no-lvds-quirk-for-supermicro-x7spa-h.patch
+x86-amd-disable-way-access-filter-on-piledriver-cpus.patch
+8139cp-revert-set-ring-address-before-enabling-receiver.patch
--- /dev/null
+From 2bbf0a1427c377350f001fbc6260995334739ad7 Mon Sep 17 00:00:00 2001
+From: Andre Przywara <andre.przywara@amd.com>
+Date: Wed, 31 Oct 2012 17:20:50 +0100
+Subject: x86, amd: Disable way access filter on Piledriver CPUs
+
+From: Andre Przywara <andre.przywara@amd.com>
+
+commit 2bbf0a1427c377350f001fbc6260995334739ad7 upstream.
+
+The Way Access Filter in recent AMD CPUs may hurt the performance of
+some workloads, caused by aliasing issues in the L1 cache.
+This patch disables it on the affected CPUs.
+
+The issue is similar to that one of last year:
+http://lkml.indiana.edu/hypermail/linux/kernel/1107.3/00041.html
+This new patch does not replace the old one, we just need another
+quirk for newer CPUs.
+
+The performance penalty without the patch depends on the
+circumstances, but is a bit less than the last year's 3%.
+
+The workloads affected would be those that access code from the same
+physical page under different virtual addresses, so different
+processes using the same libraries with ASLR or multiple instances of
+PIE-binaries. The code needs to be accessed simultaneously from both
+cores of the same compute unit.
+
+More details can be found here:
+http://developer.amd.com/Assets/SharedL1InstructionCacheonAMD15hCPU.pdf
+
+CPUs affected are anything with the core known as Piledriver.
+That includes the new parts of the AMD A-Series (aka Trinity) and the
+just released new CPUs of the FX-Series (aka Vishera).
+The model numbering is a bit odd here: FX CPUs have model 2,
+A-Series has model 10h, with possible extensions to 1Fh. Hence the
+range of model ids.
+
+Signed-off-by: Andre Przywara <osp@andrep.de>
+Link: http://lkml.kernel.org/r/1351700450-9277-1-git-send-email-osp@andrep.de
+Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
+Signed-off-by: CAI Qian <caiqian@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/kernel/cpu/amd.c | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+--- a/arch/x86/kernel/cpu/amd.c
++++ b/arch/x86/kernel/cpu/amd.c
+@@ -631,6 +631,20 @@ static void __cpuinit init_amd(struct cp
+ }
+ }
+
++ /*
++ * The way access filter has a performance penalty on some workloads.
++ * Disable it on the affected CPUs.
++ */
++ if ((c->x86 == 0x15) &&
++ (c->x86_model >= 0x02) && (c->x86_model < 0x20)) {
++ u64 val;
++
++ if (!rdmsrl_safe(0xc0011021, &val) && !(val & 0x1E)) {
++ val |= 0x1E;
++ wrmsrl_safe(0xc0011021, val);
++ }
++ }
++
+ cpu_detect_cache_sizes(c);
+
+ /* Multi core CPU? */