From owner-svn-src-all@FreeBSD.ORG Thu Dec 26 07:10:55 2013 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 58C38711; Thu, 26 Dec 2013 07:10:55 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 450E917AC; Thu, 26 Dec 2013 07:10:55 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id rBQ7AtJv042028; Thu, 26 Dec 2013 07:10:55 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.7/8.14.7/Submit) id rBQ7Attk042027; Thu, 26 Dec 2013 07:10:55 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201312260710.rBQ7Attk042027@svn.freebsd.org> From: Marcel Moolenaar Date: Thu, 26 Dec 2013 07:10:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r259910 - head/lib/libkvm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 26 Dec 2013 07:10:55 -0000 Author: marcel Date: Thu Dec 26 07:10:54 2013 New Revision: 259910 URL: http://svnweb.freebsd.org/changeset/base/259910 Log: Fix "kptdir is itself virtual" error, caused by having the kptdir in PBVM. While here improve errors by having them include addresses (either virtual or physical). Modified: head/lib/libkvm/kvm_ia64.c Modified: head/lib/libkvm/kvm_ia64.c ============================================================================== --- head/lib/libkvm/kvm_ia64.c Thu Dec 26 05:54:58 2013 (r259909) +++ head/lib/libkvm/kvm_ia64.c Thu Dec 26 07:10:54 2013 (r259910) @@ -100,20 +100,23 @@ _kvm_pa2off(kvm_t *kd, uint64_t pa, off_ Elf64_Phdr *p = (Elf64_Phdr*)((char*)e + e->e_phoff); int n = e->e_phnum; - if (pa != REGION_ADDR(pa)) { - _kvm_err(kd, kd->program, "internal error"); - return (0); - } + if (pa != REGION_ADDR(pa)) + goto fail; while (n && (pa < p->p_paddr || pa >= p->p_paddr + p->p_memsz)) p++, n--; if (n == 0) - return (0); + goto fail; *ofs = (pa - p->p_paddr) + p->p_offset; if (pgsz == 0) return (p->p_memsz - (pa - p->p_paddr)); return (pgsz - ((size_t)pa & (pgsz - 1))); + + fail: + _kvm_err(kd, kd->program, "invalid physical address %#llx", + (unsigned long long)pa); + return (0); } static ssize_t @@ -225,7 +228,7 @@ _kvm_initvtop(kvm_t *kd) return (-1); } - if (va < REGION_BASE(6)) { + if (va == REGION_BASE(5)) { _kvm_err(kd, kd->program, "kptdir is itself virtual"); return (-1); } @@ -286,7 +289,8 @@ _kvm_kvatop(kvm_t *kd, u_long va, off_t } fail: - _kvm_err(kd, kd->program, "invalid kernel virtual address"); + _kvm_err(kd, kd->program, "invalid kernel virtual address %#llx", + (unsigned long long)va); *ofs = ~0UL; return (0); }