git: e66390736613 - main - Define _NPCM and the last PC_FREEn constant in terms of _NPCPV.
Date: Tue, 23 Aug 2022 20:31:29 UTC
The branch main has been updated by jhb:
URL: https://cgit.FreeBSD.org/src/commit/?id=e66390736613a452238531f64bb9f674ebd4c3a6
commit e66390736613a452238531f64bb9f674ebd4c3a6
Author: John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2022-08-23 20:31:02 +0000
Commit: John Baldwin <jhb@FreeBSD.org>
CommitDate: 2022-08-23 20:31:02 +0000
Define _NPCM and the last PC_FREEn constant in terms of _NPCPV.
This applies one of the changes from
5567d6b4419b02a2099527228b1a51cc55a5b47d to other architectures
besides arm64.
Reviewed by: kib
Sponsored by: DARPA
Differential Revision: https://reviews.freebsd.org/D36263
---
sys/amd64/amd64/pmap.c | 2 +-
sys/amd64/include/pmap.h | 3 ++-
sys/arm/arm/pmap-v6.c | 2 +-
sys/arm/include/pmap-v6.h | 3 ++-
sys/i386/i386/pmap.c | 2 +-
sys/i386/include/pmap.h | 3 ++-
sys/powerpc/aim/mmu_radix.c | 2 +-
sys/powerpc/include/pmap.h | 3 ++-
sys/riscv/include/pmap.h | 3 ++-
sys/riscv/riscv/pmap.c | 2 +-
10 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index 893774357629..326103a1affb 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -5085,7 +5085,7 @@ pv_to_chunk(pv_entry_t pv)
#define PC_FREE0 0xfffffffffffffffful
#define PC_FREE1 0xfffffffffffffffful
-#define PC_FREE2 0x000000fffffffffful
+#define PC_FREE2 ((1ul << (_NPCPV % 64)) - 1)
static const uint64_t pc_freemask[_NPCM] = { PC_FREE0, PC_FREE1, PC_FREE2 };
diff --git a/sys/amd64/include/pmap.h b/sys/amd64/include/pmap.h
index 3d51803d82b7..c37ae82c0301 100644
--- a/sys/amd64/include/pmap.h
+++ b/sys/amd64/include/pmap.h
@@ -439,8 +439,9 @@ typedef struct pv_entry {
* pv_entries are allocated in chunks per-process. This avoids the
* need to track per-pmap assignments.
*/
-#define _NPCM 3
#define _NPCPV 168
+#define _NPCM howmany(_NPCPV, 64)
+
#define PV_CHUNK_HEADER \
pmap_t pc_pmap; \
TAILQ_ENTRY(pv_chunk) pc_list; \
diff --git a/sys/arm/arm/pmap-v6.c b/sys/arm/arm/pmap-v6.c
index 51438274f1ff..107519be9dc0 100644
--- a/sys/arm/arm/pmap-v6.c
+++ b/sys/arm/arm/pmap-v6.c
@@ -2753,7 +2753,7 @@ pv_to_chunk(pv_entry_t pv)
#define PV_PMAP(pv) (pv_to_chunk(pv)->pc_pmap)
#define PC_FREE0_9 0xfffffffful /* Free values for index 0 through 9 */
-#define PC_FREE10 0x0000fffful /* Free values for index 10 */
+#define PC_FREE10 ((1ul << (_NPCPV % 32)) - 1) /* Free values for index 10 */
static const uint32_t pc_freemask[_NPCM] = {
PC_FREE0_9, PC_FREE0_9, PC_FREE0_9,
diff --git a/sys/arm/include/pmap-v6.h b/sys/arm/include/pmap-v6.h
index aa596aa699c6..adb21fbb82fa 100644
--- a/sys/arm/include/pmap-v6.h
+++ b/sys/arm/include/pmap-v6.h
@@ -143,8 +143,9 @@ typedef struct pv_entry {
* pv_entries are allocated in chunks per-process. This avoids the
* need to track per-pmap assignments.
*/
-#define _NPCM 11
#define _NPCPV 336
+#define _NPCM howmany(_NPCPV, 32)
+
struct pv_chunk {
pmap_t pc_pmap;
TAILQ_ENTRY(pv_chunk) pc_list;
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c
index eaff33bafe84..70139b2f4e66 100644
--- a/sys/i386/i386/pmap.c
+++ b/sys/i386/i386/pmap.c
@@ -2301,7 +2301,7 @@ pv_to_chunk(pv_entry_t pv)
#define PV_PMAP(pv) (pv_to_chunk(pv)->pc_pmap)
#define PC_FREE0_9 0xfffffffful /* Free values for index 0 through 9 */
-#define PC_FREE10 0x0000fffful /* Free values for index 10 */
+#define PC_FREE10 ((1ul << (_NPCPV % 32)) - 1) /* Free values for index 10 */
static const uint32_t pc_freemask[_NPCM] = {
PC_FREE0_9, PC_FREE0_9, PC_FREE0_9,
diff --git a/sys/i386/include/pmap.h b/sys/i386/include/pmap.h
index 5ac99b92cad3..7174c3d5b2bd 100644
--- a/sys/i386/include/pmap.h
+++ b/sys/i386/include/pmap.h
@@ -209,8 +209,9 @@ typedef struct pv_entry {
* pv_entries are allocated in chunks per-process. This avoids the
* need to track per-pmap assignments.
*/
-#define _NPCM 11
#define _NPCPV 336
+#define _NPCM howmany(_NPCPV, 32)
+
struct pv_chunk {
pmap_t pc_pmap;
TAILQ_ENTRY(pv_chunk) pc_list;
diff --git a/sys/powerpc/aim/mmu_radix.c b/sys/powerpc/aim/mmu_radix.c
index 955618d57e68..82d411db851a 100644
--- a/sys/powerpc/aim/mmu_radix.c
+++ b/sys/powerpc/aim/mmu_radix.c
@@ -1169,7 +1169,7 @@ pv_to_chunk(pv_entry_t pv)
#define PV_PMAP(pv) (pv_to_chunk(pv)->pc_pmap)
#define PC_FREE0 0xfffffffffffffffful
-#define PC_FREE1 0x3ffffffffffffffful
+#define PC_FREE1 ((1ul << (_NPCPV % 64)) - 1)
static const uint64_t pc_freemask[_NPCM] = { PC_FREE0, PC_FREE1 };
diff --git a/sys/powerpc/include/pmap.h b/sys/powerpc/include/pmap.h
index d14398750080..1240b5fe5c7e 100644
--- a/sys/powerpc/include/pmap.h
+++ b/sys/powerpc/include/pmap.h
@@ -214,8 +214,9 @@ struct pmap {
* pv_entries are allocated in chunks per-process. This avoids the
* need to track per-pmap assignments.
*/
-#define _NPCM 2
#define _NPCPV 126
+#define _NPCM howmany(_NPCPV, 64)
+
#define PV_CHUNK_HEADER \
pmap_t pc_pmap; \
TAILQ_ENTRY(pv_chunk) pc_list; \
diff --git a/sys/riscv/include/pmap.h b/sys/riscv/include/pmap.h
index 8eb5b394fd32..6bfede99e578 100644
--- a/sys/riscv/include/pmap.h
+++ b/sys/riscv/include/pmap.h
@@ -97,8 +97,9 @@ typedef struct pv_entry {
* pv_entries are allocated in chunks per-process. This avoids the
* need to track per-pmap assignments.
*/
-#define _NPCM 3
#define _NPCPV 168
+#define _NPCM howmany(_NPCPV, 64)
+
struct pv_chunk {
struct pmap * pc_pmap;
TAILQ_ENTRY(pv_chunk) pc_list;
diff --git a/sys/riscv/riscv/pmap.c b/sys/riscv/riscv/pmap.c
index 9799b2b7bd91..3ac6f9997978 100644
--- a/sys/riscv/riscv/pmap.c
+++ b/sys/riscv/riscv/pmap.c
@@ -1727,7 +1727,7 @@ pv_to_chunk(pv_entry_t pv)
#define PC_FREE0 0xfffffffffffffffful
#define PC_FREE1 0xfffffffffffffffful
-#define PC_FREE2 0x000000fffffffffful
+#define PC_FREE2 ((1ul << (_NPCPV % 64)) - 1)
static const uint64_t pc_freemask[_NPCM] = { PC_FREE0, PC_FREE1, PC_FREE2 };