Hi Dave Recently there were changes made to kexec tools to support 64K page size. With those changes vmcore file obtained from a kernel which supports 64K page size cannot be analyzed using crash on a machine running with kernel supporting 4K page size. The following changes in crash tool resolves the problem. Look if the symbol __hash_page_64k exists. This symbol is defined only for kernels with 64K PAGE SIZE support. If yes then the dump was taken with a kernel supporting 64k page size. So use the vmcore page size[64K] instead of getpagesize(). Thanks -Sachin
* Recently there were changes made to kexec tools to support 64K page size. With those changes vmcore file obtained from a kernel which supports 64K page size cannot be analyzed using crash on a machine running with kernel supporting 4K page size. The following change were made in crash tool to solve the problem. Look if the symbol __hash_page_64k exists. If yes then the dump was taken with a kernel supporting 64k page size. So change the page size accordingly. Signed-Off-By: Sachin Sant <sachinp@xxxxxxxxxx> -- diff -Naurp crash-4.0/defs.h crash-4.0-new/defs.h --- crash-4.0/defs.h 2006-09-14 21:41:50.000000000 -0400 +++ crash-4.0-new/defs.h 2006-09-14 21:48:37.000000000 -0400 @@ -2297,6 +2297,7 @@ struct efi_memory_desc_t { #define _64BIT_ #define MACHINE_TYPE "PPC64" +#define PPC64_64K_PAGE_SIZE 65536 #define PAGEBASE(X) (((ulong)(X)) & (ulong)machdep->pagemask) #define PTOV(X) ((unsigned long)(X)+(machdep->kvbase)) diff -Naurp crash-4.0/ppc64.c crash-4.0-new/ppc64.c --- crash-4.0/ppc64.c 2006-09-14 21:41:50.000000000 -0400 +++ crash-4.0-new/ppc64.c 2006-09-14 21:50:26.000000000 -0400 @@ -67,19 +67,6 @@ ppc64_init(int when) machdep->verify_symbol = ppc64_verify_symbol; if (pc->flags & KERNEL_DEBUG_QUERY) return; - machdep->pagesize = memory_page_size(); - machdep->pageshift = ffs(machdep->pagesize) - 1; - machdep->pageoffset = machdep->pagesize - 1; - machdep->pagemask = ~((ulonglong)machdep->pageoffset); - machdep->stacksize = 4 * machdep->pagesize; - if ((machdep->pgd = (char *)malloc(PAGESIZE())) == NULL) - error(FATAL, "cannot malloc pgd space."); - if ((machdep->pmd = (char *)malloc(PAGESIZE())) == NULL) - error(FATAL, "cannot malloc pmd space."); - if ((machdep->ptbl = (char *)malloc(PAGESIZE())) == NULL) - error(FATAL, "cannot malloc ptbl space."); - if ((machdep->machspec->level4 = (char *)malloc(PAGESIZE())) == NULL) - error(FATAL, "cannot malloc level4 space."); machdep->last_pgd_read = 0; machdep->last_pmd_read = 0; machdep->last_ptbl_read = 0; @@ -93,6 +80,40 @@ ppc64_init(int when) break; case PRE_GDB: + /* + * Recently there were changes made to kexec tools + * to support 64K page size. With those changes + * vmcore file obtained from a kernel which supports + * 64K page size cannot be analyzed using crash on a + * machine running with kernel supporting 4K page size + * + * The following modifications are required in crash + * tool to be in sync with kexec tools. + * + * Look if the following symbol exists. If yes then + * the dump was taken with a kernel supporting 64k + * page size. So change the page size accordingly. + * + * Also moved the following code block from + * PRE_SYMTAB case here. + */ + if (symbol_exists("__hash_page_64K")) + machdep->pagesize = PPC64_64K_PAGE_SIZE; + else + machdep->pagesize = memory_page_size(); + machdep->pageshift = ffs(machdep->pagesize) - 1; + machdep->pageoffset = machdep->pagesize - 1; + machdep->pagemask = ~((ulonglong)machdep->pageoffset); + machdep->stacksize = 4 * machdep->pagesize; + if ((machdep->pgd = (char *)malloc(PAGESIZE())) == NULL) + error(FATAL, "cannot malloc pgd space."); + if ((machdep->pmd = (char *)malloc(PAGESIZE())) == NULL) + error(FATAL, "cannot malloc pmd space."); + if ((machdep->ptbl = (char *)malloc(PAGESIZE())) == NULL) + error(FATAL, "cannot malloc ptbl space."); + if ((machdep->machspec->level4 = (char *)malloc(PAGESIZE())) == NULL) + error(FATAL, "cannot malloc level4 space."); + machdep->kvbase = symbol_value("_stext"); machdep->identity_map_base = machdep->kvbase; machdep->is_kvaddr = generic_is_kvaddr;
-- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility