From patchwork Wed Apr 10 07:20:18 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atsushi Kumagai X-Patchwork-Id: 235321 X-Patchwork-Delegate: galak@kernel.crashing.org Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from ozlabs.org (localhost [IPv6:::1]) by ozlabs.org (Postfix) with ESMTP id 62F502C0286 for ; Wed, 10 Apr 2013 17:25:53 +1000 (EST) Received: from tyo200.gate.nec.co.jp (TYO200.gate.nec.co.jp [210.143.35.50]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 89B3F2C00C5 for ; Wed, 10 Apr 2013 17:25:26 +1000 (EST) Received: from tyo202.gate.nec.co.jp ([10.7.69.202]) by tyo200.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id r3A7PKcP024585 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Wed, 10 Apr 2013 16:25:20 +0900 (JST) Received: from mailgate3.nec.co.jp ([10.7.69.160]) by tyo202.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id r3A7PDLs005830; Wed, 10 Apr 2013 16:25:13 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id r3A7PD810055; Wed, 10 Apr 2013 16:25:13 +0900 (JST) Received: from mail03.kamome.nec.co.jp (mail03.kamome.nec.co.jp [10.25.43.7]) by mailsv4.nec.co.jp (8.13.8/8.13.4) with ESMTP id r3A7PC9n009977; Wed, 10 Apr 2013 16:25:12 +0900 (JST) Received: from shintaro.jp.nec.com ([10.26.220.11] [10.26.220.11]) by mail02.kamome.nec.co.jp with ESMTP id BT-MMP-289572; Wed, 10 Apr 2013 16:20:18 +0900 Received: from NES2091000330.nsl.ad.nec.co.jp ([10.21.40.240] [10.21.40.240]) by mail.jp.nec.com with ESMTPA id BT-MMP-48687; Wed, 10 Apr 2013 16:20:18 +0900 Date: Wed, 10 Apr 2013 16:20:18 +0900 From: Atsushi Kumagai To: kexec@lists.infradead.org Subject: [RESEND PATCH 4/4] Use vmap_area_list to get vmalloc_start for ppc64. Message-Id: <20130410162018.2ee96e649d212d69c0710b6e@mxc.nes.nec.co.jp> In-Reply-To: <20130410150524.804cd23b99a697f71146be67@mxc.nes.nec.co.jp> References: <20130410150524.804cd23b99a697f71146be67@mxc.nes.nec.co.jp> X-Mailer: Sylpheed 3.3.0 (GTK+ 2.10.14; i686-pc-mingw32) Mime-Version: 1.0 Cc: linuxppc-dev@lists.ozlabs.org X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" From: Atsushi Kumagai Date: Fri, 15 Mar 2013 19:34:30 +0900 Subject: [PATCH 4/4] Use vmap_area_list to get vmalloc_start for ppc64. Try to get vmalloc_start value from vmap_area_list first for newer ppc64 kernels. Signed-off-by: Atsushi Kumagai --- arch/ppc64.c | 44 +++++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/arch/ppc64.c b/arch/ppc64.c index afbaf55..c229ede 100644 --- a/arch/ppc64.c +++ b/arch/ppc64.c @@ -66,22 +66,40 @@ get_machdep_info_ppc64(void) DEBUG_MSG("kernel_start : %lx\n", info->kernel_start); /* - * For the compatibility, makedumpfile should run without the symbol - * vmlist and the offset of vm_struct.addr if they are not necessary. + * Get vmalloc_start value from either vmap_area_list or vmlist. */ - if ((SYMBOL(vmlist) == NOT_FOUND_SYMBOL) - || (OFFSET(vm_struct.addr) == NOT_FOUND_STRUCTURE)) { + if ((SYMBOL(vmap_area_list) != NOT_FOUND_SYMBOL) + && (OFFSET(vmap_area.va_start) != NOT_FOUND_STRUCTURE) + && (OFFSET(vmap_area.list) != NOT_FOUND_STRUCTURE)) { + if (!readmem(VADDR, SYMBOL(vmap_area_list) + OFFSET(list_head.next), + &vmap_area_list, sizeof(vmap_area_list))) { + ERRMSG("Can't get vmap_area_list.\n"); + return FALSE; + } + if (!readmem(VADDR, vmap_area_list - OFFSET(vmap_area.list) + + OFFSET(vmap_area.va_start), &vmalloc_start, + sizeof(vmalloc_start))) { + ERRMSG("Can't get vmalloc_start.\n"); + return FALSE; + } + } else if ((SYMBOL(vmlist) != NOT_FOUND_SYMBOL) + && (OFFSET(vm_struct.addr) != NOT_FOUND_STRUCTURE)) { + if (!readmem(VADDR, SYMBOL(vmlist), &vmlist, sizeof(vmlist))) { + ERRMSG("Can't get vmlist.\n"); + return FALSE; + } + if (!readmem(VADDR, vmlist + OFFSET(vm_struct.addr), &vmalloc_start, + sizeof(vmalloc_start))) { + ERRMSG("Can't get vmalloc_start.\n"); + return FALSE; + } + } else { + /* + * For the compatibility, makedumpfile should run without the symbol + * vmlist and the offset of vm_struct.addr if they are not necessary. + */ return TRUE; } - if (!readmem(VADDR, SYMBOL(vmlist), &vmlist, sizeof(vmlist))) { - ERRMSG("Can't get vmlist.\n"); - return FALSE; - } - if (!readmem(VADDR, vmlist + OFFSET(vm_struct.addr), &vmalloc_start, - sizeof(vmalloc_start))) { - ERRMSG("Can't get vmalloc_start.\n"); - return FALSE; - } info->vmalloc_start = vmalloc_start; DEBUG_MSG("vmalloc_start: %lx\n", vmalloc_start);