Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 Mar 2013 12:33:51 +0000 (UTC)
From:      "Cherry G. Mathew" <cherry@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r248199 - projects/amd64_xen_pv/sys/amd64/xen
Message-ID:  <201303121233.r2CCXp7F075011@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: cherry
Date: Tue Mar 12 12:33:50 2013
New Revision: 248199
URL: http://svnweb.freebsd.org/changeset/base/248199

Log:
  Modify the mmu_map_hold_va() to indicate if it had to allocate backing pages.
  'const'ify memrchr() to reflect its level of access to datatypes.
  
  Approved by: gibbs (implicit)

Modified:
  projects/amd64_xen_pv/sys/amd64/xen/mmu_map.c
  projects/amd64_xen_pv/sys/amd64/xen/mmu_map.h

Modified: projects/amd64_xen_pv/sys/amd64/xen/mmu_map.c
==============================================================================
--- projects/amd64_xen_pv/sys/amd64/xen/mmu_map.c	Tue Mar 12 12:23:47 2013	(r248198)
+++ projects/amd64_xen_pv/sys/amd64/xen/mmu_map.c	Tue Mar 12 12:33:50 2013	(r248199)
@@ -173,7 +173,7 @@ pmap_get_pt(uintptr_t va, pd_entry_t *pd
  * stateful api.
  */
 
-static const uint64_t SANE = 0xcafebabe;
+static const uint32_t SANE = 0xcafebabe;
 
 struct mmu_map_index {
 	pml4_entry_t *pml4t; /* Page Map Level 4 Table */
@@ -309,7 +309,7 @@ mmu_map_inspect_va(struct pmap *pm, void
 	return true;
 }
 
-void
+bool
 mmu_map_hold_va(struct pmap *pm, void *addr, uintptr_t va)
 {
 	KASSERT(addr != NULL && pm != NULL, ("NULL arg(s) given"));
@@ -317,6 +317,7 @@ mmu_map_hold_va(struct pmap *pm, void *a
 	struct mmu_map_index *pti = addr;
 	KASSERT(pti->sanity == SANE, ("Uninitialised index cookie used"));
 
+	bool alloced = false; /* Did we have to alloc backing pages ? */
 	vm_paddr_t pt;
 
 	pti->pml4t = pmap_get_pml4t(pm);
@@ -329,6 +330,7 @@ mmu_map_hold_va(struct pmap *pm, void *a
 		pml4_entry_t pml4te;
 
 		pti->pdpt = (pdp_entry_t *)pti->ptmb.alloc();
+		alloced = true;
 
 		pml4tep = &pti->pml4t[pml4t_index(va)];
 		pml4tep_ma = xpmap_ptom(pti->ptmb.vtop((uintptr_t)pml4tep));
@@ -347,6 +349,7 @@ mmu_map_hold_va(struct pmap *pm, void *a
 		pdp_entry_t pdpte;
 
 		pti->pdt = (pd_entry_t *)pti->ptmb.alloc();
+		alloced = true;
 
 		pdptep = &pti->pdpt[pdpt_index(va)];
 		pdptep_ma = xpmap_ptom(pti->ptmb.vtop((uintptr_t)pdptep));
@@ -359,12 +362,14 @@ mmu_map_hold_va(struct pmap *pm, void *a
 
 	pt = pmap_get_pt(va, pti->pdt);
 
+
 	if (pt == 0) {
 		pd_entry_t *pdtep;
 		vm_paddr_t pdtep_ma;
 		pd_entry_t pdte;
 
 		pti->pt = (pt_entry_t *) pti->ptmb.alloc();
+		alloced = true;
 
 		pdtep = &pti->pdt[pdt_index(va)];
 		pdtep_ma = xpmap_ptom(pti->ptmb.vtop((uintptr_t)pdtep));
@@ -374,6 +379,8 @@ mmu_map_hold_va(struct pmap *pm, void *a
 	} else {
 		pti->pt = (pt_entry_t *) pti->ptmb.ptov(pt);
 	}
+
+	return alloced;
 }
 
 /*$FreeBSD: head/lib/libc/string/memrchr.c 178051 2008-04-10 00:12:44Z delphij $*/
@@ -381,16 +388,19 @@ mmu_map_hold_va(struct pmap *pm, void *a
  * Reverse memchr()
  * Find the last occurrence of 'c' in the buffer 's' of size 'n'.
  */
-static void *
+
+static const void * memrchr(const void *, int, size_t);
+
+static const void *
 memrchr(const void *s, int c, size_t n)
 {
 	const unsigned char *cp;
 
 	if (n != 0) {
-		cp = (unsigned char *)s + n;
+		cp = (const unsigned char *)s + n;
 		do {
 			if (*(--cp) == (unsigned char)c)
-				return((void *)cp);
+				return((const void *)cp);
 		} while (--n != 0);
 	}
 	return(NULL);

Modified: projects/amd64_xen_pv/sys/amd64/xen/mmu_map.h
==============================================================================
--- projects/amd64_xen_pv/sys/amd64/xen/mmu_map.h	Tue Mar 12 12:23:47 2013	(r248198)
+++ projects/amd64_xen_pv/sys/amd64/xen/mmu_map.h	Tue Mar 12 12:33:50 2013	(r248199)
@@ -131,7 +131,7 @@ bool mmu_map_inspect_va(struct pmap *, m
  * Unconditionally allocate resources to setup and "inspect" (as
  * above) a given va->pa mapping 
  */
-void mmu_map_hold_va(struct pmap *,  mmu_map_t, vm_offset_t);
+bool mmu_map_hold_va(struct pmap *,  mmu_map_t, vm_offset_t);
 
 /* Optionally release resources after tear down of a va->pa mapping */
 void mmu_map_release_va(struct pmap *, mmu_map_t, vm_offset_t);



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