diff options
author | Josh Boyer <jwboyer@fedoraproject.org> | 2014-07-04 11:16:04 -0400 |
---|---|---|
committer | Josh Boyer <jwboyer@fedoraproject.org> | 2014-07-04 11:16:04 -0400 |
commit | bce53631efc093dab050449d765185898a0c4d2b (patch) | |
tree | 326ade99a489664a8c1c98527e4b9ba3eef733b1 /kernel-arm64.patch | |
parent | ccf8f201f84dd9579b81837f3dd8b949c9ddf3e0 (diff) | |
download | kernel-bce53631efc093dab050449d765185898a0c4d2b.tar.gz kernel-bce53631efc093dab050449d765185898a0c4d2b.tar.xz kernel-bce53631efc093dab050449d765185898a0c4d2b.zip |
Linux v3.16-rc3-149-g034a0f6b7db7
Diffstat (limited to 'kernel-arm64.patch')
-rw-r--r-- | kernel-arm64.patch | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/kernel-arm64.patch b/kernel-arm64.patch index 54c3c88a0..05249a97e 100644 --- a/kernel-arm64.patch +++ b/kernel-arm64.patch @@ -623,65 +623,6 @@ Date: Mon Jun 2 05:18:35 2014 -0700 Signed-off-by: Saurabh Tangri <saurabh.tangri@intel.com> Signed-off-by: Matt Fleming <matt.fleming@intel.com> -commit 83a31f42054546344d10493a6edbd8ce1914c36b -Author: Michal Nazarewicz <mina86@mina86.com> -Date: Thu Jun 26 10:42:17 2014 +1000 - - mm: page_alloc: fix CMA area initialisation when pageblock > MAX_ORDER - - With a kernel configured with ARM64_64K_PAGES && !TRANSPARENT_HUGEPAGE, - the following is triggered at early boot: - - SMP: Total of 8 processors activated. - devtmpfs: initialized - Unable to handle kernel NULL pointer dereference at virtual address 00000008 - pgd = fffffe0000050000 - [00000008] *pgd=00000043fba00003, *pmd=00000043fba00003, *pte=00e0000078010407 - Internal error: Oops: 96000006 [#1] SMP - Modules linked in: - CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.15.0-rc864k+ #44 - task: fffffe03bc040000 ti: fffffe03bc080000 task.ti: fffffe03bc080000 - PC is at __list_add+0x10/0xd4 - LR is at free_one_page+0x270/0x638 - ... - Call trace: - [<fffffe00003ee970>] __list_add+0x10/0xd4 - [<fffffe000019c478>] free_one_page+0x26c/0x638 - [<fffffe000019c8c8>] __free_pages_ok.part.52+0x84/0xbc - [<fffffe000019d5e8>] __free_pages+0x74/0xbc - [<fffffe0000c01350>] init_cma_reserved_pageblock+0xe8/0x104 - [<fffffe0000c24de0>] cma_init_reserved_areas+0x190/0x1e4 - [<fffffe0000090418>] do_one_initcall+0xc4/0x154 - [<fffffe0000bf0a50>] kernel_init_freeable+0x204/0x2a8 - [<fffffe00007520a0>] kernel_init+0xc/0xd4 - - This happens because init_cma_reserved_pageblock() calls __free_one_page() - with pageblock_order as page order but it is bigger than MAX_ORDER. This - in turn causes accesses past zone->free_list[]. - - Fix the problem by changing init_cma_reserved_pageblock() such that it - splits pageblock into individual MAX_ORDER pages if pageblock is bigger - than a MAX_ORDER page. - - In cases where !CONFIG_HUGETLB_PAGE_SIZE_VARIABLE, which is all - architectures expect for ia64, powerpc and tile at the moment, the - “pageblock_order > MAX_ORDER” condition will be optimised out since - both sides of the operator are constants. In cases where pageblock size - is variable, the performance degradation should not be significant anyway - since init_cma_reserved_pageblock() is called only at boot time at most - MAX_CMA_AREAS times which by default is eight. - - Signed-off-by: Michal Nazarewicz <mina86@mina86.com> - Reported-by: Mark Salter <msalter@redhat.com> - Tested-by: Mark Salter <msalter@redhat.com> - Tested-by: Christopher Covington <cov@codeaurora.org> - Cc: Mel Gorman <mgorman@suse.de> - Cc: David Rientjes <rientjes@google.com> - Cc: Marek Szyprowski <m.szyprowski@samsung.com> - Cc: Catalin Marinas <catalin.marinas@arm.com> - Cc: <stable@vger.kernel.org> [3.5+] - Signed-off-by: Andrew Morton <akpm@linux-foundation.org> - commit 026545c8ed8737f6686036326a80498ae14d7fe5 Author: Suman Tripathi <stripathi@apm.com> Date: Thu Jun 19 06:51:32 2014 -0400 @@ -7163,34 +7104,6 @@ index 0000000..9eac712 +#endif + +#endif -diff --git a/mm/page_alloc.c b/mm/page_alloc.c -index 20d17f8..0ea758b 100644 ---- a/mm/page_alloc.c -+++ b/mm/page_alloc.c -@@ -816,9 +816,21 @@ void __init init_cma_reserved_pageblock(struct page *page) - set_page_count(p, 0); - } while (++p, --i); - -- set_page_refcounted(page); - set_pageblock_migratetype(page, MIGRATE_CMA); -- __free_pages(page, pageblock_order); -+ -+ if (pageblock_order >= MAX_ORDER) { -+ i = pageblock_nr_pages; -+ p = page; -+ do { -+ set_page_refcounted(p); -+ __free_pages(p, MAX_ORDER - 1); -+ p += MAX_ORDER_NR_PAGES; -+ } while (i -= MAX_ORDER_NR_PAGES); -+ } else { -+ set_page_refcounted(page); -+ __free_pages(page, pageblock_order); -+ } -+ - adjust_managed_page_count(page, pageblock_nr_pages); - } - #endif diff --git a/tools/perf/arch/arm64/include/perf_regs.h b/tools/perf/arch/arm64/include/perf_regs.h index e9441b9..1d3f39c 100644 --- a/tools/perf/arch/arm64/include/perf_regs.h |