svn commit: r295166 - in head/sys/arm: arm include

Svatopluk Kraus skra at FreeBSD.org
Tue Feb 2 21:10:57 UTC 2016


Author: skra
Date: Tue Feb  2 21:10:55 2016
New Revision: 295166
URL: https://svnweb.freebsd.org/changeset/base/295166

Log:
  Make pmap_preboot_map_attr() vm subsystem compliant, so its arguments
  do not depend on pmap internals. This is a preparation for hiding
  internal pmap definitions as much as possible from the rest of system.
  
  Simultaneously, the protection argument evaluation is fixed. Happily,
  it did not effect the mappings. And it's the reason why it was not fixed
  earlier.

Modified:
  head/sys/arm/arm/pmap-v6.c
  head/sys/arm/include/pmap-v6.h

Modified: head/sys/arm/arm/pmap-v6.c
==============================================================================
--- head/sys/arm/arm/pmap-v6.c	Tue Feb  2 21:10:43 2016	(r295165)
+++ head/sys/arm/arm/pmap-v6.c	Tue Feb  2 21:10:55 2016	(r295166)
@@ -645,7 +645,7 @@ pt2map_pt2pg(vm_offset_t va)
  *  vm_offset_t pmap_preboot_reserve_pages(u_int num);
  *  vm_offset_t pmap_preboot_get_vpages(u_int num);
  *  void pmap_preboot_map_attr(vm_paddr_t pa, vm_offset_t va, vm_size_t size,
- *      int prot, int attr);
+ *      vm_prot_t prot, vm_memattr_t attr);
  *
  *  (2) for all stages:
  *
@@ -984,15 +984,16 @@ pmap_preboot_get_vpages(u_int num)
  *  Pre-bootstrap epoch page mapping(s) with attributes.
  */
 void
-pmap_preboot_map_attr(vm_paddr_t pa, vm_offset_t va, vm_size_t size, int prot,
-    int attr)
+pmap_preboot_map_attr(vm_paddr_t pa, vm_offset_t va, vm_size_t size,
+    vm_prot_t prot, vm_memattr_t attr)
 {
 	u_int num;
-	u_int l1_attr, l1_prot;
+	u_int l1_attr, l1_prot, l2_prot;
 	pt1_entry_t *pte1p;
 	pt2_entry_t *pte2p;
 
-	l1_prot = ATTR_TO_L1(prot);
+	l2_prot = prot & VM_PROT_WRITE ? PTE2_AP_KRW : PTE2_AP_KR;
+	l1_prot = ATTR_TO_L1(l2_prot);
 	l1_attr = ATTR_TO_L1(attr);
 
 	/* Map all the pages. */
@@ -1006,13 +1007,12 @@ pmap_preboot_map_attr(vm_paddr_t pa, vm_
 			num -= PTE1_SIZE;
 		} else {
 			pte2p = pmap_preboot_vtopte2(va);
-			pte2_store(pte2p, PTE2_KERN(pa, prot, attr));
+			pte2_store(pte2p, PTE2_KERN(pa, l2_prot, attr));
 			va += PAGE_SIZE;
 			pa += PAGE_SIZE;
 			num -= PAGE_SIZE;
 		}
 	}
-
 }
 
 /*

Modified: head/sys/arm/include/pmap-v6.h
==============================================================================
--- head/sys/arm/include/pmap-v6.h	Tue Feb  2 21:10:43 2016	(r295165)
+++ head/sys/arm/include/pmap-v6.h	Tue Feb  2 21:10:55 2016	(r295166)
@@ -216,8 +216,8 @@ vm_paddr_t pmap_preboot_get_pages(u_int 
 void pmap_preboot_map_pages(vm_paddr_t , vm_offset_t , u_int );
 vm_offset_t pmap_preboot_reserve_pages(u_int );
 vm_offset_t pmap_preboot_get_vpages(u_int );
-void pmap_preboot_map_attr(vm_paddr_t , vm_offset_t , vm_size_t ,
-	int , int );
+void pmap_preboot_map_attr(vm_paddr_t, vm_offset_t, vm_size_t, vm_prot_t,
+    vm_memattr_t);
 static __inline void
 pmap_map_chunk(vm_offset_t l1pt, vm_offset_t va, vm_offset_t pa,
     vm_size_t size, int prot, int cache)


More information about the svn-src-all mailing list