Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Dec 2013 07:10:55 +0000 (UTC)
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r259910 - head/lib/libkvm
Message-ID:  <201312260710.rBQ7Attk042027@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201312260710.rBQ7Attk042027>