Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 22 Aug 2013 22:26:47 +0000 (UTC)
From:      Peter Grehan <grehan@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r254675 - projects/bhyve_svm/sys/amd64/vmm/amd
Message-ID:  <201308222226.r7MMQl1A079911@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: grehan
Date: Thu Aug 22 22:26:46 2013
New Revision: 254675
URL: http://svnweb.freebsd.org/changeset/base/254675

Log:
  Handle VM_PROT_NONE in nested page table code.
  
  Submitted by:	Anish Gupta (akgupt3@gmail.com)

Modified:
  projects/bhyve_svm/sys/amd64/vmm/amd/npt.c

Modified: projects/bhyve_svm/sys/amd64/vmm/amd/npt.c
==============================================================================
--- projects/bhyve_svm/sys/amd64/vmm/amd/npt.c	Thu Aug 22 22:20:54 2013	(r254674)
+++ projects/bhyve_svm/sys/amd64/vmm/amd/npt.c	Thu Aug 22 22:26:46 2013	(r254675)
@@ -101,13 +101,11 @@ svm_npt_create(pml4_entry_t * pml4, vm_p
 	}
 
 	/* Find out mode bits for PTE */
-	mode = PG_U;
+	mode = PG_U | PG_V;
 	if (prot & VM_PROT_WRITE)
 		mode |= PG_RW;
 	if ((prot & VM_PROT_EXECUTE) == 0) 	
 		mode |= pg_nx;
-	if (prot != VM_PROT_NONE) 
-		mode |= PG_V;
 		
 	pt = (uint64_t *)pml4;
 	shift = PML4SHIFT;
@@ -129,18 +127,13 @@ svm_npt_create(pml4_entry_t * pml4, vm_p
 
 	/* Create leaf entry mapping. */
 	index = (gpa >> shift) & PT_INDEX_MASK;
-	if (pt[index] != 0) {
-		ERR("Mapping already exists.\n");
-		return (0);
-	}
-
-	pt[index] = hpa | mode;
 	
-	/* If its not last level page table entry, set PS bit. */
-	if (pg_size > PAGE_SIZE) {
-		pt[index] |= PG_PS;
-	}
-
+	if (prot != VM_PROT_NONE) {
+		pt[index] = hpa | mode;
+		pt[index] |= (pg_size > PAGE_SIZE) ? PG_PS : 0;
+	} else
+		pt[index] = 0;
+	
 	return (1UL << shift);
 }
 
@@ -179,11 +172,6 @@ svm_npt_vmmap_set(void *arg, vm_paddr_t 
 	while (len < size) {
 		mapped = svm_npt_create(pml4, gpa + len, hpa + len, attr, prot,
 					pg_size);
-		if (mapped == 0) {
-			panic("Couldn't map GPA:0x%lx, size:0x%lx", gpa, 
-				pg_size);
-		}
-
 		len += mapped;
 	}
 



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