Page MenuHomeFreeBSD

D55734.id.diff
No OneTemporary

D55734.id.diff

diff --git a/sys/compat/linuxkpi/common/include/asm/pgtable.h b/sys/compat/linuxkpi/common/include/asm/pgtable.h
--- a/sys/compat/linuxkpi/common/include/asm/pgtable.h
+++ b/sys/compat/linuxkpi/common/include/asm/pgtable.h
@@ -53,6 +53,40 @@
#define _PAGE_PWT (((pteval_t) 1) << _PAGE_BIT_PWT)
#define _PAGE_PCD (((pteval_t) 1) << _PAGE_BIT_PCD)
#define _PAGE_PAT (((pteval_t) 1) << _PAGE_BIT_PAT)
+
+/*
+ * On Linux, the value of `PMD_SHIFT` is hard-coded to 21. This corresponds to
+ * the FreeBSD `PDRSHIFT` constant.
+ */
+#define PMD_SHIFT PDRSHIFT
+
+#elif defined(__aarch64__)
+
+/*
+ * On Linux, the value of `PMD_SHIFT` is computed from `CONFIG_PGTABLE_LEVELS`.
+ * The result corresponds to one of the FreeBSD `L*_SHIFT` constants. Here, we
+ * take the value 21 computed from `CONFIG_PGTABLE_LEVELS = 4`, the default on
+ * aarch64, which equals to `L2_SHIFT`.
+ */
+#define PMD_SHIFT L2_SHIFT
+
+#elif defined(__powerpc__)
+
+/*
+ * On Linux, the value of `PMD_SHIFT` is the addition of `PAGE_SHIFT` and
+ * `PTE_INDEX_SIZE` (hard-coded to 9). The result corresponds to the FreeBSD
+ * `L3_PAGE_SIZE_SHIFT` constant.
+ */
+#define PMD_SHIFT L3_PAGE_SIZE_SHIFT
+
+#elif defined(__riscv)
+
+/*
+ * On Linux, the value of `PMD_SHIFT` is hard-coded to 21. This corresponds to
+ * the FreeBSD `L2_SHIFT` constant.
+ */
+#define PMD_SHIFT L2_SHIFT
+
#endif
#endif /* _LINUXKPI_ASM_PGTABLE_H_ */

File Metadata

Mime Type
text/plain
Expires
Wed, Apr 8, 11:52 PM (7 h, 8 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30738022
Default Alt Text
D55734.id.diff (1 KB)

Event Timeline