Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 Jun 2005 23:54:36 GMT
From:      Peter Wemm <peter@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 78834 for review
Message-ID:  <200506222354.j5MNsaIM081452@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=78834

Change 78834 by peter@peter_melody on 2005/06/22 23:54:20

	Make the error reporting consistent.

Affected files ...

.. //depot/projects/hammer/lib/libkvm/kvm_amd64.c#12 edit

Differences ...

==== //depot/projects/hammer/lib/libkvm/kvm_amd64.c#12 (text+ko) ====

@@ -210,7 +210,7 @@
 	u_long pdeindex;
 	u_long pteindex;
 	int i;
-	u_long ofs;
+	u_long a, ofs;
 	size_t s;
 
 	if (ISALIVE(kd)) {
@@ -226,22 +226,27 @@
 	 * not yet set) then return pa == va to avoid infinite recursion.
 	 */
 	if (vm->PML4 == 0) {
-		*pa = va;
-		_kvm_pa2off(kd, va, pa);
-		return (PAGE_SIZE - offset);
+		s = _kvm_pa2off(kd, va, pa);
+		if (s == 0) {
+			_kvm_err(kd, kd->program, "_kvm_kvatop: bootstrap data not in dump");
+			goto invalid;
+		} else
+			return (PAGE_SIZE - offset);
 	}
 
 	pml4eindex = (va >> PML4SHIFT) & (NPML4EPG - 1);
 	pml4e = vm->PML4[pml4eindex];
-	if (((u_long)pml4e & PG_V) == 0)
+	if (((u_long)pml4e & PG_V) == 0) {
+		_kvm_err(kd, kd->program, "_kvm_kvatop: pml4e not valid");
 		goto invalid;
+	}
 
 	pdpeindex = (va >> PDPSHIFT) & (NPDPEPG-1);
 	pdpe_pa = ((u_long)pml4e & PG_FRAME) + (pdpeindex * sizeof(pdp_entry_t));
 
 	s = _kvm_pa2off(kd, pdpe_pa, &ofs);
 	if (s <= sizeof pdpe) {
-		_kvm_syserr(kd, kd->program, "_kvm_kvatop: pdpe_pa not found");
+		_kvm_err(kd, kd->program, "_kvm_kvatop: pdpe_pa not found");
 		goto invalid;
 	}
 	if (lseek(kd->pmfd, ofs, 0) == -1) {
@@ -252,10 +257,11 @@
 		_kvm_syserr(kd, kd->program, "_kvm_kvatop: read pdpe");
 		goto invalid;
 	}
-	if (((u_long)pdpe & PG_V) == 0)
+	if (((u_long)pdpe & PG_V) == 0) {
+		_kvm_err(kd, kd->program, "_kvm_kvatop: pdpe not valid");
 		goto invalid;
+	}
 
-
 	pdeindex = (va >> PDRSHIFT) & (NPDEPG-1);
 	pde_pa = ((u_long)pdpe & PG_FRAME) + (pdeindex * sizeof(pd_entry_t));
 
@@ -265,15 +271,17 @@
 		goto invalid;
 	}
 	if (lseek(kd->pmfd, ofs, 0) == -1) {
-		_kvm_syserr(kd, kd->program, "_kvm_kvatop: lseek pde_pa");
+		_kvm_err(kd, kd->program, "_kvm_kvatop: lseek pde_pa");
 		goto invalid;
 	}
 	if (read(kd->pmfd, &pde, sizeof pde) != sizeof pde) {
 		_kvm_syserr(kd, kd->program, "_kvm_kvatop: read pde");
 		goto invalid;
 	}
-	if (((u_long)pde & PG_V) == 0)
+	if (((u_long)pde & PG_V) == 0) {
+		_kvm_err(kd, kd->program, "_kvm_kvatop: pde not valid");
 		goto invalid;
+	}
 
 	if ((u_long)pde & PG_PS) {
 	      /*
@@ -281,9 +289,13 @@
 	       */
 #define	PAGE2M_MASK	(NBPDR - 1)
 #define	PG_FRAME2M	(~PAGE2M_MASK)
-		*pa = ((u_long)pde & PG_FRAME2M) + (va & PAGE2M_MASK);
-		_kvm_pa2off(kd, *pa, pa);
-		return (NBPDR - (va & PAGE2M_MASK));
+		a = ((u_long)pde & PG_FRAME2M) + (va & PAGE2M_MASK);
+		s = _kvm_pa2off(kd, a, pa);
+		if (s == 0) {
+			_kvm_err(kd, kd->program, "_kvm_kvatop: 2MB page address not in dump");
+			goto invalid;
+		} else
+			return (NBPDR - (va & PAGE2M_MASK));
 	}
 
 	pteindex = (va >> PAGE_SHIFT) & (NPTEPG-1);
@@ -291,7 +303,7 @@
 
 	s = _kvm_pa2off(kd, pte_pa, &ofs);
 	if (s <= sizeof pte) {
-		_kvm_syserr(kd, kd->program, "_kvm_kvatop: pte_pa not found");
+		_kvm_err(kd, kd->program, "_kvm_kvatop: pte_pa not found");
 		goto invalid;
 	}
 	if (lseek(kd->pmfd, ofs, 0) == -1) {
@@ -302,14 +314,20 @@
 		_kvm_syserr(kd, kd->program, "_kvm_kvatop: read");
 		goto invalid;
 	}
-	if (((u_long)pte & PG_V) == 0)
+	if (((u_long)pte & PG_V) == 0) {
+		_kvm_err(kd, kd->program, "_kvm_kvatop: pte not valid");
 		goto invalid;
+	}
 
-	*pa = ((u_long)pte & PG_FRAME) + offset;
-	_kvm_pa2off(kd, *pa, pa);
-	return (PAGE_SIZE - offset);
+	a = ((u_long)pte & PG_FRAME) + offset;
+	s = _kvm_pa2off(kd, a, pa);
+	if (s == 0) {
+		_kvm_err(kd, kd->program, "_kvm_kvatop: address not in dump");
+		goto invalid;
+	} else
+		return (PAGE_SIZE - offset);
 
 invalid:
-	_kvm_err(kd, 0, "invalid address (%x)", va);
+	_kvm_err(kd, 0, "invalid address (0x%lx)", (unsigned long)va);
 	return (0);
 }



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