Home Home > GIT Browse
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Marek <mmarek@suse.cz>2010-01-25 17:19:14 +0100
committerMichal Marek <mmarek@suse.cz>2010-01-25 17:19:14 +0100
commitdf7ee09e720058110e3a5d882a99153e3a705365 (patch)
tree61c137d5ddc48cc33a9c44724e0eb4fc7362ef7f
parent6a57c698965a6fb08043e3040624c28fd449580a (diff)
parent59a3e62bebfae369e557fa04040b00e29cfd99a9 (diff)
Merge branch 'master' into SLE11-SP1rpm-2.6.32.5-0.1
-rw-r--r--config/i386/debug1
-rw-r--r--config/i386/default1
-rw-r--r--config/i386/desktop1
-rw-r--r--config/i386/pae1
-rw-r--r--config/i386/trace1
-rw-r--r--config/i386/vmi1
-rw-r--r--config/s390/trace2
-rw-r--r--config/s390x/trace2
-rw-r--r--config/x86_64/debug1
-rw-r--r--config/x86_64/default1
-rw-r--r--config/x86_64/desktop1
-rw-r--r--config/x86_64/trace1
-rw-r--r--kernel-source.changes49
-rw-r--r--patches.arch/x86_enable_tsc_sync_check_again.patch51
-rw-r--r--patches.arch/x86_mce_intel_decode_physical_address.patch595
-rw-r--r--patches.arch/x86_mce_intel_decode_physical_address_compile_fix.patch27
-rw-r--r--patches.arch/x86_mce_intel_decode_physical_address_rename_fix.patch78
-rw-r--r--patches.arch/x86_node_hotplug_parse_srat_fix.patch51
-rw-r--r--patches.arch/x86_node_hotplug_parse_srat_fix_2nd_ver.patch52
-rw-r--r--patches.drivers/alsa-sp1-hda-57-cx5051-toshiba-quirk140
-rw-r--r--patches.drivers/alsa-sp1-hda-58-cx5051-lenovo-mute-fix42
-rw-r--r--patches.xen/xen3-auto-arch-x86.diff131
-rw-r--r--series.conf11
-rw-r--r--supported.conf3
24 files changed, 1149 insertions, 95 deletions
diff --git a/config/i386/debug b/config/i386/debug
index d5cbbe135b..809bc7be86 100644
--- a/config/i386/debug
+++ b/config/i386/debug
@@ -333,6 +333,7 @@ CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_MCE=y
CONFIG_X86_MCE_INTEL=y
+CONFIG_X86_MCE_XEON75XX=m
CONFIG_X86_MCE_AMD=y
# CONFIG_X86_ANCIENT_MCE is not set
CONFIG_X86_MCE_THRESHOLD=y
diff --git a/config/i386/default b/config/i386/default
index 9d457e4a7c..33461aba1a 100644
--- a/config/i386/default
+++ b/config/i386/default
@@ -328,6 +328,7 @@ CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_MCE=y
CONFIG_X86_MCE_INTEL=y
+CONFIG_X86_MCE_XEON75XX=m
CONFIG_X86_MCE_AMD=y
# CONFIG_X86_ANCIENT_MCE is not set
CONFIG_X86_MCE_THRESHOLD=y
diff --git a/config/i386/desktop b/config/i386/desktop
index 1ea1b4c290..7592f2bf48 100644
--- a/config/i386/desktop
+++ b/config/i386/desktop
@@ -318,6 +318,7 @@ CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_MCE=y
CONFIG_X86_MCE_INTEL=y
+# CONFIG_X86_MCE_XEON75XX is not set
CONFIG_X86_MCE_AMD=y
# CONFIG_X86_ANCIENT_MCE is not set
CONFIG_X86_MCE_THRESHOLD=y
diff --git a/config/i386/pae b/config/i386/pae
index 0a56757047..45f2a641fb 100644
--- a/config/i386/pae
+++ b/config/i386/pae
@@ -334,6 +334,7 @@ CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_MCE=y
CONFIG_X86_MCE_INTEL=y
+CONFIG_X86_MCE_XEON75XX=m
CONFIG_X86_MCE_AMD=y
# CONFIG_X86_ANCIENT_MCE is not set
CONFIG_X86_MCE_THRESHOLD=y
diff --git a/config/i386/trace b/config/i386/trace
index 41cba6e61d..f207ce5092 100644
--- a/config/i386/trace
+++ b/config/i386/trace
@@ -334,6 +334,7 @@ CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_MCE=y
CONFIG_X86_MCE_INTEL=y
+CONFIG_X86_MCE_XEON75XX=m
CONFIG_X86_MCE_AMD=y
# CONFIG_X86_ANCIENT_MCE is not set
CONFIG_X86_MCE_THRESHOLD=y
diff --git a/config/i386/vmi b/config/i386/vmi
index 75250fb6af..274f707a4c 100644
--- a/config/i386/vmi
+++ b/config/i386/vmi
@@ -334,6 +334,7 @@ CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_MCE=y
CONFIG_X86_MCE_INTEL=y
+# CONFIG_X86_MCE_XEON75XX is not set
CONFIG_X86_MCE_AMD=y
# CONFIG_X86_ANCIENT_MCE is not set
CONFIG_X86_MCE_THRESHOLD=y
diff --git a/config/s390/trace b/config/s390/trace
index d1f49f99fd..2b78b0c6f5 100644
--- a/config/s390/trace
+++ b/config/s390/trace
@@ -33,7 +33,7 @@ CONFIG_CONSTRUCTORS=y
CONFIG_EXPERIMENTAL=y
CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-s390"
+CONFIG_LOCALVERSION="-trace"
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
diff --git a/config/s390x/trace b/config/s390x/trace
index f121de959e..266117dd8a 100644
--- a/config/s390x/trace
+++ b/config/s390x/trace
@@ -35,7 +35,7 @@ CONFIG_CONSTRUCTORS=y
CONFIG_EXPERIMENTAL=y
CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION="-default"
+CONFIG_LOCALVERSION="-trace"
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
diff --git a/config/x86_64/debug b/config/x86_64/debug
index 64e21850ec..b4f31aef4e 100644
--- a/config/x86_64/debug
+++ b/config/x86_64/debug
@@ -321,6 +321,7 @@ CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_MCE=y
CONFIG_X86_MCE_INTEL=y
+CONFIG_X86_MCE_XEON75XX=m
CONFIG_X86_MCE_AMD=y
CONFIG_X86_MCE_THRESHOLD=y
CONFIG_X86_MCE_INJECT=m
diff --git a/config/x86_64/default b/config/x86_64/default
index a650cfcb5c..f177ec899b 100644
--- a/config/x86_64/default
+++ b/config/x86_64/default
@@ -321,6 +321,7 @@ CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_MCE=y
CONFIG_X86_MCE_INTEL=y
+CONFIG_X86_MCE_XEON75XX=m
CONFIG_X86_MCE_AMD=y
CONFIG_X86_MCE_THRESHOLD=y
CONFIG_X86_MCE_INJECT=m
diff --git a/config/x86_64/desktop b/config/x86_64/desktop
index eb1fafcafa..dfaecd3410 100644
--- a/config/x86_64/desktop
+++ b/config/x86_64/desktop
@@ -306,6 +306,7 @@ CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_MCE=y
CONFIG_X86_MCE_INTEL=y
+# CONFIG_X86_MCE_XEON75XX is not set
CONFIG_X86_MCE_AMD=y
CONFIG_X86_MCE_THRESHOLD=y
CONFIG_X86_MCE_INJECT=m
diff --git a/config/x86_64/trace b/config/x86_64/trace
index 77d554482e..bdeedcff31 100644
--- a/config/x86_64/trace
+++ b/config/x86_64/trace
@@ -321,6 +321,7 @@ CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
CONFIG_X86_MCE=y
CONFIG_X86_MCE_INTEL=y
+CONFIG_X86_MCE_XEON75XX=m
CONFIG_X86_MCE_AMD=y
CONFIG_X86_MCE_THRESHOLD=y
CONFIG_X86_MCE_INJECT=m
diff --git a/kernel-source.changes b/kernel-source.changes
index 8c1e0bf960..427fdd703a 100644
--- a/kernel-source.changes
+++ b/kernel-source.changes
@@ -1,4 +1,53 @@
-------------------------------------------------------------------
+Mon Jan 25 16:46:19 CET 2010 - trenn@suse.de
+
+- Update config files.
+- patches.arch/x86_mce_intel_decode_physical_address.patch: x86,
+ mce: Xeon75xx specific interface to get corrected memory error
+ information (bnc#573380, fate#307738).
+- patches.arch/x86_mce_intel_decode_physical_address_compile_fix.patch:
+ x86, mce: Xeon75xx specific interface to get corrected memory
+ error information (bnc#573380, fate#307738).
+- patches.arch/x86_mce_intel_decode_physical_address_rename_fix.patch:
+ x86, mce: Rename cpu_specific_poll to mce_cpu_specific_poll
+ (bnc#573380, fate#307738).
+- patches.xen/xen3-auto-arch-x86.diff: Refresh.
+
+-------------------------------------------------------------------
+Mon Jan 25 14:13:08 CET 2010 - tiwai@suse.de
+
+- patches.drivers/alsa-sp1-hda-57-cx5051-toshiba-quirk:
+ ALSA: hda - Add support for Toshiba Satellite M300
+ (bnc#492233,bnc#565904).
+- patches.drivers/alsa-sp1-hda-58-cx5051-lenovo-mute-fix: ALSA:
+ hda - Change headphone pin control with master volume on cx5051
+ (bnc#573050).
+
+-------------------------------------------------------------------
+Mon Jan 25 12:30:14 CET 2010 - trenn@suse.de
+
+- patches.arch/x86_enable_tsc_sync_check_again.patch: x86:
+ Reenable TSC sync check at boot, even with NONSTOP_TSC
+ (bnc#573379).
+
+-------------------------------------------------------------------
+Mon Jan 25 12:22:55 CET 2010 - trenn@suse.de
+
+- patches.arch/x86_node_hotplug_parse_srat_fix_2nd_ver.patch:
+ x86: Set hotpluggable nodes in nodes_possible_map (bnc#567216).
+- patches.arch/x86_node_hotplug_parse_srat_fix.patch: Delete.
+
+-------------------------------------------------------------------
+Mon Jan 25 11:45:39 CET 2010 - trenn@suse.de
+
+- supported.conf:
+ Add mce-inject and hwpoison-inject so that Intel can easier test
+ this. As these are debug drivers, they might get reverted from
+ support.conf again if kernel-extra package gets fixed for SLES,
+ only seem to exist for SLED because "NCC is not yet working for SP1".
+ (bnc#572552).
+
+-------------------------------------------------------------------
Sat Jan 23 02:54:31 CET 2010 - bphilips@suse.de
- patches.drivers/tg3-updates-from-f4188d-to-ba5b0bf.patch: tg3:
diff --git a/patches.arch/x86_enable_tsc_sync_check_again.patch b/patches.arch/x86_enable_tsc_sync_check_again.patch
new file mode 100644
index 0000000000..289bb757f1
--- /dev/null
+++ b/patches.arch/x86_enable_tsc_sync_check_again.patch
@@ -0,0 +1,51 @@
+From: Pallipadi, Venkatesh <venkatesh.pallipadi@intel.com>
+Subject: x86: Reenable TSC sync check at boot, even with NONSTOP_TSC
+References: bnc#573379
+Patch-Mainline: yes
+Commit-ID: 6c56ccecf05fafe100ab4ea94f6fccbf5ff00db7
+
+Signed-off-by: Thomas Renninger <trenn@suse.de>
+
+Commit 83ce4009 did the following change
+If the TSC is constant and non-stop, also set it reliable.
+
+But, there seems to be few systems that will end up with TSC warp across
+sockets, depending on how the cpus come out of reset. Skipping TSC sync
+test on such systems may result in time inconsistency later.
+
+So, reenable TSC sync test even on constant and non-stop TSC systems.
+Set, sched_clock_stable to 1 by default and reset it in
+mark_tsc_unstable, if TSC sync fails.
+
+This change still gives perf benefit mentioned in 83ce4009 for systems
+where TSC is reliable.
+
+Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
+Acked-by: Suresh Siddha <suresh.b.siddha@intel.com>
+LKML-Reference: <20091217202702.GA18015@linux-os.sc.intel.com>
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+
+diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
+index 9c31e8b..879666f 100644
+--- a/arch/x86/kernel/cpu/intel.c
++++ b/arch/x86/kernel/cpu/intel.c
+@@ -70,7 +70,6 @@ static void __cpuinit early_init_intel(struct cpuinfo_x86 *c)
+ if (c->x86_power & (1 << 8)) {
+ set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC);
+ set_cpu_cap(c, X86_FEATURE_NONSTOP_TSC);
+- set_cpu_cap(c, X86_FEATURE_TSC_RELIABLE);
+ sched_clock_stable = 1;
+ }
+
+diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
+index cd982f4..597683a 100644
+--- a/arch/x86/kernel/tsc.c
++++ b/arch/x86/kernel/tsc.c
+@@ -763,6 +763,7 @@ void mark_tsc_unstable(char *reason)
+ {
+ if (!tsc_unstable) {
+ tsc_unstable = 1;
++ sched_clock_stable = 0;
+ printk(KERN_INFO "Marking TSC unstable due to %s\n", reason);
+ /* Change only the rating, when not registered */
+ if (clocksource_tsc.mult)
diff --git a/patches.arch/x86_mce_intel_decode_physical_address.patch b/patches.arch/x86_mce_intel_decode_physical_address.patch
new file mode 100644
index 0000000000..79af7b1dec
--- /dev/null
+++ b/patches.arch/x86_mce_intel_decode_physical_address.patch
@@ -0,0 +1,595 @@
+From: Andi Kleen <andi@firstfloor.org>
+Subject: x86, mce: Xeon75xx specific interface to get corrected memory error information
+Patch-Mainline: submitted to x86-tip, added but reverted due to a minor compile issue
+ which gets fixed by and incremental patch
+References: bnc#573380, fate#307738
+
+http://lkml.org/lkml/2010/1/22/98
+
+Xeon 75xx doesn't log physical addresses on corrected machine check
+events in the standard architectural MSRs. Instead the address has to
+be retrieved in a model specific way. This makes it impossible to do
+predictive failure analysis.
+
+Implement cpu model specific code to do this in mce-xeon75xx.c using a
+new hook that is called from the generic poll code. The code retrieves
+the physical address/DIMM of the last corrected error from the
+platform and makes the address look like a standard architectural MCA
+address for further processing.
+
+In addition the DIMM information is retrieved and put into two new
+aux0/aux1 fields in struct mce. These fields are specific to a given
+CPU. These fields can then be decoded by mcelog into specific DIMM
+information. The latest mcelog version has support for this.
+
+Longer term this will be likely in a different output format, but
+short term that seemed like the least intrusive solution. Older mcelog
+can deal with an extended record.
+
+There's no code to print this information on a panic because this only
+works for corrected errors, and corrected errors do not usually result
+in panics.
+
+The act of retrieving the DIMM/PA information can take some time, so
+this code has a rate limit to avoid taking too much CPU time on a
+error flood.
+
+The whole thing can be loaded as a module and has suitable PCI-IDs so
+that it can be auto-loaded by a distribution. The code also checks
+explicitely for the expected CPU model number to make sure this code
+doesn't run anywhere else.
+
+Signed-off-by: Thomas Renninger <trenn@suse.de>
+
+---
+ arch/x86/Kconfig | 8
+ arch/x86/include/asm/mce.h | 2
+ arch/x86/kernel/cpu/mcheck/Makefile | 1
+ arch/x86/kernel/cpu/mcheck/mce-internal.h | 1
+ arch/x86/kernel/cpu/mcheck/mce-xeon75xx.c | 427 ++++++++++++++++++++++++++++++
+ arch/x86/kernel/cpu/mcheck/mce.c | 11
+ arch/x86/kernel/e820.c | 3
+ 7 files changed, 452 insertions(+), 1 deletion(-)
+
+Index: linux-2.6.32-master/arch/x86/Kconfig
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/Kconfig
++++ linux-2.6.32-master/arch/x86/Kconfig
+@@ -879,6 +879,14 @@ config X86_MCE_INTEL
+ Additional support for intel specific MCE features such as
+ the thermal monitor.
+
++config X86_MCE_XEON75XX
++ tristate "Intel Xeon 7500 series corrected memory error driver"
++ depends on X86_MCE_INTEL
++ ---help---
++ Add support for a Intel Xeon 7500 series specific memory error driver.
++ This allows to report the DIMM and physical address on a corrected
++ memory error machine check event.
++
+ config X86_MCE_AMD
+ def_bool y
+ prompt "AMD MCE features"
+Index: linux-2.6.32-master/arch/x86/include/asm/mce.h
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/include/asm/mce.h
++++ linux-2.6.32-master/arch/x86/include/asm/mce.h
+@@ -67,6 +67,8 @@ struct mce {
+ __u32 socketid; /* CPU socket ID */
+ __u32 apicid; /* CPU initial apic ID */
+ __u64 mcgcap; /* MCGCAP MSR: machine check capabilities of CPU */
++ __u64 aux0; /* model specific */
++ __u64 aux1; /* model specific */
+ };
+
+ /*
+Index: linux-2.6.32-master/arch/x86/kernel/cpu/mcheck/Makefile
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/kernel/cpu/mcheck/Makefile
++++ linux-2.6.32-master/arch/x86/kernel/cpu/mcheck/Makefile
+@@ -2,6 +2,7 @@ obj-y = mce.o mce-severity.o
+
+ obj-$(CONFIG_X86_ANCIENT_MCE) += winchip.o p5.o
+ obj-$(CONFIG_X86_MCE_INTEL) += mce_intel.o
++obj-$(CONFIG_X86_MCE_XEON75XX) += mce-xeon75xx.o
+ obj-$(CONFIG_X86_MCE_AMD) += mce_amd.o
+ obj-$(CONFIG_X86_MCE_THRESHOLD) += threshold.o
+ obj-$(CONFIG_X86_MCE_INJECT) += mce-inject.o
+Index: linux-2.6.32-master/arch/x86/kernel/cpu/mcheck/mce-internal.h
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/kernel/cpu/mcheck/mce-internal.h
++++ linux-2.6.32-master/arch/x86/kernel/cpu/mcheck/mce-internal.h
+@@ -28,3 +28,4 @@ extern int mce_ser;
+
+ extern struct mce_bank *mce_banks;
+
++extern void (*cpu_specific_poll)(struct mce *);
+Index: linux-2.6.32-master/arch/x86/kernel/cpu/mcheck/mce-xeon75xx.c
+===================================================================
+--- /dev/null
++++ linux-2.6.32-master/arch/x86/kernel/cpu/mcheck/mce-xeon75xx.c
+@@ -0,0 +1,427 @@
++/*
++ * Xeon 7500 series specific machine check support code.
++ * Copyright 2009, 2010 Intel Corporation
++ * Author: Andi Kleen
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; version 2
++ * of the License.
++ *
++ * Implement Xeon 7500 series specific code to retrieve the physical address
++ * and DIMM information for corrected memory errors.
++ *
++ * Interface: mce->aux0/aux1 is mapped to a struct pfa_dimm with pad
++ * redefined to DIMM valid bits. Consumers check CPUID and bank and
++ * then interpret aux0/aux1
++ */
++
++/* #define DEBUG 1 */ /* disable for production */
++#define pr_fmt(x) "MCE: " x
++
++#include <linux/moduleparam.h>
++#include <linux/pci_ids.h>
++#include <linux/hrtimer.h>
++#include <linux/string.h>
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/ktime.h>
++#include <linux/init.h>
++#include <linux/pci.h>
++#include <asm/processor.h>
++#include <asm/e820.h>
++#include <asm/mce.h>
++#include <asm/io.h>
++
++#include "mce-internal.h"
++
++#define PFA_SIG "$PFA"
++#define PFA_SIG_LEN 4
++
++/* DIMM description */
++struct aux_pfa_dimm {
++ u8 fbd_channel_id;
++ u8 ddr_channel_id;
++ u8 ddr_dimm_id;
++ u8 ddr_rank_id;
++ u8 ddr_dimm_bank_id;
++ u8 ddr_dimm_row_id;
++ u8 ddr_dimm_column_id;
++ u8 valid;
++} __attribute__((packed));
++
++struct pfa_dimm {
++ u8 fbd_channel_id;
++ u8 ddr_channel_id;
++ u8 ddr_dimm_id;
++ u8 ddr_rank_id;
++ u8 ddr_dimm_bank_id;
++ u32 ddr_dimm_row_id;
++ u32 ddr_dimm_column_id;
++} __attribute__((packed));
++
++/* Memory translation table in memory. */
++struct pfa_table {
++ u8 sig[PFA_SIG_LEN]; /* Signature: '$PFA' */
++ u16 len; /* total length */
++ u16 revision; /* 0x11 */
++ u8 checksum; /* 8bit sum to zero */
++ u8 db_value; /* mailbox port command value */
++ u8 db_port; /* mailbox port */
++ /* end of header; end of checksum */
++ u8 command; /* input command */
++ u32 valid; /* valid input/output bits */
++ u16 status; /* output status */
++ u8 socket_id; /* input socket id*/
++ u8 bank_id; /* input MCE bank id */
++ u32 pad1;
++ u64 mbox_address;
++ u64 physical_addr; /* physical address */
++ struct pfa_dimm dimm[2];
++ /*
++ * topology information follows: not used for now.
++ */
++} __attribute__((packed));
++
++/* DIMM valid bits in valid: DIMM0: 8..12; DIMM1 16..20 */
++#define DIMM_VALID_BITS(val, num) (((val) >> (4 + (num) * 8)) & DIMM_VALID_ALL)
++#define DIMM_SET_VALID(val, num) ((val) << (4 + (num) * 8))
++
++enum {
++ MCE_BANK_MBOX0 = 8,
++ MCE_BANK_MBOX1 = 9,
++
++ PFA_REVISION = 0x11, /* v1.1 */
++
++ /* Status bits for valid field */
++ PFA_VALID_MA = (1 << 0),
++ PFA_VALID_SOCKETID = (1 << 1),
++ PFA_VALID_BANKID = (1 << 2),
++ PFA_VALID_PA = (1 << 3),
++
++ /* DIMM valid bits in valid */
++ /* use with DIMM_VALID_BITS/DIMM_SET_VALID for pfa->valid */
++ DIMM_VALID_FBD_CHAN = (1 << 0),
++ DIMM_VALID_DDR_CHAN = (1 << 1),
++ DIMM_VALID_DDR_DIMM = (1 << 2),
++ DIMM_VALID_DDR_RANK = (1 << 3),
++ DIMM_VALID_DIMM_BANK = (1 << 4),
++ DIMM_VALID_DIMM_ROW = (1 << 5),
++ DIMM_VALID_DIMM_COLUMN = (1 << 6),
++ DIMM_VALID_ALL = 0x7f,
++
++ PFA_DIMM_VALID_MASK = DIMM_SET_VALID(DIMM_VALID_ALL, 0)
++ | DIMM_SET_VALID(DIMM_VALID_ALL, 1),
++
++ /* Values for status field */
++ PFA_STATUS_SUCCESS = 0,
++ PFA_STATUS_SOCKET_INVALID = (1 << 1),
++ PFA_STATUS_MBOX_INVALID = (1 << 2),
++ PFA_STATUS_MA_INVALID = (1 << 3),
++ PFA_STATUS_PA_INVALID = (1 << 4),
++
++ /* Values for command field */
++ PFA_CMD_GET_MEM_CORR_ERR_PA = 0,
++ PFA_CMD_PA_TO_DIMM_ADDR = 1,
++ PFA_CMD_DIMM_TO_PA = 2,
++ PFA_CMD_GET_TOPOLOGY = 3,
++
++ /* PCI device IDs and the base register */
++ ICH_PFA_CFG = 0x8c, /* SCRATCH4 */
++ PCI_DEVICE_ID_BXB_ICH_LEGACY0 = 0x3422,
++};
++
++static struct pfa_table *pfa_table __read_mostly;
++static int memerr_max_conv_rate __read_mostly = 100;
++static int memerr_min_interval __read_mostly = 500;
++static int pfa_lost; /* for diagnosis */
++
++enum {
++ RATE_LIMIT_PERIOD = USEC_PER_SEC, /* in us; period of rate limit */
++};
++
++module_param(memerr_max_conv_rate, int, 0644);
++MODULE_PARM_DESC(memerr_max_conv_rate,
++ "Maximum number of memory error conversions each second; 0 to disable");
++module_param(memerr_min_interval, int, 0644);
++MODULE_PARM_DESC(memerr_min_interval,
++ "Minimum time delta between two memory conversions; in us; default 500");
++
++static int notest;
++static int nocsum;
++module_param(notest, int, 0);
++module_param(nocsum, int, 0);
++
++static u64 encode_dimm(struct pfa_dimm *d, u8 valid)
++{
++ union {
++ struct aux_pfa_dimm d;
++ u64 v;
++ } p;
++
++ BUILD_BUG_ON(sizeof(struct aux_pfa_dimm) != sizeof(u64));
++ p.d.fbd_channel_id = d->fbd_channel_id;
++ p.d.ddr_channel_id = d->ddr_channel_id;
++ p.d.ddr_dimm_id = d->ddr_dimm_id;
++ p.d.ddr_rank_id = d->ddr_rank_id;
++ p.d.ddr_dimm_bank_id = d->ddr_dimm_bank_id;
++ p.d.ddr_dimm_row_id = d->ddr_dimm_row_id;
++ if (p.d.ddr_dimm_row_id != d->ddr_dimm_row_id) /* truncated? */
++ valid &= ~DIMM_VALID_DIMM_ROW;
++ p.d.ddr_dimm_column_id = d->ddr_dimm_column_id;
++ if (p.d.ddr_dimm_column_id != d->ddr_dimm_column_id)
++ valid &= ~DIMM_VALID_DIMM_COLUMN;
++ p.d.valid = valid;
++ pr_debug("PFA fbd_ch %u ddr_ch %u dimm %u rank %u bank %u valid %x\n",
++ d->fbd_channel_id,
++ d->ddr_channel_id,
++ d->ddr_dimm_id,
++ d->ddr_rank_id,
++ d->ddr_dimm_bank_id,
++ valid);
++ return p.v;
++}
++
++static u8 csum(u8 *table, u16 len)
++{
++ u8 sum = 0;
++ int i;
++ for (i = 0; i < len; i++)
++ sum += *table++;
++ return sum;
++}
++
++/*
++ * Execute a command through the mailbox interface.
++ */
++static int
++pfa_command(unsigned bank, unsigned socketid, unsigned command, unsigned valid)
++{
++ pfa_table->bank_id = bank;
++ pfa_table->socket_id = socketid;
++ pfa_table->valid = valid | PFA_VALID_SOCKETID;
++ pfa_table->command = command;
++
++ outb(pfa_table->db_value, pfa_table->db_port);
++
++ mb(); /* Reread fields after they got changed */
++
++ if (pfa_table->status != PFA_STATUS_SUCCESS) {
++ pr_debug("Memory PFA command %d failed: socket:%d bank:%d status:%x\n",
++ command, socketid, bank, pfa_table->status);
++ return -pfa_table->status;
++ }
++ return 0;
++}
++
++/*
++ * Retrieve physical address and DIMMs.
++ */
++static int translate_memory_error(struct mce *m)
++{
++ struct pfa_table *pfa = pfa_table;
++ u64 status;
++ int ret;
++ u32 valid;
++ int cpu = smp_processor_id();
++
++ /* Make sure our structures match the specification */
++ BUILD_BUG_ON(offsetof(struct pfa_table, physical_addr) != 0x20);
++ BUILD_BUG_ON(offsetof(struct pfa_table, status) != 0x10);
++ BUILD_BUG_ON(offsetof(struct pfa_table, physical_addr) != 0x20);
++ BUILD_BUG_ON(offsetof(struct pfa_table, dimm[1].ddr_dimm_column_id) !=
++ 0x3e);
++
++ /* Ask for PA/DIMMs of last error */
++ if (pfa_command(m->bank, m->socketid,
++ PFA_CMD_GET_MEM_CORR_ERR_PA, PFA_VALID_BANKID) < 0)
++ return -1;
++
++ /*
++ * Recheck machine check bank. If the overflow bit was set
++ * there was a race. Don't use the information in this case.
++ */
++ rdmsrl(MSR_IA32_MCx_STATUS(m->bank), status);
++ if (status & MCI_STATUS_OVER) {
++ pr_debug("%d: overflow race on bank %d\n", cpu, m->bank);
++ return -1;
++ }
++
++ ret = -1;
++ valid = pfa->valid;
++ if (valid & PFA_VALID_PA) {
++ m->status |= MCI_STATUS_ADDRV;
++ m->addr = pfa_table->physical_addr;
++ pr_debug("%d: got physical address %llx valid %x\n",
++ cpu, m->addr, valid);
++ ret = 0;
++ }
++
++ /* When DIMM information was supplied pass it out */
++ if (valid & PFA_DIMM_VALID_MASK) {
++ m->aux0 = encode_dimm(&pfa->dimm[0], DIMM_VALID_BITS(valid, 0));
++ m->aux1 = encode_dimm(&pfa->dimm[1], DIMM_VALID_BITS(valid, 1));
++ ret = 0;
++ }
++
++ return ret;
++}
++
++/*
++ * Xeon 75xx specific mce poll method to retrieve the physical address
++ * and DIMM information.
++ */
++static void xeon75xx_mce_poll(struct mce *m)
++{
++ static DEFINE_SPINLOCK(convert_lock); /* Protect table and static */
++ static unsigned long cperm;
++ static ktime_t last, last_int;
++ unsigned long flags;
++ ktime_t now;
++ s64 delta;
++
++ /* Memory error? */
++ if (m->bank != MCE_BANK_MBOX0 && m->bank != MCE_BANK_MBOX1)
++ return;
++ if (m->status & MCI_STATUS_OVER)
++ return;
++ if (memerr_max_conv_rate == 0)
++ return;
++
++ spin_lock_irqsave(&convert_lock, flags);
++ /*
++ * Rate limit conversions. The conversion takes some time,
++ * but it's not good to use all the CPU time during a error
++ * flood.
++ * Enforce maximum number per second and minimum interval.
++ * The ktime call should use TSC on this machine and be fast.
++ */
++ now = ktime_get();
++ delta = ktime_us_delta(now, last);
++ if (delta >= RATE_LIMIT_PERIOD) {
++ cperm = 0;
++ last = now;
++ }
++ if (ktime_us_delta(now, last_int) >= memerr_min_interval &&
++ ++cperm <= memerr_max_conv_rate) {
++ if (translate_memory_error(m) < 0) {
++ /* On error stop converting for the next second */
++ cperm = memerr_max_conv_rate;
++ pr_debug("PFA translation failed\n");
++ }
++ } else
++ pfa_lost++;
++ last_int = now;
++ spin_unlock_irqrestore(&convert_lock, flags);
++}
++
++static struct pci_device_id bxb_mce_pciids[] = {
++ { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_BXB_ICH_LEGACY0) },
++ {}
++};
++
++static int __init xeon75xx_mce_init(void)
++{
++ u32 addr = 0;
++ struct pci_dev *dev;
++
++ if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL ||
++ boot_cpu_data.x86 != 6 ||
++ boot_cpu_data.x86_model != 0x2e)
++ return -ENODEV;
++
++ /*
++ * Get table address from register in IOH.
++ * This just looks up the device, because we don't want to "own" it.
++ */
++ dev = NULL;
++ while ((dev = pci_get_device(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, dev))
++ != NULL) {
++ if (!pci_match_id(bxb_mce_pciids, dev))
++ continue;
++ pci_read_config_dword(dev, ICH_PFA_CFG, &addr);
++ if (addr)
++ break;
++ }
++ pci_dev_put(dev);
++ if (!addr)
++ return -ENODEV;
++
++ if (!e820_all_mapped(addr, addr + PAGE_SIZE, E820_RESERVED)) {
++ pr_info("PFA table at %x not e820 reserved\n", addr);
++ return -ENODEV;
++ }
++
++ pfa_table = (__force struct pfa_table *)ioremap_cache(addr, PAGE_SIZE);
++ if (!pfa_table) {
++ pr_err("Cannot map PFA table at %x\n", addr);
++ return -EIO;
++ }
++
++ if (memcmp(&pfa_table->sig, PFA_SIG, PFA_SIG_LEN) ||
++ pfa_table->len < sizeof(struct pfa_table) ||
++ /* assume newer versions are compatible */
++ pfa_table->revision < PFA_REVISION) {
++ pr_info("PFA table at %x invalid\n", addr);
++ goto error_unmap;
++ }
++
++ if (!nocsum && csum((u8 *)pfa_table,
++ offsetof(struct pfa_table, command))) {
++ pr_info("PFA table at %x length %u has invalid checksum\n",
++ addr, pfa_table->len);
++ goto error_unmap;
++ }
++
++ /* Not strictly needed today */
++ if (pfa_table->len > PAGE_SIZE) {
++ unsigned len = roundup(pfa_table->len, PAGE_SIZE);
++ iounmap(pfa_table);
++ pfa_table = (__force void *)ioremap_cache(addr, len);
++ if (!pfa_table) {
++ pr_err("Cannot remap %u bytes PFA table at %x\n",
++ len, addr);
++ return -EIO;
++ }
++ }
++
++ if (!notest) {
++ int status = pfa_command(0, 0, PFA_CMD_GET_TOPOLOGY, 0);
++ if (status < 0) {
++ pr_err("Test of PFA table failed: %x\n", -status);
++ goto error_unmap;
++ }
++ }
++
++ pr_info("Found Xeon75xx PFA memory error translation table at %x\n",
++ addr);
++ mb();
++ cpu_specific_poll = xeon75xx_mce_poll;
++ return 0;
++
++error_unmap:
++ iounmap(pfa_table);
++ return -ENODEV;
++}
++
++MODULE_DEVICE_TABLE(pci, bxb_mce_pciids);
++MODULE_LICENSE("GPL v2");
++MODULE_AUTHOR("Andi Kleen");
++MODULE_DESCRIPTION("Intel Xeon 75xx specific DIMM error reporting");
++
++#ifdef CONFIG_MODULE
++static void __exit xeon75xx_mce_exit(void)
++{
++ cpu_specific_poll = NULL;
++ wmb();
++ /* Wait for all machine checks to finish before really unloading */
++ synchronize_rcu();
++ iounmap(pfa_table);
++}
++
++module_init(xeon75xx_mce_init);
++module_exit(xeon75xx_mce_exit);
++#else
++/* When built-in run as soon as the PCI subsystem is up */
++fs_initcall(xeon75xx_mce_init);
++#endif
+Index: linux-2.6.32-master/arch/x86/kernel/cpu/mcheck/mce.c
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/kernel/cpu/mcheck/mce.c
++++ linux-2.6.32-master/arch/x86/kernel/cpu/mcheck/mce.c
+@@ -84,6 +84,8 @@ static char *mce_helper_argv[2] = { mc
+ static DECLARE_WAIT_QUEUE_HEAD(mce_wait);
+ static DEFINE_PER_CPU(struct mce, mces_seen);
+ static int cpu_missing;
++void (*cpu_specific_poll)(struct mce *);
++EXPORT_SYMBOL_GPL(cpu_specific_poll);
+
+ static void default_decode_mce(struct mce *m)
+ {
+@@ -350,6 +352,11 @@ static void mce_wrmsrl(u32 msr, u64 v)
+ wrmsrl(msr, v);
+ }
+
++static int under_injection(void)
++{
++ return __get_cpu_var(injectm).finished;
++}
++
+ /*
+ * Simple lockless ring to communicate PFNs from the exception handler with the
+ * process context work function. This is vastly simplified because there's
+@@ -553,6 +560,10 @@ void machine_check_poll(enum mcp_flags f
+
+ if (!(flags & MCP_TIMESTAMP))
+ m.tsc = 0;
++
++ if (cpu_specific_poll && !under_injection() && !mce_dont_log_ce)
++ cpu_specific_poll(&m);
++
+ /*
+ * Don't get the IP here because it's unlikely to
+ * have anything to do with the actual error location.
+Index: linux-2.6.32-master/arch/x86/kernel/e820.c
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/kernel/e820.c
++++ linux-2.6.32-master/arch/x86/kernel/e820.c
+@@ -79,7 +79,7 @@ EXPORT_SYMBOL_GPL(e820_any_mapped);
+ * Note: this function only works correct if the e820 table is sorted and
+ * not-overlapping, which is the case
+ */
+-int __init e820_all_mapped(u64 start, u64 end, unsigned type)
++int e820_all_mapped(u64 start, u64 end, unsigned type)
+ {
+ int i;
+
+@@ -106,6 +106,7 @@ int __init e820_all_mapped(u64 start, u6
+ }
+ return 0;
+ }
++EXPORT_SYMBOL_GPL(e820_all_mapped);
+
+ /*
+ * Add a memory region to the kernel e820 map.
diff --git a/patches.arch/x86_mce_intel_decode_physical_address_compile_fix.patch b/patches.arch/x86_mce_intel_decode_physical_address_compile_fix.patch
new file mode 100644
index 0000000000..ee3fa5bd80
--- /dev/null
+++ b/patches.arch/x86_mce_intel_decode_physical_address_compile_fix.patch
@@ -0,0 +1,27 @@
+From: Andi Kleen <andi@firstfloor.org>
+Subject: x86, mce: Xeon75xx specific interface to get corrected memory error information
+Patch-Mainline: submitted to x86-tip, added but reverted due to a minor compile issue
+ which gets fixed by this patch
+References: bnc#573380, fate#307738
+
+http://lkml.org/lkml/2010/1/23/50
+
+Signed-off-by: Thomas Renninger <trenn@suse.de>
+
+---
+ arch/x86/Kconfig | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: linux-2.6.32-master/arch/x86/Kconfig
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/Kconfig
++++ linux-2.6.32-master/arch/x86/Kconfig
+@@ -881,7 +881,7 @@ config X86_MCE_INTEL
+
+ config X86_MCE_XEON75XX
+ tristate "Intel Xeon 7500 series corrected memory error driver"
+- depends on X86_MCE_INTEL
++ depends on X86_MCE_INTEL && PCI
+ ---help---
+ Add support for a Intel Xeon 7500 series specific memory error driver.
+ This allows to report the DIMM and physical address on a corrected
diff --git a/patches.arch/x86_mce_intel_decode_physical_address_rename_fix.patch b/patches.arch/x86_mce_intel_decode_physical_address_rename_fix.patch
new file mode 100644
index 0000000000..3efbec409f
--- /dev/null
+++ b/patches.arch/x86_mce_intel_decode_physical_address_rename_fix.patch
@@ -0,0 +1,78 @@
+From: H. Peter Anvin <hpa@zytor.com>
+Subject: x86, mce: Rename cpu_specific_poll to mce_cpu_specific_poll
+Patch-Mainline: submitted to x86-tip, added but reverted due to a minor compile issue
+ which gets fixed by and incremental patch
+References: bnc#573380, fate#307738
+
+http://lkml.org/lkml/2010/1/22/99
+
+cpu_specific_poll is a global variable, and it should have a global
+namespace name. Since it is MCE-specific (it takes a struct mce *),
+rename it mce_cpu_specific_poll.
+
+Signed-off-by: Thomas Renninger <trenn@suse.de>
+
+---
+ arch/x86/kernel/cpu/mcheck/mce-internal.h | 2 +-
+ arch/x86/kernel/cpu/mcheck/mce-xeon75xx.c | 4 ++--
+ arch/x86/kernel/cpu/mcheck/mce.c | 8 ++++----
+ 3 files changed, 7 insertions(+), 7 deletions(-)
+
+Index: linux-2.6.32-master/arch/x86/kernel/cpu/mcheck/mce-internal.h
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/kernel/cpu/mcheck/mce-internal.h
++++ linux-2.6.32-master/arch/x86/kernel/cpu/mcheck/mce-internal.h
+@@ -28,4 +28,4 @@ extern int mce_ser;
+
+ extern struct mce_bank *mce_banks;
+
+-extern void (*cpu_specific_poll)(struct mce *);
++extern void (*mce_cpu_specific_poll)(struct mce *);
+Index: linux-2.6.32-master/arch/x86/kernel/cpu/mcheck/mce-xeon75xx.c
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/kernel/cpu/mcheck/mce-xeon75xx.c
++++ linux-2.6.32-master/arch/x86/kernel/cpu/mcheck/mce-xeon75xx.c
+@@ -396,7 +396,7 @@ static int __init xeon75xx_mce_init(void
+ pr_info("Found Xeon75xx PFA memory error translation table at %x\n",
+ addr);
+ mb();
+- cpu_specific_poll = xeon75xx_mce_poll;
++ mce_cpu_specific_poll = xeon75xx_mce_poll;
+ return 0;
+
+ error_unmap:
+@@ -412,7 +412,7 @@ MODULE_DESCRIPTION("Intel Xeon 75xx spec
+ #ifdef CONFIG_MODULE
+ static void __exit xeon75xx_mce_exit(void)
+ {
+- cpu_specific_poll = NULL;
++ mce_cpu_specific_poll = NULL;
+ wmb();
+ /* Wait for all machine checks to finish before really unloading */
+ synchronize_rcu();
+Index: linux-2.6.32-master/arch/x86/kernel/cpu/mcheck/mce.c
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/kernel/cpu/mcheck/mce.c
++++ linux-2.6.32-master/arch/x86/kernel/cpu/mcheck/mce.c
+@@ -84,8 +84,8 @@ static char *mce_helper_argv[2] = { mc
+ static DECLARE_WAIT_QUEUE_HEAD(mce_wait);
+ static DEFINE_PER_CPU(struct mce, mces_seen);
+ static int cpu_missing;
+-void (*cpu_specific_poll)(struct mce *);
+-EXPORT_SYMBOL_GPL(cpu_specific_poll);
++void (*mce_cpu_specific_poll)(struct mce *);
++EXPORT_SYMBOL_GPL(mce_cpu_specific_poll);
+
+ static void default_decode_mce(struct mce *m)
+ {
+@@ -561,8 +561,8 @@ void machine_check_poll(enum mcp_flags f
+ if (!(flags & MCP_TIMESTAMP))
+ m.tsc = 0;
+
+- if (cpu_specific_poll && !under_injection() && !mce_dont_log_ce)
+- cpu_specific_poll(&m);
++ if (mce_cpu_specific_poll && !under_injection() && !mce_dont_log_ce)
++ mce_cpu_specific_poll(&m);
+
+ /*
+ * Don't get the IP here because it's unlikely to
diff --git a/patches.arch/x86_node_hotplug_parse_srat_fix.patch b/patches.arch/x86_node_hotplug_parse_srat_fix.patch
deleted file mode 100644
index 1d5a784c27..0000000000
--- a/patches.arch/x86_node_hotplug_parse_srat_fix.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From: Haicheng Li <haicheng.li@linux.intel.com>
-Subject: x86/mm/srat_64.c: nodes_parsed should include all nodes detected by ACPI
-References: bnc#567140
-Patch-Mainline: not yet, only submitted
-
-http://lkml.org/lkml/2010/1/15/9
-
-CC: Thomas Gleixner <tglx@linutronix.de>
-CC: Ingo Molnar <mingo@redhat.com>
-CC: H. Peter Anvin <hpa@zytor.com>
-CC: Andi Kleen <andi@firstfloor.org>
-Signed-off-by: Haicheng Li <haicheng.li@linux.intel.com>
-
-Signed-off-by: Thomas Renninger <trenn@suse.de>
----
-Index: linux-2.6.32-master/arch/x86/mm/srat_64.c
-===================================================================
---- linux-2.6.32-master.orig/arch/x86/mm/srat_64.c
-+++ linux-2.6.32-master/arch/x86/mm/srat_64.c
-@@ -240,7 +240,7 @@ update_nodes_add(int node, unsigned long
- void __init
- acpi_numa_memory_affinity_init(struct acpi_srat_mem_affinity *ma)
- {
-- struct bootnode *nd, oldnode;
-+ struct bootnode *nd;
- unsigned long start, end;
- int node, pxm;
- int i;
-@@ -281,7 +281,6 @@ acpi_numa_memory_affinity_init(struct ac
- return;
- }
- nd = &nodes[node];
-- oldnode = *nd;
- if (!node_test_and_set(node, nodes_parsed)) {
- nd->start = start;
- nd->end = end;
-@@ -297,13 +296,8 @@ acpi_numa_memory_affinity_init(struct ac
- e820_register_active_regions(node, start >> PAGE_SHIFT,
- end >> PAGE_SHIFT);
-
-- if (ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE) {
-+ if (ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE)
- update_nodes_add(node, start, end);
-- /* restore nodes[node] */
-- *nd = oldnode;
-- if ((nd->start | nd->end) == 0)
-- node_clear(node, nodes_parsed);
-- }
-
- node_memblk_range[num_node_memblks].start = start;
- node_memblk_range[num_node_memblks].end = end;
diff --git a/patches.arch/x86_node_hotplug_parse_srat_fix_2nd_ver.patch b/patches.arch/x86_node_hotplug_parse_srat_fix_2nd_ver.patch
new file mode 100644
index 0000000000..8d9911957f
--- /dev/null
+++ b/patches.arch/x86_node_hotplug_parse_srat_fix_2nd_ver.patch
@@ -0,0 +1,52 @@
+From: David Rientjes <rientjes@google.com>
+Subject: x86: Set hotpluggable nodes in nodes_possible_map
+References: bnc#567216
+Patch-Mainline: not mainline yet, but x86-tip
+
+git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
+Commit-ID: 3a5fc0e40cb467e692737bc798bc99773c81e1e2
+
+Signed-off-by: Thomas Renninger <trenn@suse.de>
+
+nodes_possible_map does not currently include nodes that have SRAT
+entries that are all ACPI_SRAT_MEM_HOT_PLUGGABLE since the bit is
+cleared in nodes_parsed if it does not have an online address range.
+
+Unequivocally setting the bit in nodes_parsed is insufficient since
+existing code, such as acpi_get_nodes(), assumes all nodes in the map
+have online address ranges. In fact, all code using nodes_parsed
+assumes such nodes represent an address range of online memory.
+
+nodes_possible_map is created by unioning nodes_parsed and
+cpu_nodes_parsed; the former represents nodes with online memory and
+the latter represents memoryless nodes. We now set the bit for
+hotpluggable nodes in cpu_nodes_parsed so that it also gets set in
+nodes_possible_map.
+
+[ hpa: Haicheng Li points out that this makes the naming of the
+ variable cpu_nodes_parsed somewhat counterintuitive. However, leave
+ it as is in the interest of keeping the pure bug fix patch small. ]
+
+Signed-off-by: David Rientjes <rientjes@google.com>
+Tested-by: Haicheng Li <haicheng.li@linux.intel.com>
+LKML-Reference: <alpine.DEB.2.00.1001201152040.30528@chino.kir.corp.google.com>
+Cc: <stable@kernel.org>
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+
+diff --git a/arch/x86/mm/srat_64.c b/arch/x86/mm/srat_64.c
+index a271241..28c6876 100644
+--- a/arch/x86/mm/srat_64.c
++++ b/arch/x86/mm/srat_64.c
+@@ -229,9 +229,11 @@ update_nodes_add(int node, unsigned long start, unsigned long end)
+ printk(KERN_ERR "SRAT: Hotplug zone not continuous. Partly ignored\n");
+ }
+
+- if (changed)
++ if (changed) {
++ node_set(node, cpu_nodes_parsed);
+ printk(KERN_INFO "SRAT: hot plug zone found %Lx - %Lx\n",
+ nd->start, nd->end);
++ }
+ }
+
+ /* Callback for parsing of the Proximity Domain <-> Memory Area mappings */
diff --git a/patches.drivers/alsa-sp1-hda-57-cx5051-toshiba-quirk b/patches.drivers/alsa-sp1-hda-57-cx5051-toshiba-quirk
new file mode 100644
index 0000000000..42e6b93c43
--- /dev/null
+++ b/patches.drivers/alsa-sp1-hda-57-cx5051-toshiba-quirk
@@ -0,0 +1,140 @@
+From faddaa5d1c0cd29629c9c7e7a9d41ecb3149a064 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Sat, 23 Jan 2010 22:31:36 +0100
+Subject: [PATCH] ALSA: hda - Add support for Toshiba Satellite M300
+Git-commit: faddaa5d1c0cd29629c9c7e7a9d41ecb3149a064
+Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6.git
+Patch-mainline: Submitted
+References: bnc#492233,bnc#565904
+
+Added the support for Toshiba Satellite M300 with Conexant 5051 codec.
+Since the laptop has no port C connection and the pin reports always
+the jack sense true, we need to ignore port-C unsol event.
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+
+---
+ Documentation/sound/alsa/HD-Audio-Models.txt | 1
+ sound/pci/hda/patch_conexant.c | 36 ++++++++++++++++++++++++---
+ 2 files changed, 33 insertions(+), 4 deletions(-)
+
+--- a/Documentation/sound/alsa/HD-Audio-Models.txt
++++ b/Documentation/sound/alsa/HD-Audio-Models.txt
+@@ -279,6 +279,7 @@
+ hp HP Spartan laptop
+ hp-dv6736 HP dv6736
+ lenovo-x200 Lenovo X200 laptop
++ toshiba Toshiba Satellite M300
+
+ Conexant 5066
+ =============
+--- a/sound/pci/hda/patch_conexant.c
++++ b/sound/pci/hda/patch_conexant.c
+@@ -45,6 +45,8 @@
+ #define CXT5051_PORTB_EVENT 0x38
+ #define CXT5051_PORTC_EVENT 0x39
+
++#define AUTO_MIC_PORTB (1 << 1)
++#define AUTO_MIC_PORTC (1 << 2)
+
+ struct conexant_jack {
+
+@@ -73,7 +75,7 @@
+ */
+ unsigned int cur_eapd;
+ unsigned int hp_present;
+- unsigned int no_auto_mic;
++ unsigned int auto_mic;
+ unsigned int need_dac_fix;
+
+ /* capture */
+@@ -1610,7 +1612,7 @@
+ struct conexant_spec *spec = codec->spec;
+ unsigned int present;
+
+- if (spec->no_auto_mic)
++ if (!(spec->auto_mic & AUTO_MIC_PORTB))
+ return;
+ present = snd_hda_codec_read(codec, 0x17, 0,
+ AC_VERB_GET_PIN_SENSE, 0) &
+@@ -1627,7 +1629,7 @@
+ unsigned int present;
+ hda_nid_t new_adc;
+
+- if (spec->no_auto_mic)
++ if (!(spec->auto_mic & AUTO_MIC_PORTC))
+ return;
+ present = snd_hda_codec_read(codec, 0x18, 0,
+ AC_VERB_GET_PIN_SENSE, 0) &
+@@ -1731,6 +1733,24 @@
+ {}
+ };
+
++static struct snd_kcontrol_new cxt5051_toshiba_mixers[] = {
++ HDA_CODEC_VOLUME("Internal Mic Volume", 0x14, 0x00, HDA_INPUT),
++ HDA_CODEC_MUTE("Internal Mic Switch", 0x14, 0x00, HDA_INPUT),
++ HDA_CODEC_VOLUME("External Mic Volume", 0x14, 0x01, HDA_INPUT),
++ HDA_CODEC_MUTE("External Mic Switch", 0x14, 0x01, HDA_INPUT),
++ HDA_CODEC_VOLUME("Master Playback Volume", 0x10, 0x00, HDA_OUTPUT),
++ {
++ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
++ .name = "Master Playback Switch",
++ .info = cxt_eapd_info,
++ .get = cxt_eapd_get,
++ .put = cxt5051_hp_master_sw_put,
++ .private_value = 0x1a,
++ },
++
++ {}
++};
++
+ static struct hda_verb cxt5051_init_verbs[] = {
+ /* Line in, Mic */
+ {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0) | 0x03},
+@@ -1840,6 +1860,7 @@
+ CXT5051_HP, /* no docking */
+ CXT5051_HP_DV6736, /* HP without mic switch */
+ CXT5051_LENOVO_X200, /* Lenovo X200 laptop */
++ CXT5051_TOSHIBA, /* Toshiba M300 & co */
+ CXT5051_MODELS
+ };
+
+@@ -1848,11 +1869,13 @@
+ [CXT5051_HP] = "hp",
+ [CXT5051_HP_DV6736] = "hp-dv6736",
+ [CXT5051_LENOVO_X200] = "lenovo-x200",
++ [CXT5051_TOSHIBA] = "toshiba",
+ };
+
+ static struct snd_pci_quirk cxt5051_cfg_tbl[] = {
+ SND_PCI_QUIRK(0x103c, 0x30cf, "HP DV6736", CXT5051_HP_DV6736),
+ SND_PCI_QUIRK(0x103c, 0x360b, "Compaq Presario CQ60", CXT5051_HP),
++ SND_PCI_QUIRK(0x1179, 0xff50, "Toshiba M30x", CXT5051_TOSHIBA),
+ SND_PCI_QUIRK(0x14f1, 0x0101, "Conexant Reference board",
+ CXT5051_LAPTOP),
+ SND_PCI_QUIRK(0x14f1, 0x5051, "HP Spartan 1.1", CXT5051_HP),
+@@ -1895,6 +1918,7 @@
+ board_config = snd_hda_check_board_config(codec, CXT5051_MODELS,
+ cxt5051_models,
+ cxt5051_cfg_tbl);
++ spec->auto_mic = AUTO_MIC_PORTB | AUTO_MIC_PORTC;
+ switch (board_config) {
+ case CXT5051_HP:
+ spec->mixers[0] = cxt5051_hp_mixers;
+@@ -1902,11 +1926,15 @@
+ case CXT5051_HP_DV6736:
+ spec->init_verbs[0] = cxt5051_hp_dv6736_init_verbs;
+ spec->mixers[0] = cxt5051_hp_dv6736_mixers;
+- spec->no_auto_mic = 1;
++ spec->auto_mic = 0;
+ break;
+ case CXT5051_LENOVO_X200:
+ spec->init_verbs[0] = cxt5051_lenovo_x200_init_verbs;
+ break;
++ case CXT5051_TOSHIBA:
++ spec->mixers[0] = cxt5051_toshiba_mixers;
++ spec->auto_mic = AUTO_MIC_PORTB;
++ break;
+ }
+
+ return 0;
diff --git a/patches.drivers/alsa-sp1-hda-58-cx5051-lenovo-mute-fix b/patches.drivers/alsa-sp1-hda-58-cx5051-lenovo-mute-fix
new file mode 100644
index 0000000000..ffd078ad5f
--- /dev/null
+++ b/patches.drivers/alsa-sp1-hda-58-cx5051-lenovo-mute-fix
@@ -0,0 +1,42 @@
+From 23d2df5b0db67fa90d3caf4b2d2f21ca33ec9c11 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Sun, 24 Jan 2010 11:19:27 +0100
+Subject: [PATCH] ALSA: hda - Change headphone pin control with master volume on cx5051
+Git-commit: 23d2df5b0db67fa90d3caf4b2d2f21ca33ec9c11
+Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6.git
+Patch-mainline: Submitted
+References: bnc#573050
+
+The HP pin (0x16) control has to be changed dynamically depending on
+the master volume switch as well as the speaker pin (0x1a). Otherwise
+the headphone still sounds with master off.
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+
+---
+ sound/pci/hda/patch_conexant.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+--- a/sound/pci/hda/patch_conexant.c
++++ b/sound/pci/hda/patch_conexant.c
+@@ -41,7 +41,7 @@
+
+ /* Conexant 5051 specific */
+
+-#define CXT5051_SPDIF_OUT 0x1C
++#define CXT5051_SPDIF_OUT 0x12
+ #define CXT5051_PORTB_EVENT 0x38
+ #define CXT5051_PORTC_EVENT 0x39
+
+@@ -1589,6 +1589,11 @@
+ {
+ struct conexant_spec *spec = codec->spec;
+ unsigned int pinctl;
++ /* headphone pin */
++ pinctl = (spec->hp_present && spec->cur_eapd) ? PIN_HP : 0;
++ snd_hda_codec_write(codec, 0x16, 0, AC_VERB_SET_PIN_WIDGET_CONTROL,
++ pinctl);
++ /* speaker pin */
+ pinctl = (!spec->hp_present && spec->cur_eapd) ? PIN_OUT : 0;
+ snd_hda_codec_write(codec, 0x1a, 0, AC_VERB_SET_PIN_WIDGET_CONTROL,
+ pinctl);
diff --git a/patches.xen/xen3-auto-arch-x86.diff b/patches.xen/xen3-auto-arch-x86.diff
index 94f3f7b0db..158e973091 100644
--- a/patches.xen/xen3-auto-arch-x86.diff
+++ b/patches.xen/xen3-auto-arch-x86.diff
@@ -9,8 +9,29 @@ take the forward porting patches:
2.6.26/arch/x86/kernel/crash.c
2.6.30/arch/x86/kernel/acpi/boot.c
---- head-2010-01-04.orig/arch/x86/Makefile 2010-01-04 15:44:42.000000000 +0100
-+++ head-2010-01-04/arch/x86/Makefile 2009-12-04 10:44:45.000000000 +0100
+---
+ arch/x86/Makefile | 24 +++++++++++++++++++++++-
+ arch/x86/boot/Makefile | 9 +++++++++
+ arch/x86/include/asm/acpi.h | 27 +++++++++++++++++++++++++++
+ arch/x86/include/asm/apic.h | 2 ++
+ arch/x86/include/asm/kexec.h | 13 +++++++++++++
+ arch/x86/kernel/Makefile | 9 +++++++++
+ arch/x86/kernel/acpi/Makefile | 4 ++++
+ arch/x86/kernel/acpi/processor.c | 11 +++++++++++
+ arch/x86/kernel/cpu/mcheck/Makefile | 1 +
+ arch/x86/kernel/cpu/mcheck/mce.c | 21 +++++++++++++++++++++
+ arch/x86/kernel/cpu/mtrr/Makefile | 1 +
+ arch/x86/lib/Makefile | 2 ++
+ arch/x86/mm/Makefile | 2 ++
+ arch/x86/oprofile/Makefile | 7 +++++++
+ arch/x86/pci/Makefile | 3 +++
+ arch/x86/power/cpu.c | 4 ++++
+ 16 files changed, 139 insertions(+), 1 deletion(-)
+
+Index: linux-2.6.32-master/arch/x86/Makefile
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/Makefile
++++ linux-2.6.32-master/arch/x86/Makefile
@@ -111,6 +111,10 @@ endif
# prevent gcc from generating any FP code by mistake
KBUILD_CFLAGS += $(call cc-option,-mno-sse -mno-mmx -mno-sse2 -mno-3dnow,)
@@ -58,8 +79,10 @@ take the forward porting patches:
PHONY += install
install:
---- head-2010-01-04.orig/arch/x86/boot/Makefile 2010-01-04 15:44:42.000000000 +0100
-+++ head-2010-01-04/arch/x86/boot/Makefile 2009-12-04 10:44:45.000000000 +0100
+Index: linux-2.6.32-master/arch/x86/boot/Makefile
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/boot/Makefile
++++ linux-2.6.32-master/arch/x86/boot/Makefile
@@ -23,6 +23,7 @@ ROOT_DEV := CURRENT
SVGA_MODE := -DSVGA_MODE=NORMAL_VGA
@@ -83,8 +106,10 @@ take the forward porting patches:
install:
sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $(obj)/bzImage \
System.map "$(INSTALL_PATH)"
---- head-2010-01-04.orig/arch/x86/kernel/Makefile 2010-01-04 15:44:42.000000000 +0100
-+++ head-2010-01-04/arch/x86/kernel/Makefile 2009-12-04 10:44:45.000000000 +0100
+Index: linux-2.6.32-master/arch/x86/kernel/Makefile
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/kernel/Makefile
++++ linux-2.6.32-master/arch/x86/kernel/Makefile
@@ -117,9 +117,12 @@ obj-$(CONFIG_X86_CHECK_BIOS_CORRUPTION)
obj-$(CONFIG_SWIOTLB) += pci-swiotlb.o
@@ -109,8 +134,10 @@ take the forward porting patches:
+
+disabled-obj-$(CONFIG_XEN) := i8259_$(BITS).o reboot.o smpboot_$(BITS).o
+%/head_$(BITS).o %/head_$(BITS).s: $(if $(CONFIG_XEN),EXTRA_AFLAGS,dummy) :=
---- head-2010-01-04.orig/arch/x86/kernel/acpi/Makefile 2010-01-04 15:44:42.000000000 +0100
-+++ head-2010-01-04/arch/x86/kernel/acpi/Makefile 2009-12-04 10:44:45.000000000 +0100
+Index: linux-2.6.32-master/arch/x86/kernel/acpi/Makefile
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/kernel/acpi/Makefile
++++ linux-2.6.32-master/arch/x86/kernel/acpi/Makefile
@@ -5,6 +5,9 @@ obj-$(CONFIG_ACPI_SLEEP) += sleep.o wake
ifneq ($(CONFIG_ACPI_PROCESSOR),)
@@ -126,8 +153,10 @@ take the forward porting patches:
$(Q)$(MAKE) $(build)=$(obj)/realmode
+disabled-obj-$(CONFIG_XEN) := cstate.o wakeup_$(BITS).o
---- head-2010-01-04.orig/arch/x86/kernel/acpi/processor.c 2010-01-04 15:44:42.000000000 +0100
-+++ head-2010-01-04/arch/x86/kernel/acpi/processor.c 2009-12-04 10:44:45.000000000 +0100
+Index: linux-2.6.32-master/arch/x86/kernel/acpi/processor.c
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/kernel/acpi/processor.c
++++ linux-2.6.32-master/arch/x86/kernel/acpi/processor.c
@@ -76,7 +76,18 @@ static void init_intel_pdc(struct acpi_p
/* Initialize _PDC data based on the CPU vendor */
void arch_acpi_processor_init_pdc(struct acpi_processor *pr)
@@ -147,19 +176,23 @@ take the forward porting patches:
pr->pdc = NULL;
if (c->x86_vendor == X86_VENDOR_INTEL ||
---- head-2010-01-04.orig/arch/x86/kernel/cpu/mcheck/Makefile 2010-01-04 15:44:42.000000000 +0100
-+++ head-2010-01-04/arch/x86/kernel/cpu/mcheck/Makefile 2009-12-04 10:44:45.000000000 +0100
-@@ -3,6 +3,7 @@ obj-y = mce.o mce-severity.o
- obj-$(CONFIG_X86_ANCIENT_MCE) += winchip.o p5.o
+Index: linux-2.6.32-master/arch/x86/kernel/cpu/mcheck/Makefile
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/kernel/cpu/mcheck/Makefile
++++ linux-2.6.32-master/arch/x86/kernel/cpu/mcheck/Makefile
+@@ -4,6 +4,7 @@ obj-$(CONFIG_X86_ANCIENT_MCE) += winchip
obj-$(CONFIG_X86_MCE_INTEL) += mce_intel.o
+ obj-$(CONFIG_X86_MCE_XEON75XX) += mce-xeon75xx.o
obj-$(CONFIG_X86_MCE_AMD) += mce_amd.o
+obj-$(CONFIG_X86_XEN_MCE) += mce_dom0.o
obj-$(CONFIG_X86_MCE_THRESHOLD) += threshold.o
obj-$(CONFIG_X86_MCE_INJECT) += mce-inject.o
---- head-2010-01-04.orig/arch/x86/kernel/cpu/mcheck/mce.c 2010-01-04 15:44:42.000000000 +0100
-+++ head-2010-01-04/arch/x86/kernel/cpu/mcheck/mce.c 2009-12-04 10:44:45.000000000 +0100
-@@ -1116,8 +1116,15 @@ void mce_log_therm_throt_event(__u64 sta
+Index: linux-2.6.32-master/arch/x86/kernel/cpu/mcheck/mce.c
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/kernel/cpu/mcheck/mce.c
++++ linux-2.6.32-master/arch/x86/kernel/cpu/mcheck/mce.c
+@@ -1127,8 +1127,15 @@ void mce_log_therm_throt_event(__u64 sta
* Periodic polling timer for "silent" machine check errors. If the
* poller finds an MCE, poll 2x faster. When the poller finds no more
* errors, poll 2x slower (up to check_interval seconds).
@@ -175,7 +208,7 @@ take the forward porting patches:
static DEFINE_PER_CPU(int, mce_next_interval); /* in jiffies */
static DEFINE_PER_CPU(struct timer_list, mce_timer);
-@@ -1282,6 +1289,7 @@ static int __cpuinit mce_cpu_quirks(stru
+@@ -1293,6 +1300,7 @@ static int __cpuinit mce_cpu_quirks(stru
/* This should be disabled by the BIOS, but isn't always */
if (c->x86_vendor == X86_VENDOR_AMD) {
@@ -183,7 +216,7 @@ take the forward porting patches:
if (c->x86 == 15 && banks > 4) {
/*
* disable GART TBL walk error reporting, which
-@@ -1290,6 +1298,7 @@ static int __cpuinit mce_cpu_quirks(stru
+@@ -1301,6 +1309,7 @@ static int __cpuinit mce_cpu_quirks(stru
*/
clear_bit(10, (unsigned long *)&mce_banks[4].ctl);
}
@@ -191,7 +224,7 @@ take the forward porting patches:
if (c->x86 <= 17 && mce_bootlog < 0) {
/*
* Lots of broken BIOS around that don't clear them
-@@ -1357,6 +1366,7 @@ static void __cpuinit mce_ancient_init(s
+@@ -1368,6 +1377,7 @@ static void __cpuinit mce_ancient_init(s
static void mce_cpu_features(struct cpuinfo_x86 *c)
{
@@ -199,7 +232,7 @@ take the forward porting patches:
switch (c->x86_vendor) {
case X86_VENDOR_INTEL:
mce_intel_feature_init(c);
-@@ -1367,6 +1377,7 @@ static void mce_cpu_features(struct cpui
+@@ -1378,6 +1388,7 @@ static void mce_cpu_features(struct cpui
default:
break;
}
@@ -207,7 +240,7 @@ take the forward porting patches:
}
static void mce_init_timer(void)
-@@ -2053,6 +2064,16 @@ static __init int mce_init_device(void)
+@@ -2064,6 +2075,16 @@ static __init int mce_init_device(void)
register_hotcpu_notifier(&mce_cpu_notifier);
misc_register(&mce_log_device);
@@ -224,23 +257,29 @@ take the forward porting patches:
return err;
}
---- head-2010-01-04.orig/arch/x86/kernel/cpu/mtrr/Makefile 2010-01-04 15:44:42.000000000 +0100
-+++ head-2010-01-04/arch/x86/kernel/cpu/mtrr/Makefile 2009-12-04 10:44:45.000000000 +0100
+Index: linux-2.6.32-master/arch/x86/kernel/cpu/mtrr/Makefile
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/kernel/cpu/mtrr/Makefile
++++ linux-2.6.32-master/arch/x86/kernel/cpu/mtrr/Makefile
@@ -1,3 +1,4 @@
obj-y := main.o if.o generic.o state.o cleanup.o
obj-$(CONFIG_X86_32) += amd.o cyrix.o centaur.o
+obj-$(CONFIG_XEN) := main.o if.o
---- head-2010-01-04.orig/arch/x86/lib/Makefile 2010-01-04 15:44:42.000000000 +0100
-+++ head-2010-01-04/arch/x86/lib/Makefile 2009-12-04 10:44:45.000000000 +0100
+Index: linux-2.6.32-master/arch/x86/lib/Makefile
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/lib/Makefile
++++ linux-2.6.32-master/arch/x86/lib/Makefile
@@ -27,3 +27,5 @@ else
lib-y += memmove_64.o memset_64.o
lib-y += copy_user_64.o rwlock_64.o copy_user_nocache_64.o
endif
+
+lib-$(CONFIG_XEN_SCRUB_PAGES) += scrub.o
---- head-2010-01-04.orig/arch/x86/mm/Makefile 2010-01-04 15:44:42.000000000 +0100
-+++ head-2010-01-04/arch/x86/mm/Makefile 2009-12-04 10:44:45.000000000 +0100
+Index: linux-2.6.32-master/arch/x86/mm/Makefile
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/mm/Makefile
++++ linux-2.6.32-master/arch/x86/mm/Makefile
@@ -25,4 +25,6 @@ obj-$(CONFIG_NUMA) += numa.o numa_$(BIT
obj-$(CONFIG_K8_NUMA) += k8topology_64.o
obj-$(CONFIG_ACPI_NUMA) += srat_$(BITS).o
@@ -248,8 +287,10 @@ take the forward porting patches:
+obj-$(CONFIG_XEN) += hypervisor.o
+
obj-$(CONFIG_MEMTEST) += memtest.o
---- head-2010-01-04.orig/arch/x86/oprofile/Makefile 2010-01-04 15:44:42.000000000 +0100
-+++ head-2010-01-04/arch/x86/oprofile/Makefile 2009-12-04 10:44:45.000000000 +0100
+Index: linux-2.6.32-master/arch/x86/oprofile/Makefile
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/oprofile/Makefile
++++ linux-2.6.32-master/arch/x86/oprofile/Makefile
@@ -6,7 +6,14 @@ DRIVER_OBJS = $(addprefix ../../../drive
oprofilefs.o oprofile_stats.o \
timer_int.o )
@@ -265,8 +306,10 @@ take the forward porting patches:
op_model_ppro.o op_model_p4.o
oprofile-$(CONFIG_X86_IO_APIC) += nmi_timer_int.o
+endif
---- head-2010-01-04.orig/arch/x86/pci/Makefile 2010-01-04 15:44:42.000000000 +0100
-+++ head-2010-01-04/arch/x86/pci/Makefile 2009-12-04 10:44:45.000000000 +0100
+Index: linux-2.6.32-master/arch/x86/pci/Makefile
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/pci/Makefile
++++ linux-2.6.32-master/arch/x86/pci/Makefile
@@ -4,6 +4,9 @@ obj-$(CONFIG_PCI_BIOS) += pcbios.o
obj-$(CONFIG_PCI_MMCONFIG) += mmconfig_$(BITS).o direct.o mmconfig-shared.o
obj-$(CONFIG_PCI_DIRECT) += direct.o
@@ -277,8 +320,10 @@ take the forward porting patches:
obj-y += fixup.o
obj-$(CONFIG_ACPI) += acpi.o
---- head-2010-01-04.orig/arch/x86/power/cpu.c 2010-01-04 15:44:42.000000000 +0100
-+++ head-2010-01-04/arch/x86/power/cpu.c 2009-12-04 10:44:45.000000000 +0100
+Index: linux-2.6.32-master/arch/x86/power/cpu.c
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/power/cpu.c
++++ linux-2.6.32-master/arch/x86/power/cpu.c
@@ -125,6 +125,7 @@ static void do_fpu_end(void)
static void fix_processor_context(void)
@@ -298,8 +343,10 @@ take the forward porting patches:
syscall_init(); /* This sets MSR_*STAR and related */
#endif
load_TR_desc(); /* This does ltr */
---- head-2010-01-04.orig/arch/x86/include/asm/acpi.h 2010-01-04 15:44:42.000000000 +0100
-+++ head-2010-01-04/arch/x86/include/asm/acpi.h 2009-12-04 10:44:45.000000000 +0100
+Index: linux-2.6.32-master/arch/x86/include/asm/acpi.h
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/include/asm/acpi.h
++++ linux-2.6.32-master/arch/x86/include/asm/acpi.h
@@ -30,6 +30,10 @@
#include <asm/mmu.h>
#include <asm/mpspec.h>
@@ -349,8 +396,10 @@ take the forward porting patches:
struct bootnode;
---- head-2010-01-04.orig/arch/x86/include/asm/apic.h 2010-01-04 15:44:42.000000000 +0100
-+++ head-2010-01-04/arch/x86/include/asm/apic.h 2009-12-04 10:44:45.000000000 +0100
+Index: linux-2.6.32-master/arch/x86/include/asm/apic.h
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/include/asm/apic.h
++++ linux-2.6.32-master/arch/x86/include/asm/apic.h
@@ -15,7 +15,9 @@
#include <asm/system.h>
#include <asm/msr.h>
@@ -361,8 +410,10 @@ take the forward porting patches:
/*
* Debugging macros
---- head-2010-01-04.orig/arch/x86/include/asm/kexec.h 2010-01-04 15:44:42.000000000 +0100
-+++ head-2010-01-04/arch/x86/include/asm/kexec.h 2009-12-04 10:44:45.000000000 +0100
+Index: linux-2.6.32-master/arch/x86/include/asm/kexec.h
+===================================================================
+--- linux-2.6.32-master.orig/arch/x86/include/asm/kexec.h
++++ linux-2.6.32-master/arch/x86/include/asm/kexec.h
@@ -163,6 +163,19 @@ struct kimage_arch {
};
#endif
diff --git a/series.conf b/series.conf
index 34f932b147..e760c505af 100644
--- a/series.conf
+++ b/series.conf
@@ -213,6 +213,7 @@
patches.arch/x86-revert-apic-Use-logical-flat-on-intel-with-8-or-fewer-logical-cpus.patch
patches.arch/x86-apic-use-logical-flat-for-systems-with-8-or-fewer-logical-cpus.patch
+ patches.arch/x86_enable_tsc_sync_check_again.patch
########################################################
# x86 MCE/MCA (Machine Check Error/Architecture) extensions
########################################################
@@ -226,6 +227,12 @@
patches.arch/x86_mce_madvise-locking
patches.arch/x86_mce_page-offline
+ # Needed on Boxboro/Westmere-EX to correctly decode the physical
+ # address of correctable errors
+ patches.arch/x86_mce_intel_decode_physical_address.patch
+ patches.arch/x86_mce_intel_decode_physical_address_rename_fix.patch
+ patches.arch/x86_mce_intel_decode_physical_address_compile_fix.patch
+
########################################################
# x86_64/4096CPUS - from SGI
########################################################
@@ -466,7 +473,7 @@
patches.arch/acpi_srat-pxm-rev-store.patch
patches.arch/acpi_srat-pxm-rev-ia64.patch
patches.arch/acpi_srat-pxm-rev-x86-64.patch
- patches.arch/x86_node_hotplug_parse_srat_fix.patch
+ patches.arch/x86_node_hotplug_parse_srat_fix_2nd_ver.patch
########################################################
# CPUFREQ
@@ -1069,6 +1076,8 @@
patches.drivers/alsa-sp1-hda-52-hdmi-sticky-stream-tag
patches.drivers/alsa-sp1-hda-55-alc259-hp-pin-fix
patches.drivers/alsa-sp1-hda-56-realtek-eapd-fix
+ patches.drivers/alsa-sp1-hda-57-cx5051-toshiba-quirk
+ patches.drivers/alsa-sp1-hda-58-cx5051-lenovo-mute-fix
########################################################
# Other driver fixes
diff --git a/supported.conf b/supported.conf
index 4232db75f1..97ad46f0e3 100644
--- a/supported.conf
+++ b/supported.conf
@@ -72,8 +72,9 @@
kernel/arch/x86/kvm/kvm
kernel/arch/x86/kvm/kvm-amd
kernel/arch/x86/kvm/kvm-intel
- kernel/arch/x86/oprofile/oprofile
kernel/arch/x86/oprofile/oprofile # OProfile system profiler
+ kernel/arch/x86/kernel/cpu/mcheck/mce-inject # Needed for Intel MCE/RAS testing
+ mm/hwpoison-inject # Needed for Intel MCE/RAS testing
kernel/crypto/aead
kernel/crypto/aes_generic
kernel/crypto/anubis