Author: zbb
Date: Thu Jul 27 23:14:17 2017
New Revision: 321633
URL: https://svnweb.freebsd.org/changeset/base/321633

Log:
  Fix TEX index acquisition using L2 attributes
  
  The TEX index is selected using (TEX0 C B) bits
  from the L2 descriptor. Use correct index by masking
  and shifting those bits accordingly.
  
  Differential Revision:        https://reviews.freebsd.org/D11703

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

Modified: head/sys/arm/arm/pmap-v6.c
==============================================================================
--- head/sys/arm/arm/pmap-v6.c  Thu Jul 27 23:09:12 2017        (r321632)
+++ head/sys/arm/arm/pmap-v6.c  Thu Jul 27 23:14:17 2017        (r321633)
@@ -525,8 +525,8 @@ pmap_remap_vm_attr(vm_memattr_t old_attr, vm_memattr_t
        int old_idx, new_idx;
 
        /* Map VM memattrs to indexes to tex_class table. */
-       old_idx = pte2_attr_tab[(int)old_attr];
-       new_idx = pte2_attr_tab[(int)new_attr];
+       old_idx = PTE2_ATTR2IDX(pte2_attr_tab[(int)old_attr]);
+       new_idx = PTE2_ATTR2IDX(pte2_attr_tab[(int)new_attr]);
 
        /* Replace TEX attribute and apply it. */
        tex_class[old_idx] = tex_class[new_idx];

Modified: head/sys/arm/include/pte-v6.h
==============================================================================
--- head/sys/arm/include/pte-v6.h       Thu Jul 27 23:09:12 2017        
(r321632)
+++ head/sys/arm/include/pte-v6.h       Thu Jul 27 23:14:17 2017        
(r321633)
@@ -149,10 +149,12 @@
 #define        L2_NX           0x00000001      /* Not executable */
 #define        L2_B            0x00000004      /* Bufferable page */
 #define        L2_C            0x00000008      /* Cacheable page */
+#define        L2_CB_SHIFT             2       /* C,B bit field shift */
 #define        L2_AP(x)        ((x) << 4)
 #define        L2_AP0          0x00000010      /* access permissions bit 0*/
 #define        L2_AP1          0x00000020      /* access permissions bit 1*/
-#define        L2_TEX(x)       ((x) << 6)      /* type extension */
+#define        L2_TEX_SHIFT            6       /* type extension field shift */
+#define        L2_TEX(x)       ((x) << L2_TEX_SHIFT)   /* type extension */
 #define        L2_TEX0         0x00000040      /* type extension bit 0 */
 #define        L2_TEX1         0x00000080      /* type extension bit 1 */
 #define        L2_TEX2         0x00000100      /* type extension bit 2 */
@@ -271,6 +273,10 @@
 #define        PTE2_FRAME      L2_S_FRAME
 
 #define        PTE2_ATTR_MASK          (L2_TEX0 | L2_C | L2_B)
+/* PTE2 attributes to TEX class index: (TEX0 C B)  */
+#define        PTE2_ATTR2IDX(attr)                                     \
+    ((((attr) & (L2_C | L2_B)) >> L2_CB_SHIFT) |               \
+    (((attr) & L2_TEX0) >> (L2_TEX_SHIFT - L2_CB_SHIFT)))
 
 #define        PTE2_AP_KR      (PTE2_RO | PTE2_NM)
 #define        PTE2_AP_KRW     0
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to