Update to 3.2.15
svn path=/dists/sid/linux-2.6/; revision=18924
This commit is contained in:
parent
43569a1e44
commit
6d0e915de9
|
@ -1,4 +1,13 @@
|
|||
linux-2.6 (3.2.14-2) UNRELEASED; urgency=low
|
||||
linux-2.6 (3.2.15-1) UNRELEASED; urgency=low
|
||||
|
||||
* New upstream stable update:
|
||||
http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.15
|
||||
- drm/radeon/kms: fix fans after resume (Closes: #596741)
|
||||
- sysctl: fix write access to dmesg_restrict/kptr_restrict
|
||||
- x86/PCI: use host bridge _CRS info on MSI MS-7253 (Closes: #619034)
|
||||
- nfs: Fix length of buffer copied in __nfs4_get_acl_uncached
|
||||
- [x86] ioat: fix size of 'completion' for Xen (Closes: #660554)
|
||||
- cred: copy_process() should clear child->replacement_session_keyring
|
||||
|
||||
[ Ben Hutchings ]
|
||||
* net: fix /proc/net/dev regression (Closes: #659499)
|
||||
|
@ -6,15 +15,9 @@ linux-2.6 (3.2.14-2) UNRELEASED; urgency=low
|
|||
* [x86] drm/i915: mask transcoder select bits before setting them on LVDS
|
||||
* [armhf/mx5,mipsel/loongson-2f] input: Enable INPUT_TOUCHSCREEN
|
||||
(Closes: #668036)
|
||||
* TOMOYO: Fix mount flags checking order.
|
||||
* drm/radeon/kms: fix fans after resume (Closes: #596741)
|
||||
* [x86] hv: Update all Hyper-V drivers to 3.4-rc1 (Closes: #661318)
|
||||
* nfs: Fix length of buffer copied in __nfs4_get_acl_uncached
|
||||
* hugetlb: fix race condition in hugetlb_fault()
|
||||
|
||||
[ Jonathan Nieder ]
|
||||
* [x86] ioat: fix size of 'completion' for Xen (Closes: #660554)
|
||||
|
||||
-- Ben Hutchings <ben@decadent.org.uk> Sat, 07 Apr 2012 01:56:13 +0100
|
||||
|
||||
linux-2.6 (3.2.14-1) unstable; urgency=low
|
||||
|
|
|
@ -1,89 +0,0 @@
|
|||
From: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
|
||||
Date: Wed, 29 Feb 2012 21:53:22 +0900
|
||||
Subject: [PATCH] TOMOYO: Fix mount flags checking order.
|
||||
|
||||
commit df91e49477a9be15921cb2854e1d12a3bdb5e425 upstream.
|
||||
|
||||
Userspace can pass in arbitrary combinations of MS_* flags to mount().
|
||||
|
||||
If both MS_BIND and one of MS_SHARED/MS_PRIVATE/MS_SLAVE/MS_UNBINDABLE are
|
||||
passed, device name which should be checked for MS_BIND was not checked because
|
||||
MS_SHARED/MS_PRIVATE/MS_SLAVE/MS_UNBINDABLE had higher priority than MS_BIND.
|
||||
|
||||
If both one of MS_BIND/MS_MOVE and MS_REMOUNT are passed, device name which
|
||||
should not be checked for MS_REMOUNT was checked because MS_BIND/MS_MOVE had
|
||||
higher priority than MS_REMOUNT.
|
||||
|
||||
Fix these bugs by changing priority to MS_REMOUNT -> MS_BIND ->
|
||||
MS_SHARED/MS_PRIVATE/MS_SLAVE/MS_UNBINDABLE -> MS_MOVE as with do_mount() does.
|
||||
|
||||
Also, unconditionally return -EINVAL if more than one of
|
||||
MS_SHARED/MS_PRIVATE/MS_SLAVE/MS_UNBINDABLE is passed so that TOMOYO will not
|
||||
generate inaccurate audit logs, for commit 7a2e8a8f "VFS: Sanity check mount
|
||||
flags passed to change_mnt_propagation()" clarified that these flags must be
|
||||
exclusively passed.
|
||||
|
||||
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
|
||||
Signed-off-by: James Morris <james.l.morris@oracle.com>
|
||||
---
|
||||
security/tomoyo/mount.c | 38 ++++++++++++++++++++------------------
|
||||
1 file changed, 20 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/security/tomoyo/mount.c b/security/tomoyo/mount.c
|
||||
index bee09d0..fe00cdf 100644
|
||||
--- a/security/tomoyo/mount.c
|
||||
+++ b/security/tomoyo/mount.c
|
||||
@@ -199,30 +199,32 @@ int tomoyo_mount_permission(char *dev_name, struct path *path,
|
||||
if (flags & MS_REMOUNT) {
|
||||
type = tomoyo_mounts[TOMOYO_MOUNT_REMOUNT];
|
||||
flags &= ~MS_REMOUNT;
|
||||
- }
|
||||
- if (flags & MS_MOVE) {
|
||||
- type = tomoyo_mounts[TOMOYO_MOUNT_MOVE];
|
||||
- flags &= ~MS_MOVE;
|
||||
- }
|
||||
- if (flags & MS_BIND) {
|
||||
+ } else if (flags & MS_BIND) {
|
||||
type = tomoyo_mounts[TOMOYO_MOUNT_BIND];
|
||||
flags &= ~MS_BIND;
|
||||
- }
|
||||
- if (flags & MS_UNBINDABLE) {
|
||||
- type = tomoyo_mounts[TOMOYO_MOUNT_MAKE_UNBINDABLE];
|
||||
- flags &= ~MS_UNBINDABLE;
|
||||
- }
|
||||
- if (flags & MS_PRIVATE) {
|
||||
+ } else if (flags & MS_SHARED) {
|
||||
+ if (flags & (MS_PRIVATE | MS_SLAVE | MS_UNBINDABLE))
|
||||
+ return -EINVAL;
|
||||
+ type = tomoyo_mounts[TOMOYO_MOUNT_MAKE_SHARED];
|
||||
+ flags &= ~MS_SHARED;
|
||||
+ } else if (flags & MS_PRIVATE) {
|
||||
+ if (flags & (MS_SHARED | MS_SLAVE | MS_UNBINDABLE))
|
||||
+ return -EINVAL;
|
||||
type = tomoyo_mounts[TOMOYO_MOUNT_MAKE_PRIVATE];
|
||||
flags &= ~MS_PRIVATE;
|
||||
- }
|
||||
- if (flags & MS_SLAVE) {
|
||||
+ } else if (flags & MS_SLAVE) {
|
||||
+ if (flags & (MS_SHARED | MS_PRIVATE | MS_UNBINDABLE))
|
||||
+ return -EINVAL;
|
||||
type = tomoyo_mounts[TOMOYO_MOUNT_MAKE_SLAVE];
|
||||
flags &= ~MS_SLAVE;
|
||||
- }
|
||||
- if (flags & MS_SHARED) {
|
||||
- type = tomoyo_mounts[TOMOYO_MOUNT_MAKE_SHARED];
|
||||
- flags &= ~MS_SHARED;
|
||||
+ } else if (flags & MS_UNBINDABLE) {
|
||||
+ if (flags & (MS_SHARED | MS_PRIVATE | MS_SLAVE))
|
||||
+ return -EINVAL;
|
||||
+ type = tomoyo_mounts[TOMOYO_MOUNT_MAKE_UNBINDABLE];
|
||||
+ flags &= ~MS_UNBINDABLE;
|
||||
+ } else if (flags & MS_MOVE) {
|
||||
+ type = tomoyo_mounts[TOMOYO_MOUNT_MOVE];
|
||||
+ flags &= ~MS_MOVE;
|
||||
}
|
||||
if (!type)
|
||||
type = "<NULL>";
|
||||
--
|
||||
1.7.9.5
|
||||
|
|
@ -1,74 +0,0 @@
|
|||
From: Alex Deucher <alexander.deucher@amd.com>
|
||||
Date: Thu, 29 Mar 2012 19:04:08 -0400
|
||||
Subject: [PATCH] drm/radeon/kms: fix fans after resume
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
commit 402976fe51b2d1a58a29ba06fa1ca5ace3a4cdcd upstream.
|
||||
|
||||
On pre-R600 asics, the SpeedFanControl table is not
|
||||
executed as part of ASIC_Init as it is on newer asics.
|
||||
|
||||
Fixes:
|
||||
https://bugzilla.kernel.org/show_bug.cgi?id=29412
|
||||
|
||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/radeon/atom.c | 15 ++++++++++++++-
|
||||
drivers/gpu/drm/radeon/atom.h | 1 +
|
||||
2 files changed, 15 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/atom.c b/drivers/gpu/drm/radeon/atom.c
|
||||
index d1bd239..5ce9bf5 100644
|
||||
--- a/drivers/gpu/drm/radeon/atom.c
|
||||
+++ b/drivers/gpu/drm/radeon/atom.c
|
||||
@@ -1306,8 +1306,11 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
|
||||
|
||||
int atom_asic_init(struct atom_context *ctx)
|
||||
{
|
||||
+ struct radeon_device *rdev = ctx->card->dev->dev_private;
|
||||
int hwi = CU16(ctx->data_table + ATOM_DATA_FWI_PTR);
|
||||
uint32_t ps[16];
|
||||
+ int ret;
|
||||
+
|
||||
memset(ps, 0, 64);
|
||||
|
||||
ps[0] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFSCLK_PTR));
|
||||
@@ -1317,7 +1320,17 @@ int atom_asic_init(struct atom_context *ctx)
|
||||
|
||||
if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
|
||||
return 1;
|
||||
- return atom_execute_table(ctx, ATOM_CMD_INIT, ps);
|
||||
+ ret = atom_execute_table(ctx, ATOM_CMD_INIT, ps);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ memset(ps, 0, 64);
|
||||
+
|
||||
+ if (rdev->family < CHIP_R600) {
|
||||
+ if (CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_SPDFANCNTL))
|
||||
+ atom_execute_table(ctx, ATOM_CMD_SPDFANCNTL, ps);
|
||||
+ }
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
void atom_destroy(struct atom_context *ctx)
|
||||
diff --git a/drivers/gpu/drm/radeon/atom.h b/drivers/gpu/drm/radeon/atom.h
|
||||
index 93cfe20..25fea63 100644
|
||||
--- a/drivers/gpu/drm/radeon/atom.h
|
||||
+++ b/drivers/gpu/drm/radeon/atom.h
|
||||
@@ -44,6 +44,7 @@
|
||||
#define ATOM_CMD_SETSCLK 0x0A
|
||||
#define ATOM_CMD_SETMCLK 0x0B
|
||||
#define ATOM_CMD_SETPCLK 0x0C
|
||||
+#define ATOM_CMD_SPDFANCNTL 0x39
|
||||
|
||||
#define ATOM_DATA_FWI_PTR 0xC
|
||||
#define ATOM_DATA_IIO_PTR 0x32
|
||||
--
|
||||
1.7.9.5
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
From: Sachin Prabhu <sprabhu@redhat.com>
|
||||
Date: Thu, 22 Mar 2012 16:46:28 +0000
|
||||
Subject: [PATCH] Fix length of buffer copied in __nfs4_get_acl_uncached
|
||||
|
||||
commit 20e0fa98b751facf9a1101edaefbc19c82616a68 upstream.
|
||||
|
||||
_copy_from_pages() used to copy data from the temporary buffer to the
|
||||
user passed buffer is passed the wrong size parameter when copying
|
||||
data. res.acl_len contains both the bitmap and acl lenghts while
|
||||
acl_len contains the acl length after adjusting for the bitmap size.
|
||||
|
||||
Signed-off-by: Sachin Prabhu <sprabhu@redhat.com>
|
||||
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
|
||||
---
|
||||
fs/nfs/nfs4proc.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
|
||||
index e809d23..45df7d4 100644
|
||||
--- a/fs/nfs/nfs4proc.c
|
||||
+++ b/fs/nfs/nfs4proc.c
|
||||
@@ -3712,7 +3712,7 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu
|
||||
if (acl_len > buflen)
|
||||
goto out_free;
|
||||
_copy_from_pages(buf, pages, res.acl_data_offset,
|
||||
- res.acl_len);
|
||||
+ acl_len);
|
||||
}
|
||||
ret = acl_len;
|
||||
out_free:
|
||||
--
|
||||
1.7.9.5
|
||||
|
|
@ -1,123 +0,0 @@
|
|||
Queued as http://git.infradead.org/users/dedekind/l2-mtd.git/commit/40421b7fb59974bef9362b74c8d7b92944c578c4
|
||||
|
||||
From: Marc Kleine-Budde <mkl@blackshift.org>
|
||||
To: linux-kernel@vger.kernel.org
|
||||
Subject: [PATCH 2/2] mtd: ixp4xx: oops in ixp4xx_flash_probe
|
||||
Date: Wed, 8 Feb 2012 20:24:29 +0100
|
||||
Message-Id: <1328729069-21308-3-git-send-email-mkl@blackshift.org>
|
||||
In-Reply-To: <1328729069-21308-1-git-send-email-mkl@blackshift.org>
|
||||
References: <1328729069-21308-1-git-send-email-mkl@blackshift.org>
|
||||
Cc: Marc Kleine-Budde <mkl@blackshift.org>, linux-mtd@lists.infradead.org,
|
||||
linux-arm-kernel@lists.infradead.org
|
||||
|
||||
In commit "c797533 mtd: abstract last MTD partition parser argument" the
|
||||
third argument of "mtd_device_parse_register()" changed from start address
|
||||
of the MTD device to a pointer to a struct.
|
||||
|
||||
The "ixp4xx_flash_probe()" function was not converted properly, causing
|
||||
this oops during boot:
|
||||
|
||||
Searching for RedBoot partition table in IXP4XX-Flash.0 at offset 0x7e0000
|
||||
Unable to handle kernel paging request at virtual address 50000000
|
||||
pgd = c0004000
|
||||
[50000000] *pgd=00000000
|
||||
Internal error: Oops: f5 [#1]
|
||||
CPU: 0 Not tainted (3.2.5-00002-gc809cb2 #4)
|
||||
PC is at parse_redboot_partitions+0x400/0x5b0
|
||||
LR is at parse_redboot_partitions+0x3e0/0x5b0
|
||||
pc : [<c01642ec>] lr : [<c01642cc>] psr: 20000013
|
||||
sp : c0829de4 ip : c0829de4 fp : c0829e3c
|
||||
r10: c180d000 r9 : 00000000 r8 : 00000008
|
||||
r7 : 00000200 r6 : 50000000 r5 : 00000000 r4 : c0888c00
|
||||
r3 : c0944400 r2 : 00000000 r1 : c02c6060 r0 : 00000007
|
||||
Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel
|
||||
Control: 000039ff Table: 00004000 DAC: 00000017
|
||||
Process swapper (pid: 1, stack limit = 0xc0828260)
|
||||
Stack: (0xc0829de4 to 0xc082a000)
|
||||
9de0: c0829e0c c182d000 c0179a08 c0944400 00000048 00000000 00000000
|
||||
9e00: 00020000 c0829e70 c180d000 00020000 00000000 00000000 c028ba40 c028ba18
|
||||
9e20: c028be88 50000000 c024b250 c0888c00 c0829e6c c0829e40 c0162f58 c0163ef8
|
||||
9e40: c0829e70 00000000 00000000 c0888c00 00000000 00000000 00000000 00000000
|
||||
9e60: c0829e90 c0829e70 c015ffac c0162ed8 c09418a0 c09418a0 c027cc28 c027cedc
|
||||
9e80: 00000000 c0829eb4 c0829e94 c017a464 c015ff90 00000000 c027cc30 c02a2568
|
||||
9ea0: c027cc30 c028be48 c0829ec4 c0829eb8 c01338c4 c017a318 c0829ee8 c0829ec8
|
||||
9ec0: c01323b4 c01338b4 c027cc30 c028be48 c027cc64 00000000 00000000 c0829f04
|
||||
9ee0: c0829eec c013254c c0132338 c028be48 c0829f08 c01324b8 c0829f2c c0829f08
|
||||
9f00: c0131ba0 c01324c4 c08240f8 c083fbd0 c028be48 c028a4ac c0941840 00000000
|
||||
9f20: c0829f3c c0829f30 c0132218 c0131b40 c0829f68 c0829f40 c01314c0 c0132204
|
||||
9f40: c0236120 c02765cc c028be48 c026d95c 00000013 00000000 00000000 c0829f88
|
||||
9f60: c0829f6c c0132b90 c013134c c02765cc 00000000 c026d95c 00000013 c0829f98
|
||||
9f80: c0829f8c c0133d28 c0132b1c c0829fa8 c0829f9c c026d970 c0133ce8 c0829fdc
|
||||
9fa0: c0829fac c025d270 c026d968 c028271c c0023c94 00000013 c02765cc c02766bc
|
||||
9fc0: c0023c94 00000013 00000000 00000000 c0829ff4 c0829fe0 c025d400 c025d1d8
|
||||
9fe0: 00000000 c025d380 00000000 c0829ff8 c0023c94 c025d38c 62737507 6f74735f
|
||||
Backtrace:
|
||||
[<c0163eec>] (parse_redboot_partitions+0x0/0x5b0) from [<c0162f58>] (parse_mtd_partitions+0x8c/0xdc)
|
||||
[<c0162ecc>] (parse_mtd_partitions+0x0/0xdc) from [<c015ffac>] (mtd_device_parse_register+0x28/0xc8)
|
||||
[<c015ff84>] (mtd_device_parse_register+0x0/0xc8) from [<c017a464>] (ixp4xx_flash_probe+0x158/0x1dc)
|
||||
r7:00000000 r6:c027cedc r5:c027cc28 r4:c09418a0
|
||||
[<c017a30c>] (ixp4xx_flash_probe+0x0/0x1dc) from [<c01338c4>] (platform_drv_probe+0x1c/0x20)
|
||||
r7:c028be48 r6:c027cc30 r5:c02a2568 r4:c027cc30
|
||||
[<c01338a8>] (platform_drv_probe+0x0/0x20) from [<c01323b4>] (driver_probe_device+0x88/0x18c)
|
||||
[<c013232c>] (driver_probe_device+0x0/0x18c) from [<c013254c>] (__driver_attach+0x94/0x98)
|
||||
r8:00000000 r7:00000000 r6:c027cc64 r5:c028be48 r4:c027cc30
|
||||
[<c01324b8>] (__driver_attach+0x0/0x98) from [<c0131ba0>] (bus_for_each_dev+0x6c/0x94)
|
||||
r6:c01324b8 r5:c0829f08 r4:c028be48
|
||||
[<c0131b34>] (bus_for_each_dev+0x0/0x94) from [<c0132218>] (driver_attach+0x20/0x28)
|
||||
r7:00000000 r6:c0941840 r5:c028a4ac r4:c028be48
|
||||
[<c01321f8>] (driver_attach+0x0/0x28) from [<c01314c0>] (bus_add_driver+0x180/0x25c)
|
||||
[<c0131340>] (bus_add_driver+0x0/0x25c) from [<c0132b90>] (driver_register+0x80/0x13c)
|
||||
[<c0132b10>] (driver_register+0x0/0x13c) from [<c0133d28>] (platform_driver_register+0x4c/0x60)
|
||||
r7:00000013 r6:c026d95c r5:00000000 r4:c02765cc
|
||||
[<c0133cdc>] (platform_driver_register+0x0/0x60) from [<c026d970>] (ixp4xx_flash_init+0x14/0x1c)
|
||||
[<c026d95c>] (ixp4xx_flash_init+0x0/0x1c) from [<c025d270>] (do_one_initcall+0xa4/0x17c)
|
||||
[<c025d1cc>] (do_one_initcall+0x0/0x17c) from [<c025d400>] (kernel_init+0x80/0x124)
|
||||
r9:00000000 r8:00000000 r7:00000013 r6:c0023c94 r5:c02766bc
|
||||
r4:c02765cc
|
||||
[<c025d380>] (kernel_init+0x0/0x124) from [<c0023c94>] (do_exit+0x0/0x694)
|
||||
r5:c025d380 r4:00000000
|
||||
Code: 0a000028 e3560000 e583a000 0a00001f (e5962000)
|
||||
---[ end trace bf1eac11c431d0ba ]---
|
||||
|
||||
This patch fixes the problem by filling the needed information into a
|
||||
"struct mtd_part_parser_data" and passing it to
|
||||
"mtd_device_parse_register()".
|
||||
|
||||
Cc: linux-mtd@lists.infradead.org
|
||||
Signed-off-by: Marc Kleine-Budde <mkl@blackshift.org>
|
||||
---
|
||||
drivers/mtd/maps/ixp4xx.c | 5 ++++-
|
||||
1 files changed, 4 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/mtd/maps/ixp4xx.c b/drivers/mtd/maps/ixp4xx.c
|
||||
index 8b54101..e864fc6 100644
|
||||
--- a/drivers/mtd/maps/ixp4xx.c
|
||||
+++ b/drivers/mtd/maps/ixp4xx.c
|
||||
@@ -182,6 +182,9 @@ static int ixp4xx_flash_probe(struct platform_device *dev)
|
||||
{
|
||||
struct flash_platform_data *plat = dev->dev.platform_data;
|
||||
struct ixp4xx_flash_info *info;
|
||||
+ struct mtd_part_parser_data ppdata = {
|
||||
+ .origin = dev->resource->start,
|
||||
+ };
|
||||
int err = -1;
|
||||
|
||||
if (!plat)
|
||||
@@ -247,7 +250,7 @@ static int ixp4xx_flash_probe(struct platform_device *dev)
|
||||
/* Use the fast version */
|
||||
info->map.write = ixp4xx_write16;
|
||||
|
||||
- err = mtd_device_parse_register(info->mtd, probes, dev->resource->start,
|
||||
+ err = mtd_device_parse_register(info->mtd, probes, &ppdata,
|
||||
plat->parts, plat->nr_parts);
|
||||
if (err) {
|
||||
printk(KERN_ERR "Could not parse partitions\n");
|
||||
--
|
||||
1.7.4.1
|
||||
|
||||
|
||||
_______________________________________________
|
||||
linux-arm-kernel mailing list
|
||||
linux-arm-kernel@lists.infradead.org
|
||||
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
|
||||
|
|
@ -1,210 +0,0 @@
|
|||
From: Dan Williams <dan.j.williams@intel.com>
|
||||
Date: Fri, 23 Mar 2012 13:36:42 -0700
|
||||
Subject: ioat: fix size of 'completion' for Xen
|
||||
|
||||
commit 275029353953c2117941ade84f02a2303912fad1 upstream.
|
||||
|
||||
Starting with v3.2 Jonathan reports that Xen crashes loading the ioatdma
|
||||
driver. A debug run shows:
|
||||
|
||||
ioatdma 0000:00:16.4: desc[0]: (0x300cc7000->0x300cc7040) cookie: 0 flags: 0x2 ctl: 0x29 (op: 0 int_en: 1 compl: 1)
|
||||
...
|
||||
ioatdma 0000:00:16.4: ioat_get_current_completion: phys_complete: 0xcc7000
|
||||
|
||||
...which shows that in this environment GFP_KERNEL memory may be backed
|
||||
by a 64-bit dma address. This breaks the driver's assumption that an
|
||||
unsigned long should be able to contain the physical address for
|
||||
descriptor memory. Switch to dma_addr_t which beyond being the right
|
||||
size, is the true type for the data i.e. an io-virtual address
|
||||
inidicating the engine's last processed descriptor.
|
||||
|
||||
[stable: 3.2+]
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Reported-by: Jonathan Nieder <jrnieder@gmail.com>
|
||||
Reported-by: William Dauchy <wdauchy@gmail.com>
|
||||
Tested-by: William Dauchy <wdauchy@gmail.com>
|
||||
Tested-by: Dave Jiang <dave.jiang@intel.com>
|
||||
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
|
||||
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
|
||||
---
|
||||
drivers/dma/ioat/dma.c | 16 ++++++++--------
|
||||
drivers/dma/ioat/dma.h | 6 +++---
|
||||
drivers/dma/ioat/dma_v2.c | 8 ++++----
|
||||
drivers/dma/ioat/dma_v3.c | 8 ++++----
|
||||
4 files changed, 19 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/drivers/dma/ioat/dma.c b/drivers/dma/ioat/dma.c
|
||||
index a4d6cb0c0343..659518015972 100644
|
||||
--- a/drivers/dma/ioat/dma.c
|
||||
+++ b/drivers/dma/ioat/dma.c
|
||||
@@ -548,9 +548,9 @@ void ioat_dma_unmap(struct ioat_chan_common *chan, enum dma_ctrl_flags flags,
|
||||
PCI_DMA_TODEVICE, flags, 0);
|
||||
}
|
||||
|
||||
-unsigned long ioat_get_current_completion(struct ioat_chan_common *chan)
|
||||
+dma_addr_t ioat_get_current_completion(struct ioat_chan_common *chan)
|
||||
{
|
||||
- unsigned long phys_complete;
|
||||
+ dma_addr_t phys_complete;
|
||||
u64 completion;
|
||||
|
||||
completion = *chan->completion;
|
||||
@@ -571,7 +571,7 @@ unsigned long ioat_get_current_completion(struct ioat_chan_common *chan)
|
||||
}
|
||||
|
||||
bool ioat_cleanup_preamble(struct ioat_chan_common *chan,
|
||||
- unsigned long *phys_complete)
|
||||
+ dma_addr_t *phys_complete)
|
||||
{
|
||||
*phys_complete = ioat_get_current_completion(chan);
|
||||
if (*phys_complete == chan->last_completion)
|
||||
@@ -582,14 +582,14 @@ bool ioat_cleanup_preamble(struct ioat_chan_common *chan,
|
||||
return true;
|
||||
}
|
||||
|
||||
-static void __cleanup(struct ioat_dma_chan *ioat, unsigned long phys_complete)
|
||||
+static void __cleanup(struct ioat_dma_chan *ioat, dma_addr_t phys_complete)
|
||||
{
|
||||
struct ioat_chan_common *chan = &ioat->base;
|
||||
struct list_head *_desc, *n;
|
||||
struct dma_async_tx_descriptor *tx;
|
||||
|
||||
- dev_dbg(to_dev(chan), "%s: phys_complete: %lx\n",
|
||||
- __func__, phys_complete);
|
||||
+ dev_dbg(to_dev(chan), "%s: phys_complete: %llx\n",
|
||||
+ __func__, (unsigned long long) phys_complete);
|
||||
list_for_each_safe(_desc, n, &ioat->used_desc) {
|
||||
struct ioat_desc_sw *desc;
|
||||
|
||||
@@ -655,7 +655,7 @@ static void __cleanup(struct ioat_dma_chan *ioat, unsigned long phys_complete)
|
||||
static void ioat1_cleanup(struct ioat_dma_chan *ioat)
|
||||
{
|
||||
struct ioat_chan_common *chan = &ioat->base;
|
||||
- unsigned long phys_complete;
|
||||
+ dma_addr_t phys_complete;
|
||||
|
||||
prefetch(chan->completion);
|
||||
|
||||
@@ -701,7 +701,7 @@ static void ioat1_timer_event(unsigned long data)
|
||||
mod_timer(&chan->timer, jiffies + COMPLETION_TIMEOUT);
|
||||
spin_unlock_bh(&ioat->desc_lock);
|
||||
} else if (test_bit(IOAT_COMPLETION_PENDING, &chan->state)) {
|
||||
- unsigned long phys_complete;
|
||||
+ dma_addr_t phys_complete;
|
||||
|
||||
spin_lock_bh(&ioat->desc_lock);
|
||||
/* if we haven't made progress and we have already
|
||||
diff --git a/drivers/dma/ioat/dma.h b/drivers/dma/ioat/dma.h
|
||||
index 5216c8a92a21..8bebddd189c7 100644
|
||||
--- a/drivers/dma/ioat/dma.h
|
||||
+++ b/drivers/dma/ioat/dma.h
|
||||
@@ -88,7 +88,7 @@ struct ioatdma_device {
|
||||
struct ioat_chan_common {
|
||||
struct dma_chan common;
|
||||
void __iomem *reg_base;
|
||||
- unsigned long last_completion;
|
||||
+ dma_addr_t last_completion;
|
||||
spinlock_t cleanup_lock;
|
||||
dma_cookie_t completed_cookie;
|
||||
unsigned long state;
|
||||
@@ -333,7 +333,7 @@ int __devinit ioat_dma_self_test(struct ioatdma_device *device);
|
||||
void __devexit ioat_dma_remove(struct ioatdma_device *device);
|
||||
struct dca_provider * __devinit ioat_dca_init(struct pci_dev *pdev,
|
||||
void __iomem *iobase);
|
||||
-unsigned long ioat_get_current_completion(struct ioat_chan_common *chan);
|
||||
+dma_addr_t ioat_get_current_completion(struct ioat_chan_common *chan);
|
||||
void ioat_init_channel(struct ioatdma_device *device,
|
||||
struct ioat_chan_common *chan, int idx);
|
||||
enum dma_status ioat_dma_tx_status(struct dma_chan *c, dma_cookie_t cookie,
|
||||
@@ -341,7 +341,7 @@ enum dma_status ioat_dma_tx_status(struct dma_chan *c, dma_cookie_t cookie,
|
||||
void ioat_dma_unmap(struct ioat_chan_common *chan, enum dma_ctrl_flags flags,
|
||||
size_t len, struct ioat_dma_descriptor *hw);
|
||||
bool ioat_cleanup_preamble(struct ioat_chan_common *chan,
|
||||
- unsigned long *phys_complete);
|
||||
+ dma_addr_t *phys_complete);
|
||||
void ioat_kobject_add(struct ioatdma_device *device, struct kobj_type *type);
|
||||
void ioat_kobject_del(struct ioatdma_device *device);
|
||||
extern const struct sysfs_ops ioat_sysfs_ops;
|
||||
diff --git a/drivers/dma/ioat/dma_v2.c b/drivers/dma/ioat/dma_v2.c
|
||||
index 5d65f8377971..cb8864d45601 100644
|
||||
--- a/drivers/dma/ioat/dma_v2.c
|
||||
+++ b/drivers/dma/ioat/dma_v2.c
|
||||
@@ -126,7 +126,7 @@ static void ioat2_start_null_desc(struct ioat2_dma_chan *ioat)
|
||||
spin_unlock_bh(&ioat->prep_lock);
|
||||
}
|
||||
|
||||
-static void __cleanup(struct ioat2_dma_chan *ioat, unsigned long phys_complete)
|
||||
+static void __cleanup(struct ioat2_dma_chan *ioat, dma_addr_t phys_complete)
|
||||
{
|
||||
struct ioat_chan_common *chan = &ioat->base;
|
||||
struct dma_async_tx_descriptor *tx;
|
||||
@@ -178,7 +178,7 @@ static void __cleanup(struct ioat2_dma_chan *ioat, unsigned long phys_complete)
|
||||
static void ioat2_cleanup(struct ioat2_dma_chan *ioat)
|
||||
{
|
||||
struct ioat_chan_common *chan = &ioat->base;
|
||||
- unsigned long phys_complete;
|
||||
+ dma_addr_t phys_complete;
|
||||
|
||||
spin_lock_bh(&chan->cleanup_lock);
|
||||
if (ioat_cleanup_preamble(chan, &phys_complete))
|
||||
@@ -259,7 +259,7 @@ int ioat2_reset_sync(struct ioat_chan_common *chan, unsigned long tmo)
|
||||
static void ioat2_restart_channel(struct ioat2_dma_chan *ioat)
|
||||
{
|
||||
struct ioat_chan_common *chan = &ioat->base;
|
||||
- unsigned long phys_complete;
|
||||
+ dma_addr_t phys_complete;
|
||||
|
||||
ioat2_quiesce(chan, 0);
|
||||
if (ioat_cleanup_preamble(chan, &phys_complete))
|
||||
@@ -274,7 +274,7 @@ void ioat2_timer_event(unsigned long data)
|
||||
struct ioat_chan_common *chan = &ioat->base;
|
||||
|
||||
if (test_bit(IOAT_COMPLETION_PENDING, &chan->state)) {
|
||||
- unsigned long phys_complete;
|
||||
+ dma_addr_t phys_complete;
|
||||
u64 status;
|
||||
|
||||
status = ioat_chansts(chan);
|
||||
diff --git a/drivers/dma/ioat/dma_v3.c b/drivers/dma/ioat/dma_v3.c
|
||||
index f519c93a61e7..2dbf32b02735 100644
|
||||
--- a/drivers/dma/ioat/dma_v3.c
|
||||
+++ b/drivers/dma/ioat/dma_v3.c
|
||||
@@ -256,7 +256,7 @@ static bool desc_has_ext(struct ioat_ring_ent *desc)
|
||||
* The difference from the dma_v2.c __cleanup() is that this routine
|
||||
* handles extended descriptors and dma-unmapping raid operations.
|
||||
*/
|
||||
-static void __cleanup(struct ioat2_dma_chan *ioat, unsigned long phys_complete)
|
||||
+static void __cleanup(struct ioat2_dma_chan *ioat, dma_addr_t phys_complete)
|
||||
{
|
||||
struct ioat_chan_common *chan = &ioat->base;
|
||||
struct ioat_ring_ent *desc;
|
||||
@@ -314,7 +314,7 @@ static void __cleanup(struct ioat2_dma_chan *ioat, unsigned long phys_complete)
|
||||
static void ioat3_cleanup(struct ioat2_dma_chan *ioat)
|
||||
{
|
||||
struct ioat_chan_common *chan = &ioat->base;
|
||||
- unsigned long phys_complete;
|
||||
+ dma_addr_t phys_complete;
|
||||
|
||||
spin_lock_bh(&chan->cleanup_lock);
|
||||
if (ioat_cleanup_preamble(chan, &phys_complete))
|
||||
@@ -333,7 +333,7 @@ static void ioat3_cleanup_event(unsigned long data)
|
||||
static void ioat3_restart_channel(struct ioat2_dma_chan *ioat)
|
||||
{
|
||||
struct ioat_chan_common *chan = &ioat->base;
|
||||
- unsigned long phys_complete;
|
||||
+ dma_addr_t phys_complete;
|
||||
|
||||
ioat2_quiesce(chan, 0);
|
||||
if (ioat_cleanup_preamble(chan, &phys_complete))
|
||||
@@ -348,7 +348,7 @@ static void ioat3_timer_event(unsigned long data)
|
||||
struct ioat_chan_common *chan = &ioat->base;
|
||||
|
||||
if (test_bit(IOAT_COMPLETION_PENDING, &chan->state)) {
|
||||
- unsigned long phys_complete;
|
||||
+ dma_addr_t phys_complete;
|
||||
u64 status;
|
||||
|
||||
status = ioat_chansts(chan);
|
||||
--
|
||||
1.7.10.rc4
|
||||
|
|
@ -1,87 +0,0 @@
|
|||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Wed, 4 Apr 2012 02:08:12 +0100
|
||||
Subject: [PATCH] Revert "x86/ioapic: Add register level checks to detect
|
||||
bogus io-apic entries"
|
||||
|
||||
This reverts commit 273fb194e86b795b08a724c7646d0f694949070b.
|
||||
It is reported to break Xen support (not sure which domains/modes).
|
||||
---
|
||||
arch/x86/kernel/apic/io_apic.c | 40 ++++++++--------------------------------
|
||||
1 file changed, 8 insertions(+), 32 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
|
||||
index a25e276..6d939d7 100644
|
||||
--- a/arch/x86/kernel/apic/io_apic.c
|
||||
+++ b/arch/x86/kernel/apic/io_apic.c
|
||||
@@ -3963,36 +3963,18 @@ int mp_find_ioapic_pin(int ioapic, u32 gsi)
|
||||
static __init int bad_ioapic(unsigned long address)
|
||||
{
|
||||
if (nr_ioapics >= MAX_IO_APICS) {
|
||||
- pr_warn("WARNING: Max # of I/O APICs (%d) exceeded (found %d), skipping\n",
|
||||
- MAX_IO_APICS, nr_ioapics);
|
||||
+ printk(KERN_WARNING "WARNING: Max # of I/O APICs (%d) exceeded "
|
||||
+ "(found %d), skipping\n", MAX_IO_APICS, nr_ioapics);
|
||||
return 1;
|
||||
}
|
||||
if (!address) {
|
||||
- pr_warn("WARNING: Bogus (zero) I/O APIC address found in table, skipping!\n");
|
||||
+ printk(KERN_WARNING "WARNING: Bogus (zero) I/O APIC address"
|
||||
+ " found in table, skipping!\n");
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static __init int bad_ioapic_register(int idx)
|
||||
-{
|
||||
- union IO_APIC_reg_00 reg_00;
|
||||
- union IO_APIC_reg_01 reg_01;
|
||||
- union IO_APIC_reg_02 reg_02;
|
||||
-
|
||||
- reg_00.raw = io_apic_read(idx, 0);
|
||||
- reg_01.raw = io_apic_read(idx, 1);
|
||||
- reg_02.raw = io_apic_read(idx, 2);
|
||||
-
|
||||
- if (reg_00.raw == -1 && reg_01.raw == -1 && reg_02.raw == -1) {
|
||||
- pr_warn("I/O APIC 0x%x registers return all ones, skipping!\n",
|
||||
- mpc_ioapic_addr(idx));
|
||||
- return 1;
|
||||
- }
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
void __init mp_register_ioapic(int id, u32 address, u32 gsi_base)
|
||||
{
|
||||
int idx = 0;
|
||||
@@ -4009,12 +3991,6 @@ void __init mp_register_ioapic(int id, u32 address, u32 gsi_base)
|
||||
ioapics[idx].mp_config.apicaddr = address;
|
||||
|
||||
set_fixmap_nocache(FIX_IO_APIC_BASE_0 + idx, address);
|
||||
-
|
||||
- if (bad_ioapic_register(idx)) {
|
||||
- clear_fixmap(FIX_IO_APIC_BASE_0 + idx);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
ioapics[idx].mp_config.apicid = io_apic_unique_id(id);
|
||||
ioapics[idx].mp_config.apicver = io_apic_get_version(idx);
|
||||
|
||||
@@ -4035,10 +4011,10 @@ void __init mp_register_ioapic(int id, u32 address, u32 gsi_base)
|
||||
if (gsi_cfg->gsi_end >= gsi_top)
|
||||
gsi_top = gsi_cfg->gsi_end + 1;
|
||||
|
||||
- pr_info("IOAPIC[%d]: apic_id %d, version %d, address 0x%x, GSI %d-%d\n",
|
||||
- idx, mpc_ioapic_id(idx),
|
||||
- mpc_ioapic_ver(idx), mpc_ioapic_addr(idx),
|
||||
- gsi_cfg->gsi_base, gsi_cfg->gsi_end);
|
||||
+ printk(KERN_INFO "IOAPIC[%d]: apic_id %d, version %d, address 0x%x, "
|
||||
+ "GSI %d-%d\n", idx, mpc_ioapic_id(idx),
|
||||
+ mpc_ioapic_ver(idx), mpc_ioapic_addr(idx),
|
||||
+ gsi_cfg->gsi_base, gsi_cfg->gsi_end);
|
||||
|
||||
nr_ioapics++;
|
||||
}
|
||||
--
|
||||
1.7.9.5
|
||||
|
|
@ -69,7 +69,6 @@
|
|||
+ bugfix/x86/KVM-nVMX-Fix-warning-causing-idt-vectoring-info-beha.patch
|
||||
|
||||
+ features/all/hwmon-it87-Add-IT8728F-support.patch
|
||||
+ bugfix/arm/ARM-ixp4xx-mtd-oops.patch
|
||||
|
||||
+ bugfix/x86/drm-i915-do-not-enable-RC6p-on-Sandy-Bridge.patch
|
||||
+ bugfix/x86/drm-i915-fix-operator-precedence-when-enabling-RC6p.patch
|
||||
|
@ -81,19 +80,13 @@
|
|||
+ features/all/fs-hardlink-creation-restriction-cleanup.patch
|
||||
+ bugfix/all/Don-t-limit-non-nested-epoll-paths.patch
|
||||
+ bugfix/all/kbuild-do-not-check-for-ancient-modutils-tools.patch
|
||||
+ bugfix/x86/ioat-fix-size-of-completion-for-Xen.patch
|
||||
|
||||
# Temporary, until the original change has been tested some more
|
||||
+ debian/revert-CIFS-Respect-negotiated-MaxMpxCount.patch
|
||||
|
||||
# Temporary, until the Xen regression is fixed
|
||||
+ debian/revert-x86-ioapic-Add-register-level-checks-to-detec.patch
|
||||
|
||||
+ bugfix/all/net-fix-proc-net-dev-regression.patch
|
||||
+ bugfix/arm/ARM-orion5x-Fix-GPIO-enable-bits-for-MPP9.patch
|
||||
+ bugfix/x86/drm-i915-mask-transcoder-select-bits-before-setting-.patch
|
||||
+ bugfix/all/TOMOYO-Fix-mount-flags-checking-order.patch
|
||||
+ bugfix/all/drm-radeon-kms-fix-fans-after-resume.patch
|
||||
|
||||
# Update all Hyper-V drivers to 3.4-rc1 (no longer staging)
|
||||
+ features/x86/hyperv/0001-NLS-improve-UTF8-UTF16-string-conversion-routine.patch
|
||||
|
@ -178,5 +171,4 @@
|
|||
+ debian/revert-rtc-Provide-flag-for-rtc-devices-that-don-t-s.patch
|
||||
+ debian/nls-Avoid-ABI-change-from-improvement-to-utf8s_to_ut.patch
|
||||
|
||||
+ bugfix/all/nfs-Fix-length-of-buffer-copied-in-__nfs4_get_acl_uncach.patch
|
||||
+ bugfix/all/hugetlb-fix-race-condition-in-hugetlb_fault.patch
|
||||
|
|
Loading…
Reference in New Issue