From: Greg Kroah-Hartman Date: Tue, 15 Feb 2011 14:38:31 +0000 (-0800) Subject: .36 patches X-Git-Tag: v2.6.36.4~34 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=35ac2772bdd7fb51c42eb17dba3b5e49f0db0bf7;p=thirdparty%2Fkernel%2Fstable-queue.git .36 patches --- diff --git a/queue-2.6.36/arm-initrd-disable-initrd-if-passed-address-overlaps-reserved-region.patch b/queue-2.6.36/arm-initrd-disable-initrd-if-passed-address-overlaps-reserved-region.patch new file mode 100644 index 00000000000..8daa56d7210 --- /dev/null +++ b/queue-2.6.36/arm-initrd-disable-initrd-if-passed-address-overlaps-reserved-region.patch @@ -0,0 +1,38 @@ +From b0a2679d27408d97ce31e5f800b44227d3388b84 Mon Sep 17 00:00:00 2001 +From: Russell King +Date: Sun, 30 Jan 2011 11:21:05 +0000 +Subject: ARM: initrd: disable initrd if passed address overlaps reserved region + +From: Russell King + +commit b0a2679d27408d97ce31e5f800b44227d3388b84 upstream. + +Disable the initrd if the passed address already overlaps the reserved +region. This avoids oopses on Netwinders when NeTTrom tells the kernel +that an initrd is located at mem+4MB, but this overlaps the BSS, +resulting in the kernels in-use BSS being freed. + +This should be applied to v2.6.37-stable. + +Signed-off-by: Russell King +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/mm/init.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/arch/arm/mm/init.c ++++ b/arch/arm/mm/init.c +@@ -282,6 +282,12 @@ void __init arm_memblock_init(struct mem + memblock_reserve(__pa(_stext), _end - _stext); + #endif + #ifdef CONFIG_BLK_DEV_INITRD ++ if (phys_initrd_size && ++ memblock_is_region_reserved(phys_initrd_start, phys_initrd_size)) { ++ pr_err("INITRD: 0x%08lx+0x%08lx overlaps in-use memory region - disabling initrd\n", ++ phys_initrd_start, phys_initrd_size); ++ phys_initrd_start = phys_initrd_size = 0; ++ } + if (phys_initrd_size) { + memblock_reserve(phys_initrd_start, phys_initrd_size); + diff --git a/queue-2.6.36/asoc-create-an-aif1adcdat-signal-widget-to-match-aif2.patch b/queue-2.6.36/asoc-create-an-aif1adcdat-signal-widget-to-match-aif2.patch new file mode 100644 index 00000000000..d8c63064469 --- /dev/null +++ b/queue-2.6.36/asoc-create-an-aif1adcdat-signal-widget-to-match-aif2.patch @@ -0,0 +1,66 @@ +From 7f94de483f4e37e14d646ad6e85a3c82f66fb487 Mon Sep 17 00:00:00 2001 +From: Mark Brown +Date: Thu, 3 Feb 2011 16:27:34 +0000 +Subject: ASoC: Create an AIF1ADCDAT signal widget to match AIF2 + +From: Mark Brown + +commit 7f94de483f4e37e14d646ad6e85a3c82f66fb487 upstream. + +Due to the different routing for AIF1 and AIF2 we weren't using a +single widget to represent the ADCDAT signal. For consistency add +one. + +Signed-off-by: Mark Brown +Acked-by: Liam Girdwood +Signed-off-by: Greg Kroah-Hartman + +--- + sound/soc/codecs/wm8994.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +--- a/sound/soc/codecs/wm8994.c ++++ b/sound/soc/codecs/wm8994.c +@@ -2519,18 +2519,18 @@ SND_SOC_DAPM_SUPPLY("DSPINTCLK", WM8994_ + SND_SOC_DAPM_SUPPLY("AIF1CLK", WM8994_AIF1_CLOCKING_1, 0, 0, NULL, 0), + SND_SOC_DAPM_SUPPLY("AIF2CLK", WM8994_AIF2_CLOCKING_1, 0, 0, NULL, 0), + +-SND_SOC_DAPM_AIF_OUT("AIF1ADC1L", "AIF1 Capture", ++SND_SOC_DAPM_AIF_OUT("AIF1ADC1L", NULL, + 0, WM8994_POWER_MANAGEMENT_4, 9, 0), +-SND_SOC_DAPM_AIF_OUT("AIF1ADC1R", "AIF1 Capture", ++SND_SOC_DAPM_AIF_OUT("AIF1ADC1R", NULL, + 0, WM8994_POWER_MANAGEMENT_4, 8, 0), + SND_SOC_DAPM_AIF_IN("AIF1DAC1L", NULL, 0, + WM8994_POWER_MANAGEMENT_5, 9, 0), + SND_SOC_DAPM_AIF_IN("AIF1DAC1R", NULL, 0, + WM8994_POWER_MANAGEMENT_5, 8, 0), + +-SND_SOC_DAPM_AIF_OUT("AIF1ADC2L", "AIF1 Capture", ++SND_SOC_DAPM_AIF_OUT("AIF1ADC2L", NULL, + 0, WM8994_POWER_MANAGEMENT_4, 11, 0), +-SND_SOC_DAPM_AIF_OUT("AIF1ADC2R", "AIF1 Capture", ++SND_SOC_DAPM_AIF_OUT("AIF1ADC2R", NULL, + 0, WM8994_POWER_MANAGEMENT_4, 10, 0), + SND_SOC_DAPM_AIF_IN("AIF1DAC2L", NULL, 0, + WM8994_POWER_MANAGEMENT_5, 11, 0), +@@ -2571,6 +2571,7 @@ SND_SOC_DAPM_AIF_IN("AIF2DACR", NULL, 0, + + SND_SOC_DAPM_AIF_IN("AIF1DACDAT", "AIF1 Playback", 0, SND_SOC_NOPM, 0, 0), + SND_SOC_DAPM_AIF_IN("AIF2DACDAT", "AIF2 Playback", 0, SND_SOC_NOPM, 0, 0), ++SND_SOC_DAPM_AIF_OUT("AIF1ADCDAT", "AIF1 Capture", 0, SND_SOC_NOPM, 0, 0), + SND_SOC_DAPM_AIF_OUT("AIF2ADCDAT", "AIF2 Capture", 0, SND_SOC_NOPM, 0, 0), + + SND_SOC_DAPM_MUX("AIF1DAC Mux", SND_SOC_NOPM, 0, 0, &aif1dac_mux), +@@ -2766,6 +2767,11 @@ static const struct snd_soc_dapm_route i + { "AIF2DAC2R Mixer", "Left Sidetone Switch", "Left Sidetone" }, + { "AIF2DAC2R Mixer", "Right Sidetone Switch", "Right Sidetone" }, + ++ { "AIF1ADCDAT", NULL, "AIF1ADC1L" }, ++ { "AIF1ADCDAT", NULL, "AIF1ADC1R" }, ++ { "AIF1ADCDAT", NULL, "AIF1ADC2L" }, ++ { "AIF1ADCDAT", NULL, "AIF1ADC2R" }, ++ + { "AIF2ADCDAT", NULL, "AIF2ADC Mux" }, + + /* AIF3 output */ diff --git a/queue-2.6.36/asoc-handle-low-measured-dc-offsets-for-wm_hubs-devices.patch b/queue-2.6.36/asoc-handle-low-measured-dc-offsets-for-wm_hubs-devices.patch new file mode 100644 index 00000000000..2b0e95f9cd8 --- /dev/null +++ b/queue-2.6.36/asoc-handle-low-measured-dc-offsets-for-wm_hubs-devices.patch @@ -0,0 +1,53 @@ +From 20a4e7fc7e213365ea3771d7bf1e10a6bab853be Mon Sep 17 00:00:00 2001 +From: Mark Brown +Date: Fri, 21 Jan 2011 12:47:33 +0000 +Subject: ASoC: Handle low measured DC offsets for wm_hubs devices + +From: Mark Brown + +commit 20a4e7fc7e213365ea3771d7bf1e10a6bab853be upstream. + +The DC servo codes are actually signed numbers so need to be treated as +such. + +Signed-off-by: Mark Brown +Acked-by: Liam Girdwood +Signed-off-by: Greg Kroah-Hartman + +--- + sound/soc/codecs/wm_hubs.c | 15 +++++++-------- + 1 file changed, 7 insertions(+), 8 deletions(-) + +--- a/sound/soc/codecs/wm_hubs.c ++++ b/sound/soc/codecs/wm_hubs.c +@@ -92,6 +92,7 @@ static void wait_for_dc_servo(struct snd + static void calibrate_dc_servo(struct snd_soc_codec *codec) + { + struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); ++ s8 offset; + u16 reg, reg_l, reg_r, dcs_cfg; + + /* Set for 32 series updates */ +@@ -130,16 +131,14 @@ static void calibrate_dc_servo(struct sn + dev_dbg(codec->dev, "DCS input: %x %x\n", reg_l, reg_r); + + /* HPOUT1L */ +- if (reg_l + hubs->dcs_codes > 0 && +- reg_l + hubs->dcs_codes < 0xff) +- reg_l += hubs->dcs_codes; +- dcs_cfg = reg_l << WM8993_DCS_DAC_WR_VAL_1_SHIFT; ++ offset = reg_l; ++ offset += hubs->dcs_codes; ++ dcs_cfg = (u8)offset << WM8993_DCS_DAC_WR_VAL_1_SHIFT; + + /* HPOUT1R */ +- if (reg_r + hubs->dcs_codes > 0 && +- reg_r + hubs->dcs_codes < 0xff) +- reg_r += hubs->dcs_codes; +- dcs_cfg |= reg_r; ++ offset = reg_r; ++ offset += hubs->dcs_codes; ++ dcs_cfg |= (u8)offset; + + dev_dbg(codec->dev, "DCS result: %x\n", dcs_cfg); + diff --git a/queue-2.6.36/asoc-wm8994-fix-wrong-value-in-tristate-function.patch b/queue-2.6.36/asoc-wm8994-fix-wrong-value-in-tristate-function.patch new file mode 100644 index 00000000000..74b3b97581d --- /dev/null +++ b/queue-2.6.36/asoc-wm8994-fix-wrong-value-in-tristate-function.patch @@ -0,0 +1,32 @@ +From 78b3fb46753872fc79bffecc8d50355a8622b39b Mon Sep 17 00:00:00 2001 +From: Qiao Zhou +Date: Wed, 19 Jan 2011 19:10:47 +0800 +Subject: ASoC: WM8994: fix wrong value in tristate function + +From: Qiao Zhou + +commit 78b3fb46753872fc79bffecc8d50355a8622b39b upstream. + +fix wrong value in wm8994_set_tristate func. when updating reg bits, +it should use "value", not "reg". + +Signed-off-by: Qiao Zhou +Acked-by: Liam Girdwood +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + sound/soc/codecs/wm8994.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/sound/soc/codecs/wm8994.c ++++ b/sound/soc/codecs/wm8994.c +@@ -3486,7 +3486,7 @@ static int wm8994_set_tristate(struct sn + else + val = 0; + +- return snd_soc_update_bits(codec, reg, mask, reg); ++ return snd_soc_update_bits(codec, reg, mask, val); + } + + #define WM8994_RATES SNDRV_PCM_RATE_8000_96000 diff --git a/queue-2.6.36/avr32-use-syscall-prototypes-from-asm-generic-instead-of-arch.patch b/queue-2.6.36/avr32-use-syscall-prototypes-from-asm-generic-instead-of-arch.patch new file mode 100644 index 00000000000..2beed5055bd --- /dev/null +++ b/queue-2.6.36/avr32-use-syscall-prototypes-from-asm-generic-instead-of-arch.patch @@ -0,0 +1,43 @@ +From 664cb7142ced8b827e92e1851d1ed2cae922f225 Mon Sep 17 00:00:00 2001 +From: Hans-Christian Egtvedt +Date: Thu, 9 Dec 2010 00:19:33 +0100 +Subject: avr32: use syscall prototypes from asm-generic instead of arch + +From: Hans-Christian Egtvedt + +commit 664cb7142ced8b827e92e1851d1ed2cae922f225 upstream. + +This patch removes the redundant syscalls prototypes in the architecture +specific syscalls.h header file. These were identical with the ones in +asm-generic/syscalls.h. + +Signed-off-by: Hans-Christian Egtvedt +Reported-by: Peter Huewe +Reported-by: Sven Schnelle +Signed-off-by: Greg Kroah-Hartman + +--- + arch/avr32/include/asm/syscalls.h | 9 --------- + 1 file changed, 9 deletions(-) + +--- a/arch/avr32/include/asm/syscalls.h ++++ b/arch/avr32/include/asm/syscalls.h +@@ -16,18 +16,9 @@ + #include + + /* kernel/process.c */ +-asmlinkage int sys_fork(struct pt_regs *); + asmlinkage int sys_clone(unsigned long, unsigned long, + unsigned long, unsigned long, + struct pt_regs *); +-asmlinkage int sys_vfork(struct pt_regs *); +-asmlinkage int sys_execve(const char __user *, char __user *__user *, +- char __user *__user *, struct pt_regs *); +- +-/* kernel/signal.c */ +-asmlinkage int sys_sigaltstack(const stack_t __user *, stack_t __user *, +- struct pt_regs *); +-asmlinkage int sys_rt_sigreturn(struct pt_regs *); + + /* mm/cache.c */ + asmlinkage int sys_cacheflush(int, void __user *, size_t); diff --git a/queue-2.6.36/cpuidle-make-cpuidle_enable_device-call-poll_idle_init.patch b/queue-2.6.36/cpuidle-make-cpuidle_enable_device-call-poll_idle_init.patch new file mode 100644 index 00000000000..d63f3569b74 --- /dev/null +++ b/queue-2.6.36/cpuidle-make-cpuidle_enable_device-call-poll_idle_init.patch @@ -0,0 +1,151 @@ +From d8c216cfa57e8a579f41729cbb88c97835d9ac8d Mon Sep 17 00:00:00 2001 +From: Rafael J. Wysocki +Date: Sat, 8 Jan 2011 00:29:20 +0100 +Subject: cpuidle: Make cpuidle_enable_device() call poll_idle_init() + +From: Rafael J. Wysocki + +commit d8c216cfa57e8a579f41729cbb88c97835d9ac8d upstream. + +The following scenario is possible with the current cpuidle code and +the ACPI cpuidle driver: +(1) acpi_processor_cst_has_changed() is called, +(2) cpuidle_disable_device() is called, +(3) cpuidle_remove_state_sysfs() is called to remove the (presumably + outdated) states info from sysfs, +(3) acpi_processor_get_power_info() is called, the first entry in the + pr->power.states[] table is filled with zeros, +(4) acpi_processor_setup_cpuidle() is called and it doesn't fill the + first entry in pr->power.states[], +(5) cpuidle_enable_device() is called, +(6) __cpuidle_register_device() is _not_ called, since the device has + already been registered, +(7) Consequently, poll_idle_init() is _not_ called either, +(8) cpuidle_add_state_sysfs() is called to create the sysfs attributes + for the new states and it uses the bogus first table entry from + acpi_processor_get_power_info() for creating state0. + +This problem is avoided if cpuidle_enable_device() +unconditionally calls poll_idle_init(). + +Reported-by: Len Brown +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Len Brown +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/cpuidle/cpuidle.c | 82 +++++++++++++++++++++++----------------------- + 1 file changed, 41 insertions(+), 41 deletions(-) + +--- a/drivers/cpuidle/cpuidle.c ++++ b/drivers/cpuidle/cpuidle.c +@@ -154,6 +154,45 @@ void cpuidle_resume_and_unlock(void) + + EXPORT_SYMBOL_GPL(cpuidle_resume_and_unlock); + ++#ifdef CONFIG_ARCH_HAS_CPU_RELAX ++static int poll_idle(struct cpuidle_device *dev, struct cpuidle_state *st) ++{ ++ ktime_t t1, t2; ++ s64 diff; ++ int ret; ++ ++ t1 = ktime_get(); ++ local_irq_enable(); ++ while (!need_resched()) ++ cpu_relax(); ++ ++ t2 = ktime_get(); ++ diff = ktime_to_us(ktime_sub(t2, t1)); ++ if (diff > INT_MAX) ++ diff = INT_MAX; ++ ++ ret = (int) diff; ++ return ret; ++} ++ ++static void poll_idle_init(struct cpuidle_device *dev) ++{ ++ struct cpuidle_state *state = &dev->states[0]; ++ ++ cpuidle_set_statedata(state, NULL); ++ ++ snprintf(state->name, CPUIDLE_NAME_LEN, "C0"); ++ snprintf(state->desc, CPUIDLE_DESC_LEN, "CPUIDLE CORE POLL IDLE"); ++ state->exit_latency = 0; ++ state->target_residency = 0; ++ state->power_usage = -1; ++ state->flags = CPUIDLE_FLAG_POLL; ++ state->enter = poll_idle; ++} ++#else ++static void poll_idle_init(struct cpuidle_device *dev) {} ++#endif /* CONFIG_ARCH_HAS_CPU_RELAX */ ++ + /** + * cpuidle_enable_device - enables idle PM for a CPU + * @dev: the CPU +@@ -178,6 +217,8 @@ int cpuidle_enable_device(struct cpuidle + return ret; + } + ++ poll_idle_init(dev); ++ + if ((ret = cpuidle_add_state_sysfs(dev))) + return ret; + +@@ -232,45 +273,6 @@ void cpuidle_disable_device(struct cpuid + + EXPORT_SYMBOL_GPL(cpuidle_disable_device); + +-#ifdef CONFIG_ARCH_HAS_CPU_RELAX +-static int poll_idle(struct cpuidle_device *dev, struct cpuidle_state *st) +-{ +- ktime_t t1, t2; +- s64 diff; +- int ret; +- +- t1 = ktime_get(); +- local_irq_enable(); +- while (!need_resched()) +- cpu_relax(); +- +- t2 = ktime_get(); +- diff = ktime_to_us(ktime_sub(t2, t1)); +- if (diff > INT_MAX) +- diff = INT_MAX; +- +- ret = (int) diff; +- return ret; +-} +- +-static void poll_idle_init(struct cpuidle_device *dev) +-{ +- struct cpuidle_state *state = &dev->states[0]; +- +- cpuidle_set_statedata(state, NULL); +- +- snprintf(state->name, CPUIDLE_NAME_LEN, "C0"); +- snprintf(state->desc, CPUIDLE_DESC_LEN, "CPUIDLE CORE POLL IDLE"); +- state->exit_latency = 0; +- state->target_residency = 0; +- state->power_usage = -1; +- state->flags = CPUIDLE_FLAG_POLL; +- state->enter = poll_idle; +-} +-#else +-static void poll_idle_init(struct cpuidle_device *dev) {} +-#endif /* CONFIG_ARCH_HAS_CPU_RELAX */ +- + /** + * __cpuidle_register_device - internal register function called before register + * and enable routines +@@ -291,8 +293,6 @@ static int __cpuidle_register_device(str + + init_completion(&dev->kobj_unregister); + +- poll_idle_init(dev); +- + /* + * cpuidle driver should set the dev->power_specified bit + * before registering the device if the driver provides diff --git a/queue-2.6.36/drivers-update-to-pl2303-usb-serial-to-support-motorola-cables.patch b/queue-2.6.36/drivers-update-to-pl2303-usb-serial-to-support-motorola-cables.patch new file mode 100644 index 00000000000..868155ba804 --- /dev/null +++ b/queue-2.6.36/drivers-update-to-pl2303-usb-serial-to-support-motorola-cables.patch @@ -0,0 +1,43 @@ +From 96a3e79edff6f41b0f115a82f1a39d66218077a7 Mon Sep 17 00:00:00 2001 +From: Dario Lombardo +Date: Fri, 21 Jan 2011 15:35:19 +0100 +Subject: drivers: update to pl2303 usb-serial to support Motorola cables + +From: Dario Lombardo + +commit 96a3e79edff6f41b0f115a82f1a39d66218077a7 upstream. + +Added 0x0307 device id to support Motorola cables to the pl2303 usb +serial driver. This cable has a modified chip that is a pl2303, but +declares itself as 0307. Fixed by adding the right device id to the +supported devices list, assigning it the code labeled +PL2303_PRODUCT_ID_MOTOROLA. + +Signed-off-by: Dario Lombardo +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/pl2303.c | 1 + + drivers/usb/serial/pl2303.h | 1 + + 2 files changed, 2 insertions(+) + +--- a/drivers/usb/serial/pl2303.c ++++ b/drivers/usb/serial/pl2303.c +@@ -50,6 +50,7 @@ static const struct usb_device_id id_tab + { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MMX) }, + { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GPRS) }, + { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_HCR331) }, ++ { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MOTOROLA) }, + { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) }, + { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) }, + { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) }, +--- a/drivers/usb/serial/pl2303.h ++++ b/drivers/usb/serial/pl2303.h +@@ -21,6 +21,7 @@ + #define PL2303_PRODUCT_ID_MMX 0x0612 + #define PL2303_PRODUCT_ID_GPRS 0x0609 + #define PL2303_PRODUCT_ID_HCR331 0x331a ++#define PL2303_PRODUCT_ID_MOTOROLA 0x0307 + + #define ATEN_VENDOR_ID 0x0557 + #define ATEN_VENDOR_ID2 0x0547 diff --git a/queue-2.6.36/ds2760_battery-fix-calculation-of-time_to_empty_now.patch b/queue-2.6.36/ds2760_battery-fix-calculation-of-time_to_empty_now.patch new file mode 100644 index 00000000000..a7fe4c25bc7 --- /dev/null +++ b/queue-2.6.36/ds2760_battery-fix-calculation-of-time_to_empty_now.patch @@ -0,0 +1,38 @@ +From 86af95039b69a90db15294eb1f9c147f1df0a8ea Mon Sep 17 00:00:00 2001 +From: Sven Neumann +Date: Fri, 12 Nov 2010 11:36:22 +0100 +Subject: ds2760_battery: Fix calculation of time_to_empty_now + +From: Sven Neumann + +commit 86af95039b69a90db15294eb1f9c147f1df0a8ea upstream. + +A check against division by zero was modified in commit b0525b48. +Since this change time_to_empty_now is always reported as zero +while the battery is discharging and as a negative value while +the battery is charging. This is because current is negative while +the battery is discharging. + +Fix the check introduced by commit b0525b48 so that time_to_empty_now +is reported correctly during discharge and as zero while charging. + +Signed-off-by: Sven Neumann +Acked-by: Daniel Mack +Signed-off-by: Anton Vorontsov +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/power/ds2760_battery.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/power/ds2760_battery.c ++++ b/drivers/power/ds2760_battery.c +@@ -212,7 +212,7 @@ static int ds2760_battery_read_status(st + if (di->rem_capacity > 100) + di->rem_capacity = 100; + +- if (di->current_uA >= 100L) ++ if (di->current_uA < -100L) + di->life_sec = -((di->accum_current_uAh - di->empty_uAh) * 36L) + / (di->current_uA / 100L); + else diff --git a/queue-2.6.36/fix-jiffy-calculations-in-calibrate_delay_direct-to-handle-overflow.patch b/queue-2.6.36/fix-jiffy-calculations-in-calibrate_delay_direct-to-handle-overflow.patch new file mode 100644 index 00000000000..c9be912e3c7 --- /dev/null +++ b/queue-2.6.36/fix-jiffy-calculations-in-calibrate_delay_direct-to-handle-overflow.patch @@ -0,0 +1,46 @@ +From 70a062286b9dfcbd24d2e11601aecfead5cf709a Mon Sep 17 00:00:00 2001 +From: Tim Deegan +Date: Thu, 10 Feb 2011 08:50:41 +0000 +Subject: fix jiffy calculations in calibrate_delay_direct to handle overflow + +From: Tim Deegan + +commit 70a062286b9dfcbd24d2e11601aecfead5cf709a upstream. + +Fixes a hang when booting as dom0 under Xen, when jiffies can be +quite large by the time the kernel init gets this far. + +Signed-off-by: Tim Deegan +[jbeulich@novell.com: !time_after() -> time_before_eq() as suggested by Jiri Slaby] +Signed-off-by: Jan Beulich +Cc: Jiri Slaby +Cc: Jeremy Fitzhardinge +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + init/calibrate.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/init/calibrate.c ++++ b/init/calibrate.c +@@ -66,7 +66,7 @@ static unsigned long __cpuinit calibrate + pre_start = 0; + read_current_timer(&start); + start_jiffies = jiffies; +- while (jiffies <= (start_jiffies + 1)) { ++ while (time_before_eq(jiffies, start_jiffies + 1)) { + pre_start = start; + read_current_timer(&start); + } +@@ -74,8 +74,8 @@ static unsigned long __cpuinit calibrate + + pre_end = 0; + end = post_start; +- while (jiffies <= +- (start_jiffies + 1 + DELAY_CALIBRATION_TICKS)) { ++ while (time_before_eq(jiffies, start_jiffies + 1 + ++ DELAY_CALIBRATION_TICKS)) { + pre_end = end; + read_current_timer(&end); + } diff --git a/queue-2.6.36/fix-prlimit64-for-suid-sgid-processes.patch b/queue-2.6.36/fix-prlimit64-for-suid-sgid-processes.patch new file mode 100644 index 00000000000..e63a0e6d4f2 --- /dev/null +++ b/queue-2.6.36/fix-prlimit64-for-suid-sgid-processes.patch @@ -0,0 +1,35 @@ +From aa5bd67dcfdf9af34c7fa36ebc87d4e1f7e91873 Mon Sep 17 00:00:00 2001 +From: Kacper Kornet +Date: Sat, 29 Jan 2011 00:21:04 +0100 +Subject: Fix prlimit64 for suid/sgid processes + +From: Kacper Kornet + +commit aa5bd67dcfdf9af34c7fa36ebc87d4e1f7e91873 upstream. + +Since check_prlimit_permission always fails in the case of SUID/GUID +processes, such processes are not able to read or set their own limits. +This commit changes this by assuming that process can always read/change +its own limits. + +Signed-off-by: Kacper Kornet +Acked-by: Jiri Slaby +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/sys.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/kernel/sys.c ++++ b/kernel/sys.c +@@ -1377,7 +1377,8 @@ static int check_prlimit_permission(stru + const struct cred *cred = current_cred(), *tcred; + + tcred = __task_cred(task); +- if ((cred->uid != tcred->euid || ++ if (current != task && ++ (cred->uid != tcred->euid || + cred->uid != tcred->suid || + cred->uid != tcred->uid || + cred->gid != tcred->egid || diff --git a/queue-2.6.36/i2c-unregister-dummy-devices-last-on-adapter-removal.patch b/queue-2.6.36/i2c-unregister-dummy-devices-last-on-adapter-removal.patch new file mode 100644 index 00000000000..1b6bc4e2d51 --- /dev/null +++ b/queue-2.6.36/i2c-unregister-dummy-devices-last-on-adapter-removal.patch @@ -0,0 +1,52 @@ +From 5219bf884b6e2b54e734ca1799b6f0014bb2b4b7 Mon Sep 17 00:00:00 2001 +From: Jean Delvare +Date: Fri, 14 Jan 2011 22:03:49 +0100 +Subject: i2c: Unregister dummy devices last on adapter removal + +From: Jean Delvare + +commit 5219bf884b6e2b54e734ca1799b6f0014bb2b4b7 upstream. + +Remove real devices first and dummy devices last. This gives device +driver which instantiated dummy devices themselves a chance to clean +them up before we do. + +Signed-off-by: Jean Delvare +Tested-by: Hans Verkuil +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/i2c/i2c-core.c | 14 +++++++++++++- + 1 file changed, 13 insertions(+), 1 deletion(-) + +--- a/drivers/i2c/i2c-core.c ++++ b/drivers/i2c/i2c-core.c +@@ -1005,6 +1005,14 @@ static int i2c_do_del_adapter(struct i2c + static int __unregister_client(struct device *dev, void *dummy) + { + struct i2c_client *client = i2c_verify_client(dev); ++ if (client && strcmp(client->name, "dummy")) ++ i2c_unregister_device(client); ++ return 0; ++} ++ ++static int __unregister_dummy(struct device *dev, void *dummy) ++{ ++ struct i2c_client *client = i2c_verify_client(dev); + if (client) + i2c_unregister_device(client); + return 0; +@@ -1059,8 +1067,12 @@ int i2c_del_adapter(struct i2c_adapter * + mutex_unlock(&adap->userspace_clients_lock); + + /* Detach any active clients. This can't fail, thus we do not +- checking the returned value. */ ++ * check the returned value. This is a two-pass process, because ++ * we can't remove the dummy devices during the first pass: they ++ * could have been instantiated by real devices wishing to clean ++ * them up properly, so we give them a chance to do that first. */ + res = device_for_each_child(&adap->dev, NULL, __unregister_client); ++ res = device_for_each_child(&adap->dev, NULL, __unregister_dummy); + + #ifdef CONFIG_I2C_COMPAT + class_compat_remove_link(i2c_adapter_compat_class, &adap->dev, diff --git a/queue-2.6.36/ixgbe-fix-for-82599-erratum-on-header-splitting.patch b/queue-2.6.36/ixgbe-fix-for-82599-erratum-on-header-splitting.patch new file mode 100644 index 00000000000..d882e34dc47 --- /dev/null +++ b/queue-2.6.36/ixgbe-fix-for-82599-erratum-on-header-splitting.patch @@ -0,0 +1,45 @@ +From a124339ad28389093ed15eca990d39c51c5736cc Mon Sep 17 00:00:00 2001 +From: Don Skidmore +Date: Tue, 18 Jan 2011 22:53:47 +0000 +Subject: ixgbe: fix for 82599 erratum on Header Splitting + +From: Don Skidmore + +commit a124339ad28389093ed15eca990d39c51c5736cc upstream. + +We have found a hardware erratum on 82599 hardware that can lead to +unpredictable behavior when Header Splitting mode is enabled. So +we are no longer enabling this feature on affected hardware. + +Please see the 82599 Specification Update for more information. + +Signed-off-by: Don Skidmore +Tested-by: Stephen Ko +Signed-off-by: Jeff Kirsher +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/ixgbe/ixgbe_main.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +--- a/drivers/net/ixgbe/ixgbe_main.c ++++ b/drivers/net/ixgbe/ixgbe_main.c +@@ -2651,9 +2651,16 @@ static void ixgbe_configure_rx(struct ix + int rx_buf_len; + + /* Decide whether to use packet split mode or not */ ++ /* On by default */ ++ adapter->flags |= IXGBE_FLAG_RX_PS_ENABLED; ++ + /* Do not use packet split if we're in SR-IOV Mode */ +- if (!adapter->num_vfs) +- adapter->flags |= IXGBE_FLAG_RX_PS_ENABLED; ++ if (adapter->num_vfs) ++ adapter->flags &= ~IXGBE_FLAG_RX_PS_ENABLED; ++ ++ /* Disable packet split due to 82599 erratum #45 */ ++ if (hw->mac.type == ixgbe_mac_82599EB) ++ adapter->flags &= ~IXGBE_FLAG_RX_PS_ENABLED; + + /* Set the RX buffer length according to the mode */ + if (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED) { diff --git a/queue-2.6.36/jz4740-battery-protect-against-concurrent-battery-readings.patch b/queue-2.6.36/jz4740-battery-protect-against-concurrent-battery-readings.patch new file mode 100644 index 00000000000..d02a08cff03 --- /dev/null +++ b/queue-2.6.36/jz4740-battery-protect-against-concurrent-battery-readings.patch @@ -0,0 +1,57 @@ +From 8ec98fe0b4ffdedce4c1caa9fb3d550f52ad1c6b Mon Sep 17 00:00:00 2001 +From: Lars-Peter Clausen +Date: Thu, 11 Nov 2010 19:00:52 +0100 +Subject: jz4740-battery: Protect against concurrent battery readings + +From: Lars-Peter Clausen + +commit 8ec98fe0b4ffdedce4c1caa9fb3d550f52ad1c6b upstream. + +We can not handle more then one ADC request at a time to the battery. +The patch adds a mutex around the ADC read code to ensure this. + +Signed-off-by: Lars-Peter Clausen +Signed-off-by: Anton Vorontsov +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/power/jz4740-battery.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +--- a/drivers/power/jz4740-battery.c ++++ b/drivers/power/jz4740-battery.c +@@ -47,6 +47,8 @@ struct jz_battery { + + struct power_supply battery; + struct delayed_work work; ++ ++ struct mutex lock; + }; + + static inline struct jz_battery *psy_to_jz_battery(struct power_supply *psy) +@@ -68,6 +70,8 @@ static long jz_battery_read_voltage(stru + unsigned long val; + long voltage; + ++ mutex_lock(&battery->lock); ++ + INIT_COMPLETION(battery->read_completion); + + enable_irq(battery->irq); +@@ -91,6 +95,8 @@ static long jz_battery_read_voltage(stru + battery->cell->disable(battery->pdev); + disable_irq(battery->irq); + ++ mutex_unlock(&battery->lock); ++ + return voltage; + } + +@@ -291,6 +297,7 @@ static int __devinit jz_battery_probe(st + jz_battery->pdev = pdev; + + init_completion(&jz_battery->read_completion); ++ mutex_init(&jz_battery->lock); + + INIT_DELAYED_WORK(&jz_battery->work, jz_battery_work); + diff --git a/queue-2.6.36/memcg-fix-account-leak-at-failure-of-memsw-acconting.patch b/queue-2.6.36/memcg-fix-account-leak-at-failure-of-memsw-acconting.patch new file mode 100644 index 00000000000..2ee8d39a3f0 --- /dev/null +++ b/queue-2.6.36/memcg-fix-account-leak-at-failure-of-memsw-acconting.patch @@ -0,0 +1,37 @@ +From 01c88e2d6b7330c0cc5867fe2297e7d826e1337d Mon Sep 17 00:00:00 2001 +From: KAMEZAWA Hiroyuki +Date: Tue, 25 Jan 2011 15:07:27 -0800 +Subject: memcg: fix account leak at failure of memsw acconting + +From: KAMEZAWA Hiroyuki + +commit 01c88e2d6b7330c0cc5867fe2297e7d826e1337d upstream. + +Commit 4b53433468 ("memcg: clean up try_charge main loop") removes a +cancel of charge at case: memory charge-> success. mem+swap charge-> +failure. + +This leaks usage of memory. Fix it. + +Signed-off-by: KAMEZAWA Hiroyuki +Reviewed-by: Johannes Weiner +Acked-by: Daisuke Nishimura +Cc: Balbir Singh +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + mm/memcontrol.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/mm/memcontrol.c ++++ b/mm/memcontrol.c +@@ -1647,6 +1647,7 @@ static int __mem_cgroup_do_charge(struct + if (likely(!ret)) + return CHARGE_OK; + ++ res_counter_uncharge(&mem->res, csize); + mem_over_limit = mem_cgroup_from_res_counter(fail_res, memsw); + flags |= MEM_CGROUP_RECLAIM_NOSWAP; + } else diff --git a/queue-2.6.36/mmc-bfin_sdh-fix-alloc-size-for-private-data.patch b/queue-2.6.36/mmc-bfin_sdh-fix-alloc-size-for-private-data.patch new file mode 100644 index 00000000000..a6df89ce1b0 --- /dev/null +++ b/queue-2.6.36/mmc-bfin_sdh-fix-alloc-size-for-private-data.patch @@ -0,0 +1,33 @@ +From a34650f0f1ca589cda09c48cb62baf15e680a247 Mon Sep 17 00:00:00 2001 +From: Sonic Zhang +Date: Tue, 11 Jan 2011 22:39:35 -0500 +Subject: mmc: bfin_sdh: fix alloc size for private data + +From: Sonic Zhang + +commit a34650f0f1ca589cda09c48cb62baf15e680a247 upstream. + +The bfin_sdh driver allocates the wrong size for the private data +in the mmc_host. The first parameter of mmc_alloc_host should be +the size of the local driver struct rather than the common mmc_host. + +Signed-off-by: Sonic Zhang +Signed-off-by: Mike Frysinger +Signed-off-by: Chris Ball +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/mmc/host/bfin_sdh.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/mmc/host/bfin_sdh.c ++++ b/drivers/mmc/host/bfin_sdh.c +@@ -462,7 +462,7 @@ static int __devinit sdh_probe(struct pl + goto out; + } + +- mmc = mmc_alloc_host(sizeof(*mmc), &pdev->dev); ++ mmc = mmc_alloc_host(sizeof(struct sdh_host), &pdev->dev); + if (!mmc) { + ret = -ENOMEM; + goto out; diff --git a/queue-2.6.36/net-fix-ip-link-add-netns-oops.patch b/queue-2.6.36/net-fix-ip-link-add-netns-oops.patch new file mode 100644 index 00000000000..c956be218d6 --- /dev/null +++ b/queue-2.6.36/net-fix-ip-link-add-netns-oops.patch @@ -0,0 +1,120 @@ +From 13ad17745c2cbd437d9e24b2d97393e0be11c439 Mon Sep 17 00:00:00 2001 +From: Eric W. Biederman +Date: Sat, 29 Jan 2011 14:57:22 +0000 +Subject: net: Fix ip link add netns oops + +From: Eric W. Biederman + +commit 13ad17745c2cbd437d9e24b2d97393e0be11c439 upstream. + +Ed Swierk writes: +> On 2.6.35.7 +> ip link add link eth0 netns 9999 type macvlan +> where 9999 is a nonexistent PID triggers an oops and causes all network functions to hang: +> [10663.821898] BUG: unable to handle kernel NULL pointer dereference at 000000000000006d +> [10663.821917] IP: [] __dev_alloc_name+0x9a/0x170 +> [10663.821933] PGD 1d3927067 PUD 22f5c5067 PMD 0 +> [10663.821944] Oops: 0000 [#1] SMP +> [10663.821953] last sysfs file: /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq +> [10663.821959] CPU 3 +> [10663.821963] Modules linked in: macvlan ip6table_filter ip6_tables rfcomm ipt_MASQUERADE binfmt_misc iptable_nat nf_nat nf_conntrack_ipv4 nf_defrag_ipv4 xt_state nf_conntrack sco ipt_REJECT bnep l2cap xt_tcpudp iptable_filter ip_tables x_tables bridge stp vboxnetadp vboxnetflt vboxdrv kvm_intel kvm parport_pc ppdev snd_hda_codec_intelhdmi snd_hda_codec_conexant arc4 iwlagn iwlcore mac80211 snd_hda_intel snd_hda_codec snd_hwdep snd_pcm snd_seq_midi snd_rawmidi i915 snd_seq_midi_event snd_seq thinkpad_acpi drm_kms_helper btusb tpm_tis nvram uvcvideo snd_timer snd_seq_device bluetooth videodev v4l1_compat v4l2_compat_ioctl32 tpm drm tpm_bios snd cfg80211 psmouse serio_raw intel_ips soundcore snd_page_alloc intel_agp i2c_algo_bit video output netconsole configfs lp parport usbhid hid e1000e sdhci_pci ahci libahci sdhci led_class +> [10663.822155] +> [10663.822161] Pid: 6000, comm: ip Not tainted 2.6.35-23-generic #41-Ubuntu 2901CTO/2901CTO +> [10663.822167] RIP: 0010:[] [] __dev_alloc_name+0x9a/0x170 +> [10663.822177] RSP: 0018:ffff88014aebf7b8 EFLAGS: 00010286 +> [10663.822182] RAX: 00000000fffffff4 RBX: ffff8801ad900800 RCX: 0000000000000000 +> [10663.822187] RDX: ffff880000000000 RSI: 0000000000000000 RDI: ffff88014ad63000 +> [10663.822191] RBP: ffff88014aebf808 R08: 0000000000000041 R09: 0000000000000041 +> [10663.822196] R10: 0000000000000000 R11: dead000000200200 R12: ffff88014aebf818 +> [10663.822201] R13: fffffffffffffffd R14: ffff88014aebf918 R15: ffff88014ad62000 +> [10663.822207] FS: 00007f00c487f700(0000) GS:ffff880001f80000(0000) knlGS:0000000000000000 +> [10663.822212] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 +> [10663.822216] CR2: 000000000000006d CR3: 0000000231f19000 CR4: 00000000000026e0 +> [10663.822221] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 +> [10663.822226] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 +> [10663.822231] Process ip (pid: 6000, threadinfo ffff88014aebe000, task ffff88014afb16e0) +> [10663.822236] Stack: +> [10663.822240] ffff88014aebf808 ffffffff814a2bb5 ffff88014aebf7e8 00000000a00ee8d6 +> [10663.822251] <0> 0000000000000000 ffffffffa00ef940 ffff8801ad900800 ffff88014aebf818 +> [10663.822265] <0> ffff88014aebf918 ffff8801ad900800 ffff88014aebf858 ffffffff8149c413 +> [10663.822281] Call Trace: +> [10663.822290] [] ? dev_addr_init+0x75/0xb0 +> [10663.822298] [] dev_alloc_name+0x43/0x90 +> [10663.822307] [] rtnl_create_link+0xbe/0x1b0 +> [10663.822314] [] rtnl_newlink+0x48a/0x570 +> [10663.822321] [] ? rtnl_newlink+0x1ac/0x570 +> [10663.822332] [] ? native_x2apic_icr_read+0x4/0x20 +> [10663.822339] [] rtnetlink_rcv_msg+0x177/0x290 +> [10663.822346] [] ? rtnetlink_rcv_msg+0x0/0x290 +> [10663.822354] [] netlink_rcv_skb+0xa9/0xd0 +> [10663.822360] [] rtnetlink_rcv+0x25/0x40 +> [10663.822367] [] netlink_unicast+0x2de/0x2f0 +> [10663.822374] [] netlink_sendmsg+0x1fe/0x2e0 +> [10663.822383] [] sock_sendmsg+0xf3/0x120 +> [10663.822391] [] ? _raw_spin_lock+0xe/0x20 +> [10663.822400] [] ? __d_lookup+0x136/0x150 +> [10663.822406] [] ? _raw_spin_lock+0xe/0x20 +> [10663.822414] [] ? _atomic_dec_and_lock+0x4d/0x80 +> [10663.822422] [] ? mntput_no_expire+0x30/0x110 +> [10663.822429] [] ? move_addr_to_kernel+0x65/0x70 +> [10663.822435] [] ? verify_iovec+0x88/0xe0 +> [10663.822442] [] sys_sendmsg+0x240/0x3a0 +> [10663.822450] [] ? __do_fault+0x479/0x560 +> [10663.822457] [] ? _raw_spin_lock+0xe/0x20 +> [10663.822465] [] ? alloc_fd+0x10a/0x150 +> [10663.822473] [] ? do_page_fault+0x15e/0x350 +> [10663.822482] [] system_call_fastpath+0x16/0x1b +> [10663.822487] Code: 90 48 8d 78 02 be 25 00 00 00 e8 92 1d e2 ff 48 85 c0 75 cf bf 20 00 00 00 e8 c3 b1 c6 ff 49 89 c7 b8 f4 ff ff ff 4d 85 ff 74 bd <4d> 8b 75 70 49 8d 45 70 48 89 45 b8 49 83 ee 58 eb 28 48 8d 55 +> [10663.822618] RIP [] __dev_alloc_name+0x9a/0x170 +> [10663.822627] RSP +> [10663.822631] CR2: 000000000000006d +> [10663.822636] ---[ end trace 3dfd6c3ad5327ca7 ]--- + +This bug was introduced in: +commit 81adee47dfb608df3ad0b91d230fb3cef75f0060 +Author: Eric W. Biederman +Date: Sun Nov 8 00:53:51 2009 -0800 + + net: Support specifying the network namespace upon device creation. + + There is no good reason to not support userspace specifying the + network namespace during device creation, and it makes it easier + to create a network device and pass it to a child network namespace + with a well known name. + + We have to be careful to ensure that the target network namespace + for the new device exists through the life of the call. To keep + that logic clear I have factored out the network namespace grabbing + logic into rtnl_link_get_net. + + In addtion we need to continue to pass the source network namespace + to the rtnl_link_ops.newlink method so that we can find the base + device source network namespace. + + Signed-off-by: Eric W. Biederman + Acked-by: Eric Dumazet + +Where apparently I forgot to add error handling to the path where we create +a new network device in a new network namespace, and pass in an invalid pid. + +Reported-by: Ed Swierk +Signed-off-by: "Eric W. Biederman" +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + net/core/rtnetlink.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/net/core/rtnetlink.c ++++ b/net/core/rtnetlink.c +@@ -1546,6 +1546,9 @@ replay: + snprintf(ifname, IFNAMSIZ, "%s%%d", ops->kind); + + dest_net = rtnl_link_get_net(net, tb); ++ if (IS_ERR(dest_net)) ++ return PTR_ERR(dest_net); ++ + dev = rtnl_create_link(net, dest_net, ifname, ops, tb); + + if (IS_ERR(dev)) diff --git a/queue-2.6.36/p54-fix-sequence-no.-accounting-off-by-one-error.patch b/queue-2.6.36/p54-fix-sequence-no.-accounting-off-by-one-error.patch new file mode 100644 index 00000000000..8750a476f28 --- /dev/null +++ b/queue-2.6.36/p54-fix-sequence-no.-accounting-off-by-one-error.patch @@ -0,0 +1,38 @@ +From 3b5c5827d1f80ad8ae844a8b1183f59ddb90fe25 Mon Sep 17 00:00:00 2001 +From: Christian Lamparter +Date: Thu, 6 Jan 2011 23:47:52 +0100 +Subject: p54: fix sequence no. accounting off-by-one error + +From: Christian Lamparter + +commit 3b5c5827d1f80ad8ae844a8b1183f59ddb90fe25 upstream. + +P54_HDR_FLAG_DATA_OUT_SEQNR is meant to tell the +firmware that "the frame's sequence number has +already been set by the application." + +Whereas IEEE80211_TX_CTL_ASSIGN_SEQ is set for +frames which lack a valid sequence number and +either the driver or firmware has to assign one. + +Yup, it's the exact opposite! + +Signed-off-by: Christian Lamparter +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/p54/txrx.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/net/wireless/p54/txrx.c ++++ b/drivers/net/wireless/p54/txrx.c +@@ -618,7 +618,7 @@ static void p54_tx_80211_header(struct p + else + *burst_possible = false; + +- if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) ++ if (!(info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ)) + *flags |= P54_HDR_FLAG_DATA_OUT_SEQNR; + + if (info->flags & IEEE80211_TX_CTL_PSPOLL_RESPONSE) diff --git a/queue-2.6.36/pci-pci-stub-ignore-zero-length-id-parameters.patch b/queue-2.6.36/pci-pci-stub-ignore-zero-length-id-parameters.patch new file mode 100644 index 00000000000..1a83d8afef6 --- /dev/null +++ b/queue-2.6.36/pci-pci-stub-ignore-zero-length-id-parameters.patch @@ -0,0 +1,38 @@ +From 99a0fadf561e1f553c08f0a29f8b2578f55dd5f0 Mon Sep 17 00:00:00 2001 +From: Tejun Heo +Date: Wed, 22 Dec 2010 10:06:36 +0100 +Subject: PCI: pci-stub: ignore zero-length id parameters + +From: Tejun Heo + +commit 99a0fadf561e1f553c08f0a29f8b2578f55dd5f0 upstream. + +pci-stub uses strsep() to separate list of ids and generates a warning +message when it fails to parse an id. However, not specifying the +parameter results in ids set to an empty string. strsep() happily +returns the empty string as the first token and thus triggers the +warning message spuriously. + +Make the tokner ignore zero length ids. + +Reported-by: Chris Wright +Reported-by: Prasad Joshi +Signed-off-by: Jesse Barnes +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/pci/pci-stub.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/pci/pci-stub.c ++++ b/drivers/pci/pci-stub.c +@@ -54,6 +54,9 @@ static int __init pci_stub_init(void) + subdevice = PCI_ANY_ID, class=0, class_mask=0; + int fields; + ++ if (!strlen(id)) ++ continue; ++ + fields = sscanf(id, "%x:%x:%x:%x:%x:%x", + &vendor, &device, &subvendor, &subdevice, + &class, &class_mask); diff --git a/queue-2.6.36/ptrace-use-safer-wake-up-on-ptrace_detach.patch b/queue-2.6.36/ptrace-use-safer-wake-up-on-ptrace_detach.patch new file mode 100644 index 00000000000..6f5125d90ee --- /dev/null +++ b/queue-2.6.36/ptrace-use-safer-wake-up-on-ptrace_detach.patch @@ -0,0 +1,48 @@ +From 01e05e9a90b8f4c3997ae0537e87720eb475e532 Mon Sep 17 00:00:00 2001 +From: Tejun Heo +Date: Thu, 10 Feb 2011 15:01:22 -0800 +Subject: ptrace: use safer wake up on ptrace_detach() + +From: Tejun Heo + +commit 01e05e9a90b8f4c3997ae0537e87720eb475e532 upstream. + +The wake_up_process() call in ptrace_detach() is spurious and not +interlocked with the tracee state. IOW, the tracee could be running or +sleeping in any place in the kernel by the time wake_up_process() is +called. This can lead to the tracee waking up unexpectedly which can be +dangerous. + +The wake_up is spurious and should be removed but for now reduce its +toxicity by only waking up if the tracee is in TRACED or STOPPED state. + +This bug can possibly be used as an attack vector. I don't think it +will take too much effort to come up with an attack which triggers oops +somewhere. Most sleeps are wrapped in condition test loops and should +be safe but we have quite a number of places where sleep and wakeup +conditions are expected to be interlocked. Although the window of +opportunity is tiny, ptrace can be used by non-privileged users and with +some loading the window can definitely be extended and exploited. + +Signed-off-by: Tejun Heo +Acked-by: Roland McGrath +Acked-by: Oleg Nesterov +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/ptrace.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/kernel/ptrace.c ++++ b/kernel/ptrace.c +@@ -313,7 +313,7 @@ int ptrace_detach(struct task_struct *ch + child->exit_code = data; + dead = __ptrace_detach(current, child); + if (!child->exit_state) +- wake_up_process(child); ++ wake_up_state(child, TASK_TRACED | TASK_STOPPED); + } + write_unlock_irq(&tasklist_lock); + diff --git a/queue-2.6.36/serial-unbreak-billionton-cf-card.patch b/queue-2.6.36/serial-unbreak-billionton-cf-card.patch new file mode 100644 index 00000000000..ce40ae0288a --- /dev/null +++ b/queue-2.6.36/serial-unbreak-billionton-cf-card.patch @@ -0,0 +1,31 @@ +From d0694e2aeb815042aa0f3e5036728b3db4446f1d Mon Sep 17 00:00:00 2001 +From: Pavel Machek +Date: Sun, 9 Jan 2011 08:38:48 +0100 +Subject: serial: unbreak billionton CF card + +From: Pavel Machek + +commit d0694e2aeb815042aa0f3e5036728b3db4446f1d upstream. + +Unbreak Billionton CF bluetooth card. This actually fixes a regression +on zaurus. + +Signed-off-by: Pavel Machek +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/serial/8250.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/serial/8250.c ++++ b/drivers/serial/8250.c +@@ -241,7 +241,8 @@ static const struct serial8250_config ua + .fifo_size = 128, + .tx_loadsz = 128, + .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, +- .flags = UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP, ++ /* UART_CAP_EFR breaks billionon CF bluetooth card. */ ++ .flags = UART_CAP_FIFO | UART_CAP_SLEEP, + }, + [PORT_16654] = { + .name = "ST16654", diff --git a/queue-2.6.36/series b/queue-2.6.36/series index d6090b74fb6..1a619520431 100644 --- a/queue-2.6.36/series +++ b/queue-2.6.36/series @@ -95,3 +95,28 @@ rtc-cmos-fix-suspend-resume.patch mm-fix-migration-hangs-on-anon_vma-lock.patch ext4-fix-memory-leak-in-ext4_free_branches.patch rapidio-fix-hang-on-rapidio-doorbell-queue-full-condition.patch +sh-fix-up-legacy-ptea-space-attribute-mapping.patch +pci-pci-stub-ignore-zero-length-id-parameters.patch +virtio-remove-virtio-pci-root-device.patch +jz4740-battery-protect-against-concurrent-battery-readings.patch +ds2760_battery-fix-calculation-of-time_to_empty_now.patch +avr32-use-syscall-prototypes-from-asm-generic-instead-of-arch.patch +cpuidle-make-cpuidle_enable_device-call-poll_idle_init.patch +p54-fix-sequence-no.-accounting-off-by-one-error.patch +i2c-unregister-dummy-devices-last-on-adapter-removal.patch +asoc-handle-low-measured-dc-offsets-for-wm_hubs-devices.patch +asoc-wm8994-fix-wrong-value-in-tristate-function.patch +asoc-create-an-aif1adcdat-signal-widget-to-match-aif2.patch +virtio_net-add-schedule-check-to-napi_enable-call.patch +virtio-console-wake-up-outvq-on-host-notifications.patch +drivers-update-to-pl2303-usb-serial-to-support-motorola-cables.patch +serial-unbreak-billionton-cf-card.patch +ptrace-use-safer-wake-up-on-ptrace_detach.patch +net-fix-ip-link-add-netns-oops.patch +x86-mtrr-avoid-mtrr-reprogramming-on-bp-during-boot-on-up-platforms.patch +fix-jiffy-calculations-in-calibrate_delay_direct-to-handle-overflow.patch +ixgbe-fix-for-82599-erratum-on-header-splitting.patch +fix-prlimit64-for-suid-sgid-processes.patch +arm-initrd-disable-initrd-if-passed-address-overlaps-reserved-region.patch +memcg-fix-account-leak-at-failure-of-memsw-acconting.patch +mmc-bfin_sdh-fix-alloc-size-for-private-data.patch diff --git a/queue-2.6.36/sh-fix-up-legacy-ptea-space-attribute-mapping.patch b/queue-2.6.36/sh-fix-up-legacy-ptea-space-attribute-mapping.patch new file mode 100644 index 00000000000..a072f5a4848 --- /dev/null +++ b/queue-2.6.36/sh-fix-up-legacy-ptea-space-attribute-mapping.patch @@ -0,0 +1,67 @@ +From efb3e34b6176d30c4fe8635fa8e1beb6280cc2cd Mon Sep 17 00:00:00 2001 +From: Paul Mundt +Date: Tue, 11 Jan 2011 15:02:59 +0900 +Subject: sh: Fix up legacy PTEA space attribute mapping. + +From: Paul Mundt + +commit efb3e34b6176d30c4fe8635fa8e1beb6280cc2cd upstream. + +When p3_ioremap() was converted to ioremap_prot() there was some breakage +introduced where the 29-bit segmentation logic would trap the area range +and return an identity mapping without having allowed the area +specification to force mapping through page tables. This wires up a PCC +mask for pgprot verification to work out whether to short-circuit the +identity mapping on legacy parts, restoring the previous behaviour. + +Reported-by: Nobuhiro Iwamatsu +Signed-off-by: Paul Mundt +Signed-off-by: Greg Kroah-Hartman + +--- + arch/sh/include/asm/io.h | 10 +++++++++- + arch/sh/include/asm/pgtable_32.h | 7 ++++++- + 2 files changed, 15 insertions(+), 2 deletions(-) + +--- a/arch/sh/include/asm/io.h ++++ b/arch/sh/include/asm/io.h +@@ -322,7 +322,15 @@ __ioremap_29bit(phys_addr_t offset, unsi + * mapping must be done by the PMB or by using page tables. + */ + if (likely(PXSEG(offset) < P3SEG && PXSEG(last_addr) < P3SEG)) { +- if (unlikely(pgprot_val(prot) & _PAGE_CACHABLE)) ++ u64 flags = pgprot_val(prot); ++ ++ /* ++ * Anything using the legacy PTEA space attributes needs ++ * to be kicked down to page table mappings. ++ */ ++ if (unlikely(flags & _PAGE_PCC_MASK)) ++ return NULL; ++ if (unlikely(flags & _PAGE_CACHABLE)) + return (void __iomem *)P1SEGADDR(offset); + + return (void __iomem *)P2SEGADDR(offset); +--- a/arch/sh/include/asm/pgtable_32.h ++++ b/arch/sh/include/asm/pgtable_32.h +@@ -76,6 +76,10 @@ + /* Wrapper for extended mode pgprot twiddling */ + #define _PAGE_EXT(x) ((unsigned long long)(x) << 32) + ++#ifdef CONFIG_X2TLB ++#define _PAGE_PCC_MASK 0x00000000 /* No legacy PTEA support */ ++#else ++ + /* software: moves to PTEA.TC (Timing Control) */ + #define _PAGE_PCC_AREA5 0x00000000 /* use BSC registers for area5 */ + #define _PAGE_PCC_AREA6 0x80000000 /* use BSC registers for area6 */ +@@ -89,7 +93,8 @@ + #define _PAGE_PCC_ATR8 0x60000000 /* Attribute Memory space, 8 bit bus */ + #define _PAGE_PCC_ATR16 0x60000001 /* Attribute Memory space, 6 bit bus */ + +-#ifndef CONFIG_X2TLB ++#define _PAGE_PCC_MASK 0xe0000001 ++ + /* copy the ptea attributes */ + static inline unsigned long copy_ptea_attributes(unsigned long x) + { diff --git a/queue-2.6.36/virtio-console-wake-up-outvq-on-host-notifications.patch b/queue-2.6.36/virtio-console-wake-up-outvq-on-host-notifications.patch new file mode 100644 index 00000000000..21b5e887abc --- /dev/null +++ b/queue-2.6.36/virtio-console-wake-up-outvq-on-host-notifications.patch @@ -0,0 +1,64 @@ +From 2770c5ea501be69989a7acf54ec4cb3554c47191 Mon Sep 17 00:00:00 2001 +From: Amit Shah +Date: Mon, 31 Jan 2011 13:06:36 +0530 +Subject: virtio: console: Wake up outvq on host notifications + +From: Amit Shah + +commit 2770c5ea501be69989a7acf54ec4cb3554c47191 upstream. + +The outvq needs to be woken up on host notifications so that buffers +consumed by the host can be reclaimed, outvq freed, and application +writes may proceed again. + +The need for this is now finally noticed when I have qemu patches ready +to use nonblocking IO and flow control. + +CC: Hans de Goede +Signed-off-by: Amit Shah +Signed-off-by: Rusty Russell +Acked-by: Hans de Goede +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/char/virtio_console.c | 15 +++++++++++++-- + 1 file changed, 13 insertions(+), 2 deletions(-) + +--- a/drivers/char/virtio_console.c ++++ b/drivers/char/virtio_console.c +@@ -1314,6 +1314,17 @@ static void control_work_handler(struct + spin_unlock(&portdev->cvq_lock); + } + ++static void out_intr(struct virtqueue *vq) ++{ ++ struct port *port; ++ ++ port = find_port_by_vq(vq->vdev->priv, vq); ++ if (!port) ++ return; ++ ++ wake_up_interruptible(&port->waitqueue); ++} ++ + static void in_intr(struct virtqueue *vq) + { + struct port *port; +@@ -1430,7 +1441,7 @@ static int init_vqs(struct ports_device + */ + j = 0; + io_callbacks[j] = in_intr; +- io_callbacks[j + 1] = NULL; ++ io_callbacks[j + 1] = out_intr; + io_names[j] = "input"; + io_names[j + 1] = "output"; + j += 2; +@@ -1444,7 +1455,7 @@ static int init_vqs(struct ports_device + for (i = 1; i < nr_ports; i++) { + j += 2; + io_callbacks[j] = in_intr; +- io_callbacks[j + 1] = NULL; ++ io_callbacks[j + 1] = out_intr; + io_names[j] = "input"; + io_names[j + 1] = "output"; + } diff --git a/queue-2.6.36/virtio-remove-virtio-pci-root-device.patch b/queue-2.6.36/virtio-remove-virtio-pci-root-device.patch new file mode 100644 index 00000000000..4e1aeb65b5c --- /dev/null +++ b/queue-2.6.36/virtio-remove-virtio-pci-root-device.patch @@ -0,0 +1,84 @@ +From 8b3bb3ecf1934ac4a7005ad9017de1127e2fbd2f Mon Sep 17 00:00:00 2001 +From: Milton Miller +Date: Fri, 7 Jan 2011 02:55:06 -0600 +Subject: virtio: remove virtio-pci root device + +From: Milton Miller + +commit 8b3bb3ecf1934ac4a7005ad9017de1127e2fbd2f upstream. + +We sometimes need to map between the virtio device and +the given pci device. One such use is OS installer that +gets the boot pci device from BIOS and needs to +find the relevant block device. Since it can't, +installation fails. + +Instead of creating a top-level devices/virtio-pci +directory, create each device under the corresponding +pci device node. Symlinks to all virtio-pci +devices can be found under the pci driver link in +bus/pci/drivers/virtio-pci/devices, and all virtio +devices under drivers/bus/virtio/devices. + +Signed-off-by: Milton Miller +Signed-off-by: Rusty Russell +Acked-by: Michael S. Tsirkin +Tested-by: Michael S. Tsirkin +Acked-by: Gleb Natapov +Tested-by: "Daniel P. Berrange" +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/virtio/virtio_pci.c | 20 ++------------------ + 1 file changed, 2 insertions(+), 18 deletions(-) + +--- a/drivers/virtio/virtio_pci.c ++++ b/drivers/virtio/virtio_pci.c +@@ -96,11 +96,6 @@ static struct pci_device_id virtio_pci_i + + MODULE_DEVICE_TABLE(pci, virtio_pci_id_table); + +-/* A PCI device has it's own struct device and so does a virtio device so +- * we create a place for the virtio devices to show up in sysfs. I think it +- * would make more sense for virtio to not insist on having it's own device. */ +-static struct device *virtio_pci_root; +- + /* Convert a generic virtio device to our structure */ + static struct virtio_pci_device *to_vp_device(struct virtio_device *vdev) + { +@@ -629,7 +624,7 @@ static int __devinit virtio_pci_probe(st + if (vp_dev == NULL) + return -ENOMEM; + +- vp_dev->vdev.dev.parent = virtio_pci_root; ++ vp_dev->vdev.dev.parent = &pci_dev->dev; + vp_dev->vdev.dev.release = virtio_pci_release_dev; + vp_dev->vdev.config = &virtio_pci_config_ops; + vp_dev->pci_dev = pci_dev; +@@ -717,17 +712,7 @@ static struct pci_driver virtio_pci_driv + + static int __init virtio_pci_init(void) + { +- int err; +- +- virtio_pci_root = root_device_register("virtio-pci"); +- if (IS_ERR(virtio_pci_root)) +- return PTR_ERR(virtio_pci_root); +- +- err = pci_register_driver(&virtio_pci_driver); +- if (err) +- root_device_unregister(virtio_pci_root); +- +- return err; ++ return pci_register_driver(&virtio_pci_driver); + } + + module_init(virtio_pci_init); +@@ -735,7 +720,6 @@ module_init(virtio_pci_init); + static void __exit virtio_pci_exit(void) + { + pci_unregister_driver(&virtio_pci_driver); +- root_device_unregister(virtio_pci_root); + } + + module_exit(virtio_pci_exit); diff --git a/queue-2.6.36/virtio_net-add-schedule-check-to-napi_enable-call.patch b/queue-2.6.36/virtio_net-add-schedule-check-to-napi_enable-call.patch new file mode 100644 index 00000000000..33a505be801 --- /dev/null +++ b/queue-2.6.36/virtio_net-add-schedule-check-to-napi_enable-call.patch @@ -0,0 +1,76 @@ +From 3e9d08ec0a68f6faf718d5a7e050fe5ca0ba004f Mon Sep 17 00:00:00 2001 +From: Bruce Rogers +Date: Thu, 10 Feb 2011 11:03:31 -0800 +Subject: virtio_net: Add schedule check to napi_enable call + +From: Bruce Rogers + +commit 3e9d08ec0a68f6faf718d5a7e050fe5ca0ba004f upstream. + +Under harsh testing conditions, including low memory, the guest would +stop receiving packets. With this patch applied we no longer see any +problems in the driver while performing these tests for extended periods +of time. + +Make sure napi is scheduled subsequent to each napi_enable. + +Signed-off-by: Bruce Rogers +Signed-off-by: Olaf Kirch +Signed-off-by: Rusty Russell +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/virtio_net.c | 27 ++++++++++++++++----------- + 1 file changed, 16 insertions(+), 11 deletions(-) + +--- a/drivers/net/virtio_net.c ++++ b/drivers/net/virtio_net.c +@@ -446,6 +446,20 @@ static void skb_recv_done(struct virtque + } + } + ++static void virtnet_napi_enable(struct virtnet_info *vi) ++{ ++ napi_enable(&vi->napi); ++ ++ /* If all buffers were filled by other side before we napi_enabled, we ++ * won't get another interrupt, so process any outstanding packets ++ * now. virtnet_poll wants re-enable the queue, so we disable here. ++ * We synchronize against interrupts via NAPI_STATE_SCHED */ ++ if (napi_schedule_prep(&vi->napi)) { ++ virtqueue_disable_cb(vi->rvq); ++ __napi_schedule(&vi->napi); ++ } ++} ++ + static void refill_work(struct work_struct *work) + { + struct virtnet_info *vi; +@@ -454,7 +468,7 @@ static void refill_work(struct work_stru + vi = container_of(work, struct virtnet_info, refill.work); + napi_disable(&vi->napi); + still_empty = !try_fill_recv(vi, GFP_KERNEL); +- napi_enable(&vi->napi); ++ virtnet_napi_enable(vi); + + /* In theory, this can happen: if we don't get any buffers in + * we will *never* try to fill again. */ +@@ -638,16 +652,7 @@ static int virtnet_open(struct net_devic + { + struct virtnet_info *vi = netdev_priv(dev); + +- napi_enable(&vi->napi); +- +- /* If all buffers were filled by other side before we napi_enabled, we +- * won't get another interrupt, so process any outstanding packets +- * now. virtnet_poll wants re-enable the queue, so we disable here. +- * We synchronize against interrupts via NAPI_STATE_SCHED */ +- if (napi_schedule_prep(&vi->napi)) { +- virtqueue_disable_cb(vi->rvq); +- __napi_schedule(&vi->napi); +- } ++ virtnet_napi_enable(vi); + return 0; + } + diff --git a/queue-2.6.36/x86-mtrr-avoid-mtrr-reprogramming-on-bp-during-boot-on-up-platforms.patch b/queue-2.6.36/x86-mtrr-avoid-mtrr-reprogramming-on-bp-during-boot-on-up-platforms.patch new file mode 100644 index 00000000000..9b4ae335496 --- /dev/null +++ b/queue-2.6.36/x86-mtrr-avoid-mtrr-reprogramming-on-bp-during-boot-on-up-platforms.patch @@ -0,0 +1,107 @@ +From f7448548a9f32db38f243ccd4271617758ddfe2c Mon Sep 17 00:00:00 2001 +From: Suresh Siddha +Date: Wed, 2 Feb 2011 17:02:55 -0800 +Subject: x86, mtrr: Avoid MTRR reprogramming on BP during boot on UP platforms + +From: Suresh Siddha + +commit f7448548a9f32db38f243ccd4271617758ddfe2c upstream. + +Markus Kohn ran into a hard hang regression on an acer aspire +1310, when acpi is enabled. git bisect showed the following +commit as the bad one that introduced the boot regression. + + commit d0af9eed5aa91b6b7b5049cae69e5ea956fd85c3 + Author: Suresh Siddha + Date: Wed Aug 19 18:05:36 2009 -0700 + + x86, pat/mtrr: Rendezvous all the cpus for MTRR/PAT init + +Because of the UP configuration of that platform, +native_smp_prepare_cpus() bailed out (in smp_sanity_check()) +before doing the set_mtrr_aps_delayed_init() + +Further down the boot path, native_smp_cpus_done() will call the +delayed MTRR initialization for the AP's (mtrr_aps_init()) with +mtrr_aps_delayed_init not set. This resulted in the boot +processor reprogramming its MTRR's to the values seen during the +start of the OS boot. While this is not needed ideally, this +shouldn't have caused any side-effects. This is because the +reprogramming of MTRR's (set_mtrr_state() that gets called via +set_mtrr()) will check if the live register contents are +different from what is being asked to write and will do the actual +write only if they are different. + +BP's mtrr state is read during the start of the OS boot and +typically nothing would have changed when we ask to reprogram it +on BP again because of the above scenario on an UP platform. So +on a normal UP platform no reprogramming of BP MTRR MSR's +happens and all is well. + +However, on this platform, bios seems to be modifying the fixed +mtrr range registers between the start of OS boot and when we +double check the live registers for reprogramming BP MTRR +registers. And as the live registers are modified, we end up +reprogramming the MTRR's to the state seen during the start of +the OS boot. + +During ACPI initialization, something in the bios (probably smi +handler?) don't like this fact and results in a hard lockup. + +We didn't see this boot hang issue on this platform before the +commit d0af9eed5aa91b6b7b5049cae69e5ea956fd85c3, because only +the AP's (if any) will program its MTRR's to the value that BP +had at the start of the OS boot. + +Fix this issue by checking mtrr_aps_delayed_init before +continuing further in the mtrr_aps_init(). Now, only AP's (if +any) will program its MTRR's to the BP values during boot. + +Addresses https://bugzilla.novell.com/show_bug.cgi?id=623393 + + [ By the way, this behavior of the bios modifying MTRR's after the start + of the OS boot is not common and the kernel is not prepared to + handle this situation well. Irrespective of this issue, during + suspend/resume, linux kernel will try to reprogram the BP's MTRR values + to the values seen during the start of the OS boot. So suspend/resume might + be already broken on this platform for all linux kernel versions. ] + +Reported-and-bisected-by: Markus Kohn +Tested-by: Markus Kohn +Signed-off-by: Suresh Siddha +Cc: Thomas Renninger +Cc: Rafael Wysocki +Cc: Venkatesh Pallipadi +LKML-Reference: <1296694975.4418.402.camel@sbsiddha-MOBL3.sc.intel.com> +Signed-off-by: Ingo Molnar +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/kernel/cpu/mtrr/main.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +--- a/arch/x86/kernel/cpu/mtrr/main.c ++++ b/arch/x86/kernel/cpu/mtrr/main.c +@@ -793,13 +793,21 @@ void set_mtrr_aps_delayed_init(void) + } + + /* +- * MTRR initialization for all AP's ++ * Delayed MTRR initialization for all AP's + */ + void mtrr_aps_init(void) + { + if (!use_intel()) + return; + ++ /* ++ * Check if someone has requested the delay of AP MTRR initialization, ++ * by doing set_mtrr_aps_delayed_init(), prior to this point. If not, ++ * then we are done. ++ */ ++ if (!mtrr_aps_delayed_init) ++ return; ++ + set_mtrr(~0U, 0, 0, 0); + mtrr_aps_delayed_init = false; + }