2024-04-26 11:57:13

by Claudio Imbrenda

[permalink] [raw]
Subject: [PATCH v2 0/2] s390/pgtable: misc small improvements

This series has two small improvements for the s390 page tables. they
fix some small inconsistencies and missing things.

The first aligns the layout of large puds with that of large pmds;
there is no reason for the large pud read and write softbits to be
swapped compared to large pmds.

The second adds a few bits to _SEGMENT_ENTRY_BITS,
_SEGMENT_ENTRY_HARDWARE_BITS and _SEGMENT_ENTRY_HARDWARE_BITS_LARGE;
those bits are supposed to always be zero, the current code was working
correctly since those bits were being ignored and always left set to
zero. The patch also introduces _REGION3_ENTRY_HARDWARE_BITS and
_REGION3_ENTRY_HARDWARE_BITS_LARGE, for completeness, which are the
bitmasks of the hardware bits for normal puds and large puds.


Claudio Imbrenda (2):
s390/pgtable: switch read and write softbits for puds
s390/pgtable: introduce _REGION3_ENTRY_HARDWARE_BITS_LARGE

arch/s390/include/asm/pgtable.h | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)

--
2.44.0



2024-04-26 11:57:35

by Claudio Imbrenda

[permalink] [raw]
Subject: [PATCH v2 2/2] s390/pgtable: introduce _REGION3_ENTRY_HARDWARE_BITS_LARGE

For completeness, introduce _REGION3_ENTRY_HARDWARE_BITS_LARGE,
containing the hardware bits used for large puds.

Signed-off-by: Claudio Imbrenda <[email protected]>
---
arch/s390/include/asm/pgtable.h | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
index 3da2995fd196..e2f713fae9c9 100644
--- a/arch/s390/include/asm/pgtable.h
+++ b/arch/s390/include/asm/pgtable.h
@@ -262,6 +262,8 @@ static inline int is_module_addr(void *addr)
#define _REGION3_ENTRY (_REGION_ENTRY_TYPE_R3 | _REGION_ENTRY_LENGTH)
#define _REGION3_ENTRY_EMPTY (_REGION_ENTRY_TYPE_R3 | _REGION_ENTRY_INVALID)

+#define _REGION3_ENTRY_HARDWARE_BITS_LARGE 0xffffffff8001073cUL
+#define _REGION3_ENTRY_HARDWARE_BITS 0xfffffffffffff6ffUL
#define _REGION3_ENTRY_ORIGIN_LARGE ~0x7fffffffUL /* large page address */
#define _REGION3_ENTRY_DIRTY 0x2000 /* SW region dirty bit */
#define _REGION3_ENTRY_YOUNG 0x1000 /* SW region young bit */
@@ -278,9 +280,9 @@ static inline int is_module_addr(void *addr)
#define _REGION_ENTRY_BITS 0xfffffffffffff22fUL

/* Bits in the segment table entry */
-#define _SEGMENT_ENTRY_BITS 0xfffffffffffffe33UL
-#define _SEGMENT_ENTRY_HARDWARE_BITS 0xfffffffffffffe30UL
-#define _SEGMENT_ENTRY_HARDWARE_BITS_LARGE 0xfffffffffff00730UL
+#define _SEGMENT_ENTRY_BITS 0xfffffffffffffe3fUL
+#define _SEGMENT_ENTRY_HARDWARE_BITS 0xfffffffffffffe3cUL
+#define _SEGMENT_ENTRY_HARDWARE_BITS_LARGE 0xfffffffffff1073cUL
#define _SEGMENT_ENTRY_ORIGIN_LARGE ~0xfffffUL /* large page address */
#define _SEGMENT_ENTRY_ORIGIN ~0x7ffUL/* page table origin */
#define _SEGMENT_ENTRY_PROTECT 0x200 /* segment protection bit */
--
2.44.0