Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 1 Aug 2019 22:48:06 +0000 (UTC)
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r350525 - in head/sys/arm64: arm64 include
Message-ID:  <201908012248.x71Mm641038012@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: markj
Date: Thu Aug  1 22:48:06 2019
New Revision: 350525
URL: https://svnweb.freebsd.org/changeset/base/350525

Log:
  Use ATTR_DBM even when hardware dirty bit management is not enabled.
  
  The ARMv8 reference manual only states that the bit is reserved in
  this case; following Linux's example, use it instead of a
  software-defined bit for the purpose of indicating that a managed
  mapping is writable.
  
  Reviewed by:	alc, andrew
  MFC after:	r350004
  Sponsored by:	The FreeBSD Foundation
  Differential Revision:	https://reviews.freebsd.org/D21121

Modified:
  head/sys/arm64/arm64/pmap.c
  head/sys/arm64/include/pte.h

Modified: head/sys/arm64/arm64/pmap.c
==============================================================================
--- head/sys/arm64/arm64/pmap.c	Thu Aug  1 22:22:06 2019	(r350524)
+++ head/sys/arm64/arm64/pmap.c	Thu Aug  1 22:48:06 2019	(r350525)
@@ -221,8 +221,11 @@ __FBSDID("$FreeBSD$");
  * The presence of this flag indicates that the mapping is writeable.
  * If the ATTR_AP_RO bit is also set, then the mapping is clean, otherwise it is
  * dirty.  This flag may only be set on managed mappings.
+ *
+ * The DBM bit is reserved on ARMv8.0 but it seems we can safely treat it
+ * as a software managed bit.
  */
-static pt_entry_t ATTR_SW_DBM;
+#define	ATTR_SW_DBM	ATTR_DBM
 
 struct pmap kernel_pmap_store;
 
@@ -783,15 +786,6 @@ pmap_bootstrap(vm_offset_t l0pt, vm_offset_t l1pt, vm_
 	vm_paddr_t start_pa, pa, min_pa;
 	uint64_t kern_delta;
 	int i;
-
-#ifdef notyet
-	/* Determine whether the hardware implements DBM management. */
-	uint64_t reg = READ_SPECIALREG(ID_AA64MMFR1_EL1);
-	ATTR_SW_DBM = ID_AA64MMFR1_HAFDBS(reg) == ID_AA64MMFR1_HAFDBS_AF_DBS ?
-	    ATTR_DBM : _ATTR_SW_DBM;
-#else
-	ATTR_SW_DBM = _ATTR_SW_DBM;
-#endif
 
 	kern_delta = KERNBASE - kernstart;
 

Modified: head/sys/arm64/include/pte.h
==============================================================================
--- head/sys/arm64/include/pte.h	Thu Aug  1 22:22:06 2019	(r350524)
+++ head/sys/arm64/include/pte.h	Thu Aug  1 22:48:06 2019	(r350525)
@@ -43,8 +43,8 @@ typedef	uint64_t	pt_entry_t;		/* page table entry */
 #define	ATTR_MASK_L	UINT64_C(0x0000000000000fff)
 #define	ATTR_MASK	(ATTR_MASK_H | ATTR_MASK_L)
 /* Bits 58:55 are reserved for software */
-#define	ATTR_SW_UNUSED	(1UL << 58)
-#define	_ATTR_SW_DBM	(1UL << 57)
+#define	ATTR_SW_UNUSED2	(1UL << 58)
+#define	ATTR_SW_UNUSED1	(1UL << 57)
 #define	ATTR_SW_MANAGED	(1UL << 56)
 #define	ATTR_SW_WIRED	(1UL << 55)
 #define	ATTR_UXN	(1UL << 54)



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