From: Alexander Sverdlin <alexander.sverdlin@nsn.com>
To: david.daney@cavium.com
Cc: linux-mips@linux-mips.org, Ralf Baechle <ralf@linux-mips.org>
Subject: Re: [PATCH] Octeon: fix broken plat_mem_setup()
Date: Mon, 01 Jul 2013 14:35:33 +0200 [thread overview]
Message-ID: <51D17795.8090307@nsn.com> (raw)
In-Reply-To: <5139FF2F.2000003@nsn.com>
Hello David,
Just a friendly reminder: you've said you have other version of the fix below.
But today 3.10 is released and in fact we have now 3.8, 3.9, 3.10 -- all of them are broken for Octeon...
On 03/08/2013 04:09 PM, ext Alexander Sverdlin wrote:
> Octeon: fix broken plat_mem_setup()
>
> Upstream patch abe77f90dc9c65a7c9a4d61c2cbb8db4d5566e4f (MIPS: Octeon: Add kexec
> and kdump support) seems to be untested and broken Linux 3.8 on Octeon -- in
> comparison with 3.7 Linux crashes with
>
> [ 0.000000] BUG: Bad page state in process swapper pfn:00000
> [ 0.000000] page:8000000001016000 count:0 mapcount:1 mapping: (null) index:0x0
> [ 0.000000] page flags: 0x0()
> [ 0.000000] Modules linked in:
> [ 0.000000] Call Trace:
> [ 0.000000] [<ffffffff80550b1c>] dump_stack+0x8/0x34
> [ 0.000000] [<ffffffff801fe7d4>] bad_page+0xdc/0x170
> [ 0.000000] [<ffffffff80200118>] free_pages_prepare+0x188/0x190
> [ 0.000000] [<ffffffff80200140>] __free_pages_ok+0x20/0x110
> [ 0.000000] [<ffffffff80738778>] free_all_bootmem_core+0x274/0x2cc
> [ 0.000000] [<ffffffff8073885c>] free_all_bootmem+0x8c/0xa4
> [ 0.000000] [<ffffffff8072fc8c>] mem_init+0x54/0x1c4
> [ 0.000000] [<ffffffff80724904>] start_kernel+0x1d4/0x4e8
> [ 0.000000]
> [ 0.000000] Disabling lock debugging due to kernel taint
> ... skipped some simillar output...
> [ 0.000000] BUG: Bad page state in process swapper pfn:0003b
> [ 0.000000] page:8000000001016ce8 count:0 mapcount:1 mapping: (null) index:0x0
> [ 0.000000] page flags: 0x0()
> [ 0.000000] Modules linked in:
> [ 0.000000] Call Trace:
> [ 0.000000] [<ffffffff80550b1c>] dump_stack+0x8/0x34
> [ 0.000000] [<ffffffff801fe7d4>] bad_page+0xdc/0x170
> [ 0.000000] [<ffffffff80200118>] free_pages_prepare+0x188/0x190
> [ 0.000000] [<ffffffff80200140>] __free_pages_ok+0x20/0x110
> [ 0.000000] [<ffffffff80738778>] free_all_bootmem_core+0x274/0x2cc
> [ 0.000000] [<ffffffff8073885c>] free_all_bootmem+0x8c/0xa4
> [ 0.000000] [<ffffffff8072fc8c>] mem_init+0x54/0x1c4
> [ 0.000000] [<ffffffff80724904>] start_kernel+0x1d4/0x4e8
> [ 0.000000]
> [ 0.000000] CPU 0 Unable to handle kernel paging request at virtual address 0000000000380000, epc == ffffffff8074b85c, ra == ffffffff80738778
> [ 0.000000] Oops[#1]:
> [ 0.000000] Cpu 0
> [ 0.000000] $ 0 : 0000000000000000 00000000101000e0 0000000000000001 0000000000380038
> [ 0.000000] $ 4 : 0000000000000001 0000000000000006 0000000000380000 0000000000000040
> [ 0.000000] $ 8 : 0000000000380000 fffffffffffffbff 0000000000000040 ffffffff80f9dd00
> [ 0.000000] $12 : 6db6db6db6db6db7 0000000000000000 6db6db6db6db0000 ffffffff80700000
> [ 0.000000] $16 : 0000000000010000 ffffffffffffffff 0000000000071c00 0000000000010040
> [ 0.000000] $20 : ffffffff80753070 000000000000fe73 ffffffff80f9dd00 0000000000050000
> [ 0.000000] $24 : 0000000000000002 0000000000200200
> [ 0.000000] $28 : ffffffff806b4000 ffffffff806b7d60 fffffffffffffffc ffffffff80738778
> [ 0.000000] Hi : 0000000000000000
> [ 0.000000] Lo : 0000000000000370
> [ 0.000000] epc : ffffffff8074b85c __free_pages_bootmem+0xcc/0xe4
> [ 0.000000] Tainted: G B
> [ 0.000000] ra : ffffffff80738778 free_all_bootmem_core+0x274/0x2cc
> [ 0.000000] Status: 101000e2 KX SX UX KERNEL EXL
> [ 0.000000] Cause : 40808008
> [ 0.000000] BadVA : 0000000000380000
> [ 0.000000] PrId : 000d9009 (Cavium Octeon II)
> [ 0.000000] Modules linked in:
> [ 0.000000] Process swapper (pid: 0, threadinfo=ffffffff806b4000, task=ffffffff806dcbf0, tls=0000000000000000)
> [ 0.000000] *HwTLS: 000000ffec6c46c0
> [ 0.000000] Stack : 0000000000000000 ffffffff80753070 ffffffff80753060 ffffffff80750000
> ffffffff8074fab0 ffffffff80770000 ffffffff806d0000 ffffffffc0111bf0
> 0000000000000000 ffffffff8073885c ffffff8000000001 ffffffff806e0000
> ffffffff80fa0000 ffffffff8072fc8c ffffff8000000001 0000000000000084
> ffffffff80770000 ffffffff80750000 ffffffff8074fab0 ffffffff80770000
> ffffffff806d0000 ffffffff80724904 ffffffff8074fab0 0000000000000000
> ffffffffc00a56c8 800000000fd01030 800000000fda5688 0000000000000001
> ffffffff80541dc0 000000000000000b 000000000000000b ffffffffc00018b8
> 0000000000000000 0000000000000000 0000000000000000 0000000000000000
> 0000000000000000 0000000000000000 0000000000000000 0000000000000000
> ...
> [ 0.000000] Call Trace:
> [ 0.000000] [<ffffffff8074b85c>] __free_pages_bootmem+0xcc/0xe4
> [ 0.000000] [<ffffffff80738778>] free_all_bootmem_core+0x274/0x2cc
> [ 0.000000] [<ffffffff8073885c>] free_all_bootmem+0x8c/0xa4
> [ 0.000000] [<ffffffff8072fc8c>] mem_init+0x54/0x1c4
> [ 0.000000] [<ffffffff80724904>] start_kernel+0x1d4/0x4e8
> [ 0.000000]
> [ 0.000000]
> Code: fc6206b8 0808011c ad06001c <dcc20000> cc7c0000 00491024 fcc20000 081d2def ac60ffe4
> [ 0.000000] ---[ end trace 139ce121c98e96c9 ]---
> [ 0.000000] Kernel panic - not syncing: Attempted to kill the idle task!
>
> There are at least couple of issues in the patch:
> 1. reason for add_memory_region(memory, mem_alloc_size, BOOT_MEM_RAM) instead of
> add_memory_region(memory, size, BOOT_MEM_RAM) is unclear, especially because it
> will discard corrections performed by two preceding calls to memory_exclude_page().
> 2. add_memory_region(kernel_start, kernel_size, BOOT_MEM_RAM) seems to be not related
> to KEXEC functionality and has no visible reason in 3.8 kernel... Probably these are
> some traces of the original 2010 patch for older kernels... In any case, this is the
> reason for the crash.
>
> Signed-off-by: Alexander Sverdlin <alexander.sverdlin.ext@nsn.com>
> Cc: David Daney <david.daney@cavium.com>
> Cc: Ralf Baechle <ralf@linux-mips.org>
> ---
> --- linux.orig/arch/mips/cavium-octeon/setup.c
> +++ linux/arch/mips/cavium-octeon/setup.c
> @@ -1092,8 +1092,6 @@ void __init plat_mem_setup(void)
> uint64_t crashk_end;
> #ifndef CONFIG_CRASH_DUMP
> int64_t memory;
> - uint64_t kernel_start;
> - uint64_t kernel_size;
> #endif
> const struct cvmx_bootmem_named_block_desc *named_block;
>
> @@ -1217,7 +1215,7 @@ void __init plat_mem_setup(void)
> * next to each other if they are received in
> * incrementing order
> */
> - if (memory < crashk_base && end > crashk_end) {
> + if (memory < crashk_base && end > crashk_end) {
> /* region is fully in */
> add_memory_region(memory,
> crashk_base - memory,
> @@ -1243,7 +1241,7 @@ void __init plat_mem_setup(void)
> * Overlap with the beginning of the region,
> * reserve the beginning.
> */
> - mem_alloc_size -= crashk_end - memory;
> + size -= crashk_end - memory;
> memory = crashk_end;
> } else if (memory < crashk_base && end > crashk_base &&
> end < crashk_end)
> @@ -1251,24 +1249,16 @@ void __init plat_mem_setup(void)
> * Overlap with the beginning of the region,
> * chop of end.
> */
> - mem_alloc_size -= end - crashk_base;
> + size -= end - crashk_base;
> #endif
> - add_memory_region(memory, mem_alloc_size, BOOT_MEM_RAM);
> + if (size)
> + add_memory_region(memory, size, BOOT_MEM_RAM);
> total += mem_alloc_size;
> - /* Recovering mem_alloc_size */
> - mem_alloc_size = 4 << 20;
> } else {
> break;
> }
> }
> cvmx_bootmem_unlock();
> - /* Add the memory region for the kernel. */
> - kernel_start = (unsigned long) _text;
> - kernel_size = ALIGN(_end - _text, 0x100000);
> -
> - /* Adjust for physical offset. */
> - kernel_start &= ~0xffffffff80000000ULL;
> - add_memory_region(kernel_start, kernel_size, BOOT_MEM_RAM);
> #endif /* CONFIG_CRASH_DUMP */
>
> mem_alloc_done:
>
>
>
>
--
Best regards,
Alexander Sverdlin.
prev parent reply other threads:[~2013-07-01 12:35 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-08 15:09 [PATCH] Octeon: fix broken plat_mem_setup() Alexander Sverdlin
2013-07-01 12:35 ` Alexander Sverdlin [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51D17795.8090307@nsn.com \
--to=alexander.sverdlin@nsn.com \
--cc=david.daney@cavium.com \
--cc=linux-mips@linux-mips.org \
--cc=ralf@linux-mips.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox