]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
.36 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Tue, 15 Feb 2011 14:38:31 +0000 (06:38 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 15 Feb 2011 14:38:31 +0000 (06:38 -0800)
26 files changed:
queue-2.6.36/arm-initrd-disable-initrd-if-passed-address-overlaps-reserved-region.patch [new file with mode: 0644]
queue-2.6.36/asoc-create-an-aif1adcdat-signal-widget-to-match-aif2.patch [new file with mode: 0644]
queue-2.6.36/asoc-handle-low-measured-dc-offsets-for-wm_hubs-devices.patch [new file with mode: 0644]
queue-2.6.36/asoc-wm8994-fix-wrong-value-in-tristate-function.patch [new file with mode: 0644]
queue-2.6.36/avr32-use-syscall-prototypes-from-asm-generic-instead-of-arch.patch [new file with mode: 0644]
queue-2.6.36/cpuidle-make-cpuidle_enable_device-call-poll_idle_init.patch [new file with mode: 0644]
queue-2.6.36/drivers-update-to-pl2303-usb-serial-to-support-motorola-cables.patch [new file with mode: 0644]
queue-2.6.36/ds2760_battery-fix-calculation-of-time_to_empty_now.patch [new file with mode: 0644]
queue-2.6.36/fix-jiffy-calculations-in-calibrate_delay_direct-to-handle-overflow.patch [new file with mode: 0644]
queue-2.6.36/fix-prlimit64-for-suid-sgid-processes.patch [new file with mode: 0644]
queue-2.6.36/i2c-unregister-dummy-devices-last-on-adapter-removal.patch [new file with mode: 0644]
queue-2.6.36/ixgbe-fix-for-82599-erratum-on-header-splitting.patch [new file with mode: 0644]
queue-2.6.36/jz4740-battery-protect-against-concurrent-battery-readings.patch [new file with mode: 0644]
queue-2.6.36/memcg-fix-account-leak-at-failure-of-memsw-acconting.patch [new file with mode: 0644]
queue-2.6.36/mmc-bfin_sdh-fix-alloc-size-for-private-data.patch [new file with mode: 0644]
queue-2.6.36/net-fix-ip-link-add-netns-oops.patch [new file with mode: 0644]
queue-2.6.36/p54-fix-sequence-no.-accounting-off-by-one-error.patch [new file with mode: 0644]
queue-2.6.36/pci-pci-stub-ignore-zero-length-id-parameters.patch [new file with mode: 0644]
queue-2.6.36/ptrace-use-safer-wake-up-on-ptrace_detach.patch [new file with mode: 0644]
queue-2.6.36/serial-unbreak-billionton-cf-card.patch [new file with mode: 0644]
queue-2.6.36/series
queue-2.6.36/sh-fix-up-legacy-ptea-space-attribute-mapping.patch [new file with mode: 0644]
queue-2.6.36/virtio-console-wake-up-outvq-on-host-notifications.patch [new file with mode: 0644]
queue-2.6.36/virtio-remove-virtio-pci-root-device.patch [new file with mode: 0644]
queue-2.6.36/virtio_net-add-schedule-check-to-napi_enable-call.patch [new file with mode: 0644]
queue-2.6.36/x86-mtrr-avoid-mtrr-reprogramming-on-bp-during-boot-on-up-platforms.patch [new file with mode: 0644]

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 (file)
index 0000000..8daa56d
--- /dev/null
@@ -0,0 +1,38 @@
+From b0a2679d27408d97ce31e5f800b44227d3388b84 Mon Sep 17 00:00:00 2001
+From: Russell King <rmk+kernel@arm.linux.org.uk>
+Date: Sun, 30 Jan 2011 11:21:05 +0000
+Subject: ARM: initrd: disable initrd if passed address overlaps reserved region
+
+From: Russell King <rmk+kernel@arm.linux.org.uk>
+
+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 <rmk+kernel@arm.linux.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..d8c6306
--- /dev/null
@@ -0,0 +1,66 @@
+From 7f94de483f4e37e14d646ad6e85a3c82f66fb487 Mon Sep 17 00:00:00 2001
+From: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Date: Thu, 3 Feb 2011 16:27:34 +0000
+Subject: ASoC: Create an AIF1ADCDAT signal widget to match AIF2
+
+From: Mark Brown <broonie@opensource.wolfsonmicro.com>
+
+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 <broonie@opensource.wolfsonmicro.com>
+Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..2b0e95f
--- /dev/null
@@ -0,0 +1,53 @@
+From 20a4e7fc7e213365ea3771d7bf1e10a6bab853be Mon Sep 17 00:00:00 2001
+From: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Date: Fri, 21 Jan 2011 12:47:33 +0000
+Subject: ASoC: Handle low measured DC offsets for wm_hubs devices
+
+From: Mark Brown <broonie@opensource.wolfsonmicro.com>
+
+commit 20a4e7fc7e213365ea3771d7bf1e10a6bab853be upstream.
+
+The DC servo codes are actually signed numbers so need to be treated as
+such.
+
+Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..74b3b97
--- /dev/null
@@ -0,0 +1,32 @@
+From 78b3fb46753872fc79bffecc8d50355a8622b39b Mon Sep 17 00:00:00 2001
+From: Qiao Zhou <zhouqiao@marvell.com>
+Date: Wed, 19 Jan 2011 19:10:47 +0800
+Subject: ASoC: WM8994: fix wrong value in tristate function
+
+From: Qiao Zhou <zhouqiao@marvell.com>
+
+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 <zhouqiao@marvell.com>
+Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
+Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..2beed50
--- /dev/null
@@ -0,0 +1,43 @@
+From 664cb7142ced8b827e92e1851d1ed2cae922f225 Mon Sep 17 00:00:00 2001
+From: Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com>
+Date: Thu, 9 Dec 2010 00:19:33 +0100
+Subject: avr32: use syscall prototypes from asm-generic instead of arch
+
+From: Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com>
+
+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 <hans-christian.egtvedt@atmel.com>
+Reported-by: Peter Huewe <PeterHuewe@gmx.de>
+Reported-by: Sven Schnelle <svens@stackframe.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 <linux/signal.h>
+ /* 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 (file)
index 0000000..d63f356
--- /dev/null
@@ -0,0 +1,151 @@
+From d8c216cfa57e8a579f41729cbb88c97835d9ac8d Mon Sep 17 00:00:00 2001
+From: Rafael J. Wysocki <rjw@sisk.pl>
+Date: Sat, 8 Jan 2011 00:29:20 +0100
+Subject: cpuidle: Make cpuidle_enable_device() call poll_idle_init()
+
+From: Rafael J. Wysocki <rjw@sisk.pl>
+
+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 <len.brown@intel.com>
+Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..868155b
--- /dev/null
@@ -0,0 +1,43 @@
+From 96a3e79edff6f41b0f115a82f1a39d66218077a7 Mon Sep 17 00:00:00 2001
+From: Dario Lombardo <dario.lombardo@libero.it>
+Date: Fri, 21 Jan 2011 15:35:19 +0100
+Subject: drivers: update to pl2303 usb-serial to support Motorola cables
+
+From: Dario Lombardo <dario.lombardo@libero.it>
+
+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 <dario.lombardo@libero.it>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..a7fe4c2
--- /dev/null
@@ -0,0 +1,38 @@
+From 86af95039b69a90db15294eb1f9c147f1df0a8ea Mon Sep 17 00:00:00 2001
+From: Sven Neumann <s.neumann@raumfeld.com>
+Date: Fri, 12 Nov 2010 11:36:22 +0100
+Subject: ds2760_battery: Fix calculation of time_to_empty_now
+
+From: Sven Neumann <s.neumann@raumfeld.com>
+
+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 <s.neumann@raumfeld.com>
+Acked-by: Daniel Mack <daniel@caiaq.de>
+Signed-off-by: Anton Vorontsov <cbouatmailru@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..c9be912
--- /dev/null
@@ -0,0 +1,46 @@
+From 70a062286b9dfcbd24d2e11601aecfead5cf709a Mon Sep 17 00:00:00 2001
+From: Tim Deegan <Tim.Deegan@citrix.com>
+Date: Thu, 10 Feb 2011 08:50:41 +0000
+Subject: fix jiffy calculations in calibrate_delay_direct to handle overflow
+
+From: Tim Deegan <Tim.Deegan@citrix.com>
+
+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 <Tim.Deegan@citrix.com>
+[jbeulich@novell.com: !time_after() -> time_before_eq() as suggested by Jiri Slaby]
+Signed-off-by: Jan Beulich <jbeulich@novell.com>
+Cc: Jiri Slaby <jslaby@suse.cz>
+Cc: Jeremy Fitzhardinge <jeremy@goop.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..e63a0e6
--- /dev/null
@@ -0,0 +1,35 @@
+From aa5bd67dcfdf9af34c7fa36ebc87d4e1f7e91873 Mon Sep 17 00:00:00 2001
+From: Kacper Kornet <kornet@camk.edu.pl>
+Date: Sat, 29 Jan 2011 00:21:04 +0100
+Subject: Fix prlimit64 for suid/sgid processes
+
+From: Kacper Kornet <kornet@camk.edu.pl>
+
+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 <kornet@camk.edu.pl>
+Acked-by: Jiri Slaby <jslaby@suse.cz>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..1b6bc4e
--- /dev/null
@@ -0,0 +1,52 @@
+From 5219bf884b6e2b54e734ca1799b6f0014bb2b4b7 Mon Sep 17 00:00:00 2001
+From: Jean Delvare <khali@linux-fr.org>
+Date: Fri, 14 Jan 2011 22:03:49 +0100
+Subject: i2c: Unregister dummy devices last on adapter removal
+
+From: Jean Delvare <khali@linux-fr.org>
+
+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 <khali@linux-fr.org>
+Tested-by: Hans Verkuil <hverkuil@xs4all.nl>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..d882e34
--- /dev/null
@@ -0,0 +1,45 @@
+From a124339ad28389093ed15eca990d39c51c5736cc Mon Sep 17 00:00:00 2001
+From: Don Skidmore <donald.c.skidmore@intel.com>
+Date: Tue, 18 Jan 2011 22:53:47 +0000
+Subject: ixgbe: fix for 82599 erratum on Header Splitting
+
+From: Don Skidmore <donald.c.skidmore@intel.com>
+
+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 <donald.c.skidmore@intel.com>
+Tested-by: Stephen Ko <stephen.s.ko@intel.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..d02a08c
--- /dev/null
@@ -0,0 +1,57 @@
+From 8ec98fe0b4ffdedce4c1caa9fb3d550f52ad1c6b Mon Sep 17 00:00:00 2001
+From: Lars-Peter Clausen <lars@metafoo.de>
+Date: Thu, 11 Nov 2010 19:00:52 +0100
+Subject: jz4740-battery: Protect against concurrent battery readings
+
+From: Lars-Peter Clausen <lars@metafoo.de>
+
+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 <lars@metafoo.de>
+Signed-off-by: Anton Vorontsov <cbouatmailru@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..2ee8d39
--- /dev/null
@@ -0,0 +1,37 @@
+From 01c88e2d6b7330c0cc5867fe2297e7d826e1337d Mon Sep 17 00:00:00 2001
+From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
+Date: Tue, 25 Jan 2011 15:07:27 -0800
+Subject: memcg: fix account leak at failure of memsw acconting
+
+From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
+
+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 <kamezawa.hiroyu@jp.fujitsu.com>
+Reviewed-by: Johannes Weiner <hannes@cmpxchg.org>
+Acked-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
+Cc: Balbir Singh <balbir@in.ibm.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..a6df89c
--- /dev/null
@@ -0,0 +1,33 @@
+From a34650f0f1ca589cda09c48cb62baf15e680a247 Mon Sep 17 00:00:00 2001
+From: Sonic Zhang <sonic.zhang@analog.com>
+Date: Tue, 11 Jan 2011 22:39:35 -0500
+Subject: mmc: bfin_sdh: fix alloc size for private data
+
+From: Sonic Zhang <sonic.zhang@analog.com>
+
+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 <sonic.zhang@analog.com>
+Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+Signed-off-by: Chris Ball <cjb@laptop.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..c956be2
--- /dev/null
@@ -0,0 +1,120 @@
+From 13ad17745c2cbd437d9e24b2d97393e0be11c439 Mon Sep 17 00:00:00 2001
+From: Eric W. Biederman <ebiederm@xmission.com>
+Date: Sat, 29 Jan 2011 14:57:22 +0000
+Subject: net: Fix ip link add netns oops
+
+From: Eric W. Biederman <ebiederm@xmission.com>
+
+commit 13ad17745c2cbd437d9e24b2d97393e0be11c439 upstream.
+
+Ed Swierk <eswierk@bigswitch.com> 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: [<ffffffff8149c2fa>] __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:[<ffffffff8149c2fa>] [<ffffffff8149c2fa>] __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] [<ffffffff814a2bb5>] ? dev_addr_init+0x75/0xb0
+>  [10663.822298] [<ffffffff8149c413>] dev_alloc_name+0x43/0x90
+>  [10663.822307] [<ffffffff814a85ee>] rtnl_create_link+0xbe/0x1b0
+>  [10663.822314] [<ffffffff814ab2aa>] rtnl_newlink+0x48a/0x570
+>  [10663.822321] [<ffffffff814aafcc>] ? rtnl_newlink+0x1ac/0x570
+>  [10663.822332] [<ffffffff81030064>] ? native_x2apic_icr_read+0x4/0x20
+>  [10663.822339] [<ffffffff814a8c17>] rtnetlink_rcv_msg+0x177/0x290
+>  [10663.822346] [<ffffffff814a8aa0>] ? rtnetlink_rcv_msg+0x0/0x290
+>  [10663.822354] [<ffffffff814c25d9>] netlink_rcv_skb+0xa9/0xd0
+>  [10663.822360] [<ffffffff814a8a85>] rtnetlink_rcv+0x25/0x40
+>  [10663.822367] [<ffffffff814c223e>] netlink_unicast+0x2de/0x2f0
+>  [10663.822374] [<ffffffff814c303e>] netlink_sendmsg+0x1fe/0x2e0
+>  [10663.822383] [<ffffffff81488533>] sock_sendmsg+0xf3/0x120
+>  [10663.822391] [<ffffffff815899fe>] ? _raw_spin_lock+0xe/0x20
+>  [10663.822400] [<ffffffff81168656>] ? __d_lookup+0x136/0x150
+>  [10663.822406] [<ffffffff815899fe>] ? _raw_spin_lock+0xe/0x20
+>  [10663.822414] [<ffffffff812b7a0d>] ? _atomic_dec_and_lock+0x4d/0x80
+>  [10663.822422] [<ffffffff8116ea90>] ? mntput_no_expire+0x30/0x110
+>  [10663.822429] [<ffffffff81486ff5>] ? move_addr_to_kernel+0x65/0x70
+>  [10663.822435] [<ffffffff81493308>] ? verify_iovec+0x88/0xe0
+>  [10663.822442] [<ffffffff81489020>] sys_sendmsg+0x240/0x3a0
+> [10663.822450] [<ffffffff8111e2a9>] ? __do_fault+0x479/0x560
+>  [10663.822457] [<ffffffff815899fe>] ? _raw_spin_lock+0xe/0x20
+>  [10663.822465] [<ffffffff8116cf4a>] ? alloc_fd+0x10a/0x150
+>  [10663.822473] [<ffffffff8158d76e>] ? do_page_fault+0x15e/0x350
+>  [10663.822482] [<ffffffff8100a0f2>] 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 [<ffffffff8149c2fa>] __dev_alloc_name+0x9a/0x170
+>  [10663.822627] RSP <ffff88014aebf7b8>
+>  [10663.822631] CR2: 000000000000006d
+>  [10663.822636] ---[ end trace 3dfd6c3ad5327ca7 ]---
+
+This bug was introduced in:
+commit 81adee47dfb608df3ad0b91d230fb3cef75f0060
+Author: Eric W. Biederman <ebiederm@aristanetworks.com>
+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 <ebiederm@aristanetworks.com>
+    Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
+
+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 <eswierk@bigswitch.com>
+Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..8750a47
--- /dev/null
@@ -0,0 +1,38 @@
+From 3b5c5827d1f80ad8ae844a8b1183f59ddb90fe25 Mon Sep 17 00:00:00 2001
+From: Christian Lamparter <chunkeey@googlemail.com>
+Date: Thu, 6 Jan 2011 23:47:52 +0100
+Subject: p54: fix sequence no. accounting off-by-one error
+
+From: Christian Lamparter <chunkeey@googlemail.com>
+
+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 <chunkeey@googlemail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..1a83d8a
--- /dev/null
@@ -0,0 +1,38 @@
+From 99a0fadf561e1f553c08f0a29f8b2578f55dd5f0 Mon Sep 17 00:00:00 2001
+From: Tejun Heo <tj@kernel.org>
+Date: Wed, 22 Dec 2010 10:06:36 +0100
+Subject: PCI: pci-stub: ignore zero-length id parameters
+
+From: Tejun Heo <tj@kernel.org>
+
+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 <chrisw@sous-sol.org>
+Reported-by: Prasad Joshi <P.G.Joshi@student.reading.ac.uk>
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..6f5125d
--- /dev/null
@@ -0,0 +1,48 @@
+From 01e05e9a90b8f4c3997ae0537e87720eb475e532 Mon Sep 17 00:00:00 2001
+From: Tejun Heo <tj@kernel.org>
+Date: Thu, 10 Feb 2011 15:01:22 -0800
+Subject: ptrace: use safer wake up on ptrace_detach()
+
+From: Tejun Heo <tj@kernel.org>
+
+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 <tj@kernel.org>
+Acked-by: Roland McGrath <roland@redhat.com>
+Acked-by: Oleg Nesterov <oleg@redhat.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..ce40ae0
--- /dev/null
@@ -0,0 +1,31 @@
+From d0694e2aeb815042aa0f3e5036728b3db4446f1d Mon Sep 17 00:00:00 2001
+From: Pavel Machek <pavel@ucw.cz>
+Date: Sun, 9 Jan 2011 08:38:48 +0100
+Subject: serial: unbreak billionton CF card
+
+From: Pavel Machek <pavel@ucw.cz>
+
+commit d0694e2aeb815042aa0f3e5036728b3db4446f1d upstream.
+
+Unbreak Billionton CF bluetooth card. This actually fixes a regression
+on zaurus.
+
+Signed-off-by: Pavel Machek <pavel@ucw.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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",
index d6090b74fb6f16e06e1e5472843a3efb42c2ff38..1a619520431270bbb2b84591e0a7f1052c955ca7 100644 (file)
@@ -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 (file)
index 0000000..a072f5a
--- /dev/null
@@ -0,0 +1,67 @@
+From efb3e34b6176d30c4fe8635fa8e1beb6280cc2cd Mon Sep 17 00:00:00 2001
+From: Paul Mundt <lethal@linux-sh.org>
+Date: Tue, 11 Jan 2011 15:02:59 +0900
+Subject: sh: Fix up legacy PTEA space attribute mapping.
+
+From: Paul Mundt <lethal@linux-sh.org>
+
+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 <iwamatsu@nigauri.org>
+Signed-off-by: Paul Mundt <lethal@linux-sh.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..21b5e88
--- /dev/null
@@ -0,0 +1,64 @@
+From 2770c5ea501be69989a7acf54ec4cb3554c47191 Mon Sep 17 00:00:00 2001
+From: Amit Shah <amit.shah@redhat.com>
+Date: Mon, 31 Jan 2011 13:06:36 +0530
+Subject: virtio: console: Wake up outvq on host notifications
+
+From: Amit Shah <amit.shah@redhat.com>
+
+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 <hdegoede@redhat.com>
+Signed-off-by: Amit Shah <amit.shah@redhat.com>
+Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
+Acked-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..4e1aeb6
--- /dev/null
@@ -0,0 +1,84 @@
+From 8b3bb3ecf1934ac4a7005ad9017de1127e2fbd2f Mon Sep 17 00:00:00 2001
+From: Milton Miller <miltonm@bga.com>
+Date: Fri, 7 Jan 2011 02:55:06 -0600
+Subject: virtio: remove virtio-pci root device
+
+From: Milton Miller <miltonm@bga.com>
+
+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 <miltonm@bga.com>
+Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
+Acked-by: Michael S. Tsirkin <mst@redhat.com>
+Tested-by: Michael S. Tsirkin <mst@redhat.com>
+Acked-by: Gleb Natapov <gleb@redhat.com>
+Tested-by: "Daniel P. Berrange" <berrange@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..33a505b
--- /dev/null
@@ -0,0 +1,76 @@
+From 3e9d08ec0a68f6faf718d5a7e050fe5ca0ba004f Mon Sep 17 00:00:00 2001
+From: Bruce Rogers <brogers@novell.com>
+Date: Thu, 10 Feb 2011 11:03:31 -0800
+Subject: virtio_net: Add schedule check to napi_enable call
+
+From: Bruce Rogers <brogers@novell.com>
+
+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 <brogers@novell.com>
+Signed-off-by: Olaf Kirch <okir@suse.de>
+Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 (file)
index 0000000..9b4ae33
--- /dev/null
@@ -0,0 +1,107 @@
+From f7448548a9f32db38f243ccd4271617758ddfe2c Mon Sep 17 00:00:00 2001
+From: Suresh Siddha <suresh.b.siddha@intel.com>
+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 <suresh.b.siddha@intel.com>
+
+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 <suresh.b.siddha@intel.com>
+       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 <jabber@gmx.org>
+Tested-by: Markus Kohn <jabber@gmx.org>
+Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
+Cc: Thomas Renninger <trenn@novell.com>
+Cc: Rafael Wysocki <rjw@novell.com>
+Cc: Venkatesh Pallipadi <venki@google.com>
+LKML-Reference: <1296694975.4418.402.camel@sbsiddha-MOBL3.sc.intel.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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;
+ }