Thanks Dave, MW, Jan, I tried the patch which set machdep->section_size_bits and machdep->max_physmem_bits. When _SECTION_SIZE_BITS is 28, I got the following error, and failed in sparse_mem_init() PAGESIZE=4096 mem_section_size = 0 NR_SECTION_ROOTS = 0 NR_MEM_SECTIONS = 16 SECTIONS_PER_ROOT = 512 SECTION_ROOT_MASK = 0x1ff PAGES_PER_SECTION = 65536 crash: invalid size request: 0 type: "memory section root table" And when _SECTION_SIZE_BITS is 22, I got the following and sparse_mem_init() returns with out error. PAGESIZE=4096 mem_section_size = 8 NR_SECTION_ROOTS = 2 NR_MEM_SECTIONS = 1024 SECTIONS_PER_ROOT = 512 SECTION_ROOT_MASK = 0x1ff PAGES_PER_SECTION = 1024 ... But I got another error later, which I will report later. In memory.c:sparse_mem_init(), vt->mem_sec is malloced as mem_section_size bytes block and readmem is called. I suppose the mem_section_size should not be zero. I do not know _SECTION_SIZE_BITS 22 is correct or not, but the following caliculation of NR_SECTION_ROOTS() looks suspicious to me. #define NR_SECTION_ROOTS() (NR_MEM_SECTIONS() / SECTIONS_PER_ROOT()) Something like (((NR_MEM_SECTIONS() - 1)/ SECTIONS_PER_ROOT()) + 1) ? Best Regard, Takuo >[ dropped my Nokia address from the CC list, since I'm not working for Nokia > anymore ] > >On Tue, May 24, 2011 at 09:58:48AM -0400, Dave Anderson wrote: >> >> BTW, I await any patches from the ARM folks to set these bits >> appropriately. Currently there is this for ARM in defs.h: >> >> #ifdef ARM >> ... [ cut ] ... >> >> #define _SECTION_SIZE_BITS 28 >> #define _MAX_PHYSMEM_BITS 32 >> >> #endif /* ARM */ >> >> Yet you state above that you're using 22 for _SECTION_SIZE_BITS. > >This varies between different SoCs and it is not used by others. Since it is >not stored in a crashdump IIRC, we really cannot set that value dynamically. > >So I see two options: > > 1) leave it as is and make crash to complain when it detects such > situation or > 2) guess the values and try to do the right thing (TM) > >My preference goes with 2) provided that we can get it working on majority of >the ARM SoCs. > >We could try to stick with _SECTION_SIZE_BITS=28, as it seems to be largest >currently used section size amongst different ARM SoCs, and hope that it works >with others where this is smaller. > >Jan, Takuo: maybe you could try whether following patch works? I don't have >any hardware which use SPARSEMEM so I'm unable to test it. > >Regards, >MW > >diff --git a/arm.c b/arm.c >index 0347166..9d4afcc 100644 >--- a/arm.c >+++ b/arm.c >@@ -260,6 +260,9 @@ arm_init(int when) > STRUCT_EXISTS("pteval_t")) > machdep->flags |= PGTABLE_V2; > >+ machdep->section_size_bits = _SECTION_SIZE_BITS; >+ machdep->max_physmem_bits = _MAX_PHYSMEM_BITS; >+ > if (symbol_exists("irq_desc")) > ARRAY_LENGTH_INIT(machdep->nr_irqs, irq_desc, > "irq_desc", NULL, 0); > >-- >Crash-utility mailing list >Crash-utility@xxxxxxxxxx >https://www.redhat.com/mailman/listinfo/crash-utility > -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility