Cherry-pick some upstream fixes for data loss
svn path=/dists/sid/linux/; revision=19853
This commit is contained in:
parent
45a3bb5a44
commit
a6a37fb6d2
|
@ -180,6 +180,8 @@ linux (3.2.39-1) UNRELEASED; urgency=low
|
|||
- drm/radeon: prevent crash in the ring space allocation
|
||||
* linux-image-dbg: Add symlinks to vmlinux from the locations expected by
|
||||
kdump-tools (Closes: #700418), systemtap and others
|
||||
* mm: fix pageblock bitmap allocation (fixes regression in 3.2.38)
|
||||
* USB: usb-storage: unusual_devs update for Super TOP SATA bridge
|
||||
|
||||
[ Aurelien Jarno ]
|
||||
* [armhf/vexpress] Add kernel udebs.
|
||||
|
|
38
debian/patches/bugfix/all/USB-usb-storage-unusual_devs-update-for-Super-TOP-SA.patch
vendored
Normal file
38
debian/patches/bugfix/all/USB-usb-storage-unusual_devs-update-for-Super-TOP-SA.patch
vendored
Normal file
|
@ -0,0 +1,38 @@
|
|||
From: Josh Boyer <jwboyer@redhat.com>
|
||||
Date: Thu, 14 Feb 2013 09:39:09 -0500
|
||||
Subject: USB: usb-storage: unusual_devs update for Super TOP SATA bridge
|
||||
|
||||
commit 18e03310b5caa6d11c1a8c61b982c37047693fba upstream.
|
||||
|
||||
The current entry in unusual_cypress.h for the Super TOP SATA bridge devices
|
||||
seems to be causing corruption on newer revisions of this device. This has
|
||||
been reported in Arch Linux and Fedora. The original patch was tested on
|
||||
devices with bcdDevice of 1.60, whereas the newer devices report bcdDevice
|
||||
as 2.20. Limit the UNUSUAL_DEV entry to devices less than 2.20.
|
||||
|
||||
This fixes https://bugzilla.redhat.com/show_bug.cgi?id=909591
|
||||
|
||||
The Arch Forum post on this is here:
|
||||
https://bbs.archlinux.org/viewtopic.php?id=152011
|
||||
|
||||
Reported-by: Carsten S. <carsteniq@yahoo.com>
|
||||
Tested-by: Carsten S. <carsteniq@yahoo.com>
|
||||
Signed-off-by: Josh Boyer <jwboyer@redhat.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/usb/storage/unusual_cypress.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/usb/storage/unusual_cypress.h b/drivers/usb/storage/unusual_cypress.h
|
||||
index 2c85530..65a6a75 100644
|
||||
--- a/drivers/usb/storage/unusual_cypress.h
|
||||
+++ b/drivers/usb/storage/unusual_cypress.h
|
||||
@@ -31,7 +31,7 @@ UNUSUAL_DEV( 0x04b4, 0x6831, 0x0000, 0x9999,
|
||||
"Cypress ISD-300LP",
|
||||
USB_SC_CYP_ATACB, USB_PR_DEVICE, NULL, 0),
|
||||
|
||||
-UNUSUAL_DEV( 0x14cd, 0x6116, 0x0000, 0x9999,
|
||||
+UNUSUAL_DEV( 0x14cd, 0x6116, 0x0000, 0x0219,
|
||||
"Super Top",
|
||||
"USB 2.0 SATA BRIDGE",
|
||||
USB_SC_CYP_ATACB, USB_PR_DEVICE, NULL, 0),
|
|
@ -0,0 +1,80 @@
|
|||
From: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Date: Mon, 18 Feb 2013 09:58:02 -0800
|
||||
Subject: mm: fix pageblock bitmap allocation
|
||||
|
||||
commit 7c45512df987c5619db041b5c9b80d281e26d3db upstream.
|
||||
|
||||
Commit c060f943d092 ("mm: use aligned zone start for pfn_to_bitidx
|
||||
calculation") fixed out calculation of the index into the pageblock
|
||||
bitmap when a !SPARSEMEM zome was not aligned to pageblock_nr_pages.
|
||||
|
||||
However, the _allocation_ of that bitmap had never taken this alignment
|
||||
requirement into accout, so depending on the exact size and alignment of
|
||||
the zone, the use of that index could then access past the allocation,
|
||||
resulting in some very subtle memory corruption.
|
||||
|
||||
This was reported (and bisected) by Ingo Molnar: one of his random
|
||||
config builds would hang with certain very specific kernel command line
|
||||
options.
|
||||
|
||||
In the meantime, commit c060f943d092 has been marked for stable, so this
|
||||
fix needs to be back-ported to the stable kernels that backported the
|
||||
commit to use the right alignment.
|
||||
|
||||
Bisected-and-tested-by: Ingo Molnar <mingo@kernel.org>
|
||||
Acked-by: Mel Gorman <mgorman@suse.de>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
---
|
||||
mm/page_alloc.c | 15 +++++++++------
|
||||
1 file changed, 9 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
|
||||
index 9673d96..6a83cd3 100644
|
||||
--- a/mm/page_alloc.c
|
||||
+++ b/mm/page_alloc.c
|
||||
@@ -4420,10 +4420,11 @@ static void __meminit calculate_node_totalpages(struct pglist_data *pgdat,
|
||||
* round what is now in bits to nearest long in bits, then return it in
|
||||
* bytes.
|
||||
*/
|
||||
-static unsigned long __init usemap_size(unsigned long zonesize)
|
||||
+static unsigned long __init usemap_size(unsigned long zone_start_pfn, unsigned long zonesize)
|
||||
{
|
||||
unsigned long usemapsize;
|
||||
|
||||
+ zonesize += zone_start_pfn & (pageblock_nr_pages-1);
|
||||
usemapsize = roundup(zonesize, pageblock_nr_pages);
|
||||
usemapsize = usemapsize >> pageblock_order;
|
||||
usemapsize *= NR_PAGEBLOCK_BITS;
|
||||
@@ -4433,17 +4434,19 @@ static unsigned long __init usemap_size(unsigned long zonesize)
|
||||
}
|
||||
|
||||
static void __init setup_usemap(struct pglist_data *pgdat,
|
||||
- struct zone *zone, unsigned long zonesize)
|
||||
+ struct zone *zone,
|
||||
+ unsigned long zone_start_pfn,
|
||||
+ unsigned long zonesize)
|
||||
{
|
||||
- unsigned long usemapsize = usemap_size(zonesize);
|
||||
+ unsigned long usemapsize = usemap_size(zone_start_pfn, zonesize);
|
||||
zone->pageblock_flags = NULL;
|
||||
if (usemapsize)
|
||||
zone->pageblock_flags = alloc_bootmem_node_nopanic(pgdat,
|
||||
usemapsize);
|
||||
}
|
||||
#else
|
||||
-static inline void setup_usemap(struct pglist_data *pgdat,
|
||||
- struct zone *zone, unsigned long zonesize) {}
|
||||
+static inline void setup_usemap(struct pglist_data *pgdat, struct zone *zone,
|
||||
+ unsigned long zone_start_pfn, unsigned long zonesize) {}
|
||||
#endif /* CONFIG_SPARSEMEM */
|
||||
|
||||
#ifdef CONFIG_HUGETLB_PAGE_SIZE_VARIABLE
|
||||
@@ -4594,7 +4597,7 @@ static void __paginginit free_area_init_core(struct pglist_data *pgdat,
|
||||
continue;
|
||||
|
||||
set_pageblock_order();
|
||||
- setup_usemap(pgdat, zone, size);
|
||||
+ setup_usemap(pgdat, zone, zone_start_pfn, size);
|
||||
ret = init_currently_empty_zone(zone, zone_start_pfn,
|
||||
size, MEMMAP_EARLY);
|
||||
BUG_ON(ret);
|
|
@ -626,3 +626,5 @@ features/all/line6/0106-staging-line6-drop-unused-dumprequest-code.patch
|
|||
bugfix/all/mm-Try-harder-to-allocate-vmemmap-blocks.patch
|
||||
bugfix/x86/efi-Clear-EFI_RUNTIME_SERVICES-rather-than-EFI_BOOT-.patch
|
||||
bugfix/x86/x86-efi-Make-noefi-really-disable-EFI-runtime-serivc.patch
|
||||
bugfix/all/mm-fix-pageblock-bitmap-allocation.patch
|
||||
bugfix/all/USB-usb-storage-unusual_devs-update-for-Super-TOP-SA.patch
|
||||
|
|
Loading…
Reference in New Issue