Update to 3.4.2
svn path=/dists/trunk/linux-2.6/; revision=19113
This commit is contained in:
parent
ee3b09b195
commit
d4d5cf7274
|
@ -1,4 +1,7 @@
|
|||
linux-2.6 (3.4.1-1~experimental.2) UNRELEASED; urgency=low
|
||||
linux-2.6 (3.4.2-1~experimental.1) UNRELEASED; urgency=low
|
||||
|
||||
* New upstream stable update:
|
||||
http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.4.2
|
||||
|
||||
[ Ben Hutchings ]
|
||||
* [ia64] Export <asm/cmpxchg.h> to userland (fixes FTBFS)
|
||||
|
|
|
@ -1,49 +0,0 @@
|
|||
From: Andy Whitcroft <apw@canonical.com>
|
||||
Date: Thu, 3 May 2012 14:48:26 +0100
|
||||
Subject: ACPI battery: only refresh the sysfs files when pertinent
|
||||
information changes
|
||||
|
||||
commit c5971456964290da7e98222892797b71ef793e62 upstream.
|
||||
|
||||
We only need to regenerate the sysfs files when the capacity units
|
||||
change, avoid the update otherwise.
|
||||
|
||||
The origin of this issue is dates way back to 2.6.38:
|
||||
da8aeb92d4853f37e281f11fddf61f9c7d84c3cd
|
||||
(ACPI / Battery: Update information on info notification and resume)
|
||||
|
||||
Signed-off-by: Andy Whitcroft <apw@canonical.com>
|
||||
Tested-by: Ralf Jung <post@ralfj.de>
|
||||
Signed-off-by: Len Brown <len.brown@intel.com>
|
||||
---
|
||||
drivers/acpi/battery.c | 10 +++++++++-
|
||||
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
|
||||
index 86933ca..7dd3f9f 100644
|
||||
--- a/drivers/acpi/battery.c
|
||||
+++ b/drivers/acpi/battery.c
|
||||
@@ -643,11 +643,19 @@ static int acpi_battery_update(struct acpi_battery *battery)
|
||||
|
||||
static void acpi_battery_refresh(struct acpi_battery *battery)
|
||||
{
|
||||
+ int power_unit;
|
||||
+
|
||||
if (!battery->bat.dev)
|
||||
return;
|
||||
|
||||
+ power_unit = battery->power_unit;
|
||||
+
|
||||
acpi_battery_get_info(battery);
|
||||
- /* The battery may have changed its reporting units. */
|
||||
+
|
||||
+ if (power_unit == battery->power_unit)
|
||||
+ return;
|
||||
+
|
||||
+ /* The battery has changed its reporting units. */
|
||||
sysfs_remove_battery(battery);
|
||||
sysfs_add_battery(battery);
|
||||
}
|
||||
--
|
||||
1.7.10
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
From: James Bottomley <jbottomley@parallels.com>
|
||||
Date: Wed, 30 May 2012 09:45:39 +0000
|
||||
Subject: [SCSI] fix scsi_wait_scan
|
||||
|
||||
commit 1ff2f40305772b159a91c19590ee159d3a504afc upstream.
|
||||
|
||||
Commit c751085943362143f84346d274e0011419c84202
|
||||
Author: Rafael J. Wysocki <rjw@sisk.pl>
|
||||
Date: Sun Apr 12 20:06:56 2009 +0200
|
||||
|
||||
PM/Hibernate: Wait for SCSI devices scan to complete during resume
|
||||
|
||||
Broke the scsi_wait_scan module in 2.6.30. Apparently debian still uses it so
|
||||
fix it and backport to stable before removing it in 3.6.
|
||||
|
||||
The breakage is caused because the function template in
|
||||
include/scsi/scsi_scan.h is defined to be a nop unless SCSI is built in.
|
||||
That means that in the modular case (which is every distro), the
|
||||
scsi_wait_scan module does a simple async_synchronize_full() instead of
|
||||
waiting for scans.
|
||||
|
||||
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
---
|
||||
drivers/scsi/scsi_wait_scan.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/scsi/scsi_wait_scan.c b/drivers/scsi/scsi_wait_scan.c
|
||||
index 74708fc..ae78148 100644
|
||||
--- a/drivers/scsi/scsi_wait_scan.c
|
||||
+++ b/drivers/scsi/scsi_wait_scan.c
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/device.h>
|
||||
-#include <scsi/scsi_scan.h>
|
||||
+#include "scsi_priv.h"
|
||||
|
||||
static int __init wait_scan_init(void)
|
||||
{
|
|
@ -1,105 +0,0 @@
|
|||
From: Dave Hansen <dave@linux.vnet.ibm.com>
|
||||
Date: Tue, 29 May 2012 15:06:46 -0700
|
||||
Subject: hugetlb: fix resv_map leak in error path
|
||||
|
||||
commit c50ac050811d6485616a193eb0f37bfbd191cc89 upstream.
|
||||
|
||||
When called for anonymous (non-shared) mappings, hugetlb_reserve_pages()
|
||||
does a resv_map_alloc(). It depends on code in hugetlbfs's
|
||||
vm_ops->close() to release that allocation.
|
||||
|
||||
However, in the mmap() failure path, we do a plain unmap_region() without
|
||||
the remove_vma() which actually calls vm_ops->close().
|
||||
|
||||
This is a decent fix. This leak could get reintroduced if new code (say,
|
||||
after hugetlb_reserve_pages() in hugetlbfs_file_mmap()) decides to return
|
||||
an error. But, I think it would have to unroll the reservation anyway.
|
||||
|
||||
Christoph's test case:
|
||||
|
||||
http://marc.info/?l=linux-mm&m=133728900729735
|
||||
|
||||
This patch applies to 3.4 and later. A version for earlier kernels is at
|
||||
https://lkml.org/lkml/2012/5/22/418.
|
||||
|
||||
Signed-off-by: Dave Hansen <dave@linux.vnet.ibm.com>
|
||||
Acked-by: Mel Gorman <mel@csn.ul.ie>
|
||||
Acked-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
|
||||
Reported-by: Christoph Lameter <cl@linux.com>
|
||||
Tested-by: Christoph Lameter <cl@linux.com>
|
||||
Cc: Andrea Arcangeli <aarcange@redhat.com>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
---
|
||||
mm/hugetlb.c | 28 ++++++++++++++++++++++------
|
||||
1 file changed, 22 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
|
||||
index 41a647d..285a81e 100644
|
||||
--- a/mm/hugetlb.c
|
||||
+++ b/mm/hugetlb.c
|
||||
@@ -2157,6 +2157,15 @@ static void hugetlb_vm_op_open(struct vm_area_struct *vma)
|
||||
kref_get(&reservations->refs);
|
||||
}
|
||||
|
||||
+static void resv_map_put(struct vm_area_struct *vma)
|
||||
+{
|
||||
+ struct resv_map *reservations = vma_resv_map(vma);
|
||||
+
|
||||
+ if (!reservations)
|
||||
+ return;
|
||||
+ kref_put(&reservations->refs, resv_map_release);
|
||||
+}
|
||||
+
|
||||
static void hugetlb_vm_op_close(struct vm_area_struct *vma)
|
||||
{
|
||||
struct hstate *h = hstate_vma(vma);
|
||||
@@ -2173,7 +2182,7 @@ static void hugetlb_vm_op_close(struct vm_area_struct *vma)
|
||||
reserve = (end - start) -
|
||||
region_count(&reservations->regions, start, end);
|
||||
|
||||
- kref_put(&reservations->refs, resv_map_release);
|
||||
+ resv_map_put(vma);
|
||||
|
||||
if (reserve) {
|
||||
hugetlb_acct_memory(h, -reserve);
|
||||
@@ -2991,12 +3000,16 @@ int hugetlb_reserve_pages(struct inode *inode,
|
||||
set_vma_resv_flags(vma, HPAGE_RESV_OWNER);
|
||||
}
|
||||
|
||||
- if (chg < 0)
|
||||
- return chg;
|
||||
+ if (chg < 0) {
|
||||
+ ret = chg;
|
||||
+ goto out_err;
|
||||
+ }
|
||||
|
||||
/* There must be enough pages in the subpool for the mapping */
|
||||
- if (hugepage_subpool_get_pages(spool, chg))
|
||||
- return -ENOSPC;
|
||||
+ if (hugepage_subpool_get_pages(spool, chg)) {
|
||||
+ ret = -ENOSPC;
|
||||
+ goto out_err;
|
||||
+ }
|
||||
|
||||
/*
|
||||
* Check enough hugepages are available for the reservation.
|
||||
@@ -3005,7 +3018,7 @@ int hugetlb_reserve_pages(struct inode *inode,
|
||||
ret = hugetlb_acct_memory(h, chg);
|
||||
if (ret < 0) {
|
||||
hugepage_subpool_put_pages(spool, chg);
|
||||
- return ret;
|
||||
+ goto out_err;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -3022,6 +3035,9 @@ int hugetlb_reserve_pages(struct inode *inode,
|
||||
if (!vma || vma->vm_flags & VM_MAYSHARE)
|
||||
region_add(&inode->i_mapping->private_list, from, to);
|
||||
return 0;
|
||||
+out_err:
|
||||
+ resv_map_put(vma);
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
void hugetlb_unreserve_pages(struct inode *inode, long offset, long freed)
|
|
@ -1,66 +0,0 @@
|
|||
From: Dave Hansen <dave@linux.vnet.ibm.com>
|
||||
Date: Wed, 30 May 2012 07:51:07 -0700
|
||||
Subject: mm: fix vma_resv_map() NULL pointer
|
||||
|
||||
commit 4523e1458566a0e8ecfaff90f380dd23acc44d27 upstream.
|
||||
|
||||
hugetlb_reserve_pages() can be used for either normal file-backed
|
||||
hugetlbfs mappings, or MAP_HUGETLB. In the MAP_HUGETLB, semi-anonymous
|
||||
mode, there is not a VMA around. The new call to resv_map_put() assumed
|
||||
that there was, and resulted in a NULL pointer dereference:
|
||||
|
||||
BUG: unable to handle kernel NULL pointer dereference at 0000000000000030
|
||||
IP: vma_resv_map+0x9/0x30
|
||||
PGD 141453067 PUD 1421e1067 PMD 0
|
||||
Oops: 0000 [#1] PREEMPT SMP
|
||||
...
|
||||
Pid: 14006, comm: trinity-child6 Not tainted 3.4.0+ #36
|
||||
RIP: vma_resv_map+0x9/0x30
|
||||
...
|
||||
Process trinity-child6 (pid: 14006, threadinfo ffff8801414e0000, task ffff8801414f26b0)
|
||||
Call Trace:
|
||||
resv_map_put+0xe/0x40
|
||||
hugetlb_reserve_pages+0xa6/0x1d0
|
||||
hugetlb_file_setup+0x102/0x2c0
|
||||
newseg+0x115/0x360
|
||||
ipcget+0x1ce/0x310
|
||||
sys_shmget+0x5a/0x60
|
||||
system_call_fastpath+0x16/0x1b
|
||||
|
||||
This was reported by Dave Jones, but was reproducible with the
|
||||
libhugetlbfs test cases, so shame on me for not running them in the
|
||||
first place.
|
||||
|
||||
With this, the oops is gone, and the output of libhugetlbfs's
|
||||
run_tests.py is identical to plain 3.4 again.
|
||||
|
||||
[ Marked for stable, since this was introduced by commit c50ac050811d
|
||||
("hugetlb: fix resv_map leak in error path") which was also marked for
|
||||
stable ]
|
||||
|
||||
Reported-by: Dave Jones <davej@redhat.com>
|
||||
Cc: Mel Gorman <mel@csn.ul.ie>
|
||||
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
|
||||
Cc: Christoph Lameter <cl@linux.com>
|
||||
Cc: Andrea Arcangeli <aarcange@redhat.com>
|
||||
Cc: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
---
|
||||
mm/hugetlb.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
|
||||
index 285a81e..e198831 100644
|
||||
--- a/mm/hugetlb.c
|
||||
+++ b/mm/hugetlb.c
|
||||
@@ -3036,7 +3036,8 @@ int hugetlb_reserve_pages(struct inode *inode,
|
||||
region_add(&inode->i_mapping->private_list, from, to);
|
||||
return 0;
|
||||
out_err:
|
||||
- resv_map_put(vma);
|
||||
+ if (vma)
|
||||
+ resv_map_put(vma);
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -1,159 +0,0 @@
|
|||
From: Imre Kaloz <kaloz@openwrt.org>
|
||||
Subject: [RFC/PATCH] ARM: ixp4xx gpiolib support
|
||||
Date: Mon, 5 Sep 2011 14:49:51 +0200
|
||||
|
||||
This patch adds gpiolib support for the IXP4xx platform
|
||||
|
||||
Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
||||
[bwh: Forward-ported to 3.4]
|
||||
---
|
||||
arch/arm/Kconfig | 2 +-
|
||||
arch/arm/mach-ixp4xx/common.c | 39 +++++++++++++++++++++++++
|
||||
arch/arm/mach-ixp4xx/include/mach/gpio.h | 46 ++++++++++--------------------
|
||||
3 files changed, 55 insertions(+), 32 deletions(-)
|
||||
|
||||
Index: source_armel_none/arch/arm/Kconfig
|
||||
===================================================================
|
||||
--- source_armel_none.orig/arch/arm/Kconfig 2012-01-07 20:47:15.000000000 +0100
|
||||
+++ source_armel_none/arch/arm/Kconfig 2012-01-07 20:51:00.390593917 +0100
|
||||
@@ -520,7 +520,7 @@ config ARCH_IXP4XX
|
||||
select ARCH_HAS_DMA_SET_COHERENT_MASK
|
||||
select CLKSRC_MMIO
|
||||
select CPU_XSCALE
|
||||
- select GENERIC_GPIO
|
||||
+ select ARCH_REQUIRE_GPIOLIB
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select MIGHT_HAVE_PCI
|
||||
select NEED_MACH_IO_H
|
||||
Index: source_armel_none/arch/arm/mach-ixp4xx/common.c
|
||||
===================================================================
|
||||
--- source_armel_none.orig/arch/arm/mach-ixp4xx/common.c 2012-01-07 20:47:15.000000000 +0100
|
||||
+++ source_armel_none/arch/arm/mach-ixp4xx/common.c 2012-01-07 20:51:00.390593917 +0100
|
||||
@@ -37,6 +37,7 @@
|
||||
#include <asm/irq.h>
|
||||
#include <asm/sched_clock.h>
|
||||
#include <asm/system_misc.h>
|
||||
+#include <asm/gpio.h>
|
||||
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/irq.h>
|
||||
@@ -376,12 +377,50 @@ static struct platform_device *ixp46x_de
|
||||
unsigned long ixp4xx_exp_bus_size;
|
||||
EXPORT_SYMBOL(ixp4xx_exp_bus_size);
|
||||
|
||||
+static int ixp4xx_gpio_direction_input(struct gpio_chip *chip, unsigned gpio)
|
||||
+{
|
||||
+ gpio_line_config(gpio, IXP4XX_GPIO_IN);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int ixp4xx_gpio_direction_output(struct gpio_chip *chip, unsigned gpio, int level)
|
||||
+{
|
||||
+ gpio_line_set(gpio, level);
|
||||
+ gpio_line_config(gpio, IXP4XX_GPIO_OUT);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int ixp4xx_gpio_get_value(struct gpio_chip *chip, unsigned gpio)
|
||||
+{
|
||||
+ int value;
|
||||
+
|
||||
+ gpio_line_get(gpio, &value);
|
||||
+ return value;
|
||||
+}
|
||||
+
|
||||
+static void ixp4xx_gpio_set_value(struct gpio_chip *chip, unsigned gpio, int value)
|
||||
+{
|
||||
+ gpio_line_set(gpio, value);
|
||||
+}
|
||||
+
|
||||
+static struct gpio_chip ixp4xx_gpio_chip = {
|
||||
+ .label = "IXP4XX_GPIO_CHIP",
|
||||
+ .direction_input = ixp4xx_gpio_direction_input,
|
||||
+ .direction_output = ixp4xx_gpio_direction_output,
|
||||
+ .get = ixp4xx_gpio_get_value,
|
||||
+ .set = ixp4xx_gpio_set_value,
|
||||
+ .base = 0,
|
||||
+ .ngpio = 16,
|
||||
+};
|
||||
+
|
||||
void __init ixp4xx_sys_init(void)
|
||||
{
|
||||
ixp4xx_exp_bus_size = SZ_16M;
|
||||
|
||||
platform_add_devices(ixp4xx_devices, ARRAY_SIZE(ixp4xx_devices));
|
||||
|
||||
+ gpiochip_add(&ixp4xx_gpio_chip);
|
||||
+
|
||||
if (cpu_is_ixp46x()) {
|
||||
int region;
|
||||
|
||||
Index: source_armel_none/arch/arm/mach-ixp4xx/include/mach/gpio.h
|
||||
===================================================================
|
||||
--- source_armel_none.orig/arch/arm/mach-ixp4xx/include/mach/gpio.h 2012-01-07 20:47:15.000000000 +0100
|
||||
+++ source_armel_none/arch/arm/mach-ixp4xx/include/mach/gpio.h 2012-01-07 20:51:00.390593917 +0100
|
||||
@@ -27,49 +27,33 @@
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <mach/hardware.h>
|
||||
+#include <asm-generic/gpio.h> /* cansleep wrappers */
|
||||
|
||||
#define __ARM_GPIOLIB_COMPLEX
|
||||
|
||||
-static inline int gpio_request(unsigned gpio, const char *label)
|
||||
-{
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-static inline void gpio_free(unsigned gpio)
|
||||
-{
|
||||
- might_sleep();
|
||||
-
|
||||
- return;
|
||||
-}
|
||||
-
|
||||
-static inline int gpio_direction_input(unsigned gpio)
|
||||
-{
|
||||
- gpio_line_config(gpio, IXP4XX_GPIO_IN);
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-static inline int gpio_direction_output(unsigned gpio, int level)
|
||||
-{
|
||||
- gpio_line_set(gpio, level);
|
||||
- gpio_line_config(gpio, IXP4XX_GPIO_OUT);
|
||||
- return 0;
|
||||
-}
|
||||
+#define NR_BUILTIN_GPIO 16
|
||||
|
||||
static inline int gpio_get_value(unsigned gpio)
|
||||
{
|
||||
- int value;
|
||||
-
|
||||
- gpio_line_get(gpio, &value);
|
||||
-
|
||||
- return value;
|
||||
+ if (gpio < NR_BUILTIN_GPIO)
|
||||
+ {
|
||||
+ int value;
|
||||
+ gpio_line_get(gpio, &value);
|
||||
+ return value;
|
||||
+ }
|
||||
+ else
|
||||
+ return __gpio_get_value(gpio);
|
||||
}
|
||||
|
||||
static inline void gpio_set_value(unsigned gpio, int value)
|
||||
{
|
||||
- gpio_line_set(gpio, value);
|
||||
+ if (gpio < NR_BUILTIN_GPIO)
|
||||
+ gpio_line_set(gpio, value);
|
||||
+ else
|
||||
+ __gpio_set_value(gpio, value);
|
||||
}
|
||||
|
||||
-#include <asm-generic/gpio.h> /* cansleep wrappers */
|
||||
+#define gpio_cansleep __gpio_cansleep
|
||||
|
||||
extern int gpio_to_irq(int gpio);
|
||||
#define gpio_to_irq gpio_to_irq
|
|
@ -41,7 +41,6 @@
|
|||
+ bugfix/ia64/nouveau-ACPI-support-is-dependent-on-X86.patch
|
||||
+ bugfix/arm/ixp4xx_iobe.patch
|
||||
+ debian/x86-memtest-WARN-if-bad-RAM-found.patch
|
||||
+ bugfix/arm/ARM-ixp4xx-gpiolib-support.patch
|
||||
+ bugfix/alpha/alpha-add-io-read-write-16-32-be-functions.patch
|
||||
|
||||
+ features/all/fs-symlink-restrictions-on-sticky-directories.patch
|
||||
|
@ -59,8 +58,6 @@
|
|||
+ features/all/wacom/0025-Input-wacom-add-0xE5-MT-device-support.patch
|
||||
+ features/all/wacom/0026-Input-wacom-return-proper-error-if-usb_get_extra_des.patch
|
||||
|
||||
+ bugfix/all/acpi-battery-only-refresh-the-sysfs-files-when-pertinent.patch
|
||||
|
||||
# Update be2net driver to 3.5ish
|
||||
+ features/all/be2net/0043-be2net-fix-ethtool-get-settings.patch
|
||||
+ features/all/be2net/0044-be2net-Fix-VLAN-multicast-packet-reception.patch
|
||||
|
@ -89,8 +86,5 @@
|
|||
+ features/all/codel/0007-fq_codel-should-use-qdisc-backlog-as-threshold.patch
|
||||
|
||||
+ bugfix/x86/mm-pmd_read_atomic-fix-32bit-pae-pmd-walk-vs-pmd_populate-smp-race.patch
|
||||
+ bugfix/all/hugetlb-fix-resv_map-leak-in-error-path.patch
|
||||
+ bugfix/all/mm-fix-vma_resv_map-null-pointer.patch
|
||||
|
||||
+ bugfix/all/fix-scsi_wait_scan.patch
|
||||
+ bugfix/ia64/IA64-Export-asm-cmpxchg.h-to-userland.patch
|
||||
|
|
Loading…
Reference in New Issue