[PATCH] makedumpfile: s390x: Allow large page and change override bits

Michael Holzheu holzheu at linux.vnet.ibm.com
Thu Feb 28 10:31:32 EST 2013


Currently makedumpfile fails if large page or change override bits
are set for region or segment table entries:

Excluding free pages               : [  0 %]
_kl_rsg_table_deref_s390x: Bad region/segment table entry.
readmem: Can't convert a virtual address(3d1015fc028) to physical address.
readmem: type_addr: 0, addr:3d1015fc028, size:8
reset_bitmap_of_free_pages: Can't get prev list_head.
_kl_rsg_table_deref_s390x: Bad region/segment table entry.
readmem: Can't convert a virtual address(3d1015fc028) to physical address.
readmem: type_addr: 0, addr:3d1015fc028, size:8
reset_bitmap_of_free_pages: Can't get prev list_head.
makedumpfile Failed.

Large page support is already implemented for the makedumpfile page table
walk. Only the check is invalid. To fix this we now allow the bits in
rsg_table_entry_bad().

Signed-off-by: Michael Holzheu <holzheu at linux.vnet.ibm.com>
---
 arch/s390x.c   |    4 +++-
 makedumpfile.h |    1 +
 2 files changed, 4 insertions(+), 1 deletion(-)

--- a/arch/s390x.c
+++ b/arch/s390x.c
@@ -133,7 +133,9 @@ rsg_table_entry_bad(unsigned long entry,
 {
 	unsigned long mask = ~_REGION_ENTRY_INVALID
 				& ~_REGION_ENTRY_TYPE_MASK
-				& ~_REGION_ENTRY_LENGTH;
+				& ~_REGION_ENTRY_LENGTH
+				& ~_SEGMENT_ENTRY_LARGE
+				& ~_SEGMENT_ENTRY_CO;
 
 	if (level)
 		mask &= ~_REGION_ENTRY_ORIGIN;
--- a/makedumpfile.h
+++ b/makedumpfile.h
@@ -617,6 +617,7 @@ do { \
 /* Bits in the segment table entry */
 #define _SEGMENT_ENTRY_ORIGIN	~0x7ffUL
 #define _SEGMENT_ENTRY_LARGE	0x400
+#define _SEGMENT_ENTRY_CO	0x100
 #define _SEGMENT_PAGE_SHIFT	31
 #define _SEGMENT_INDEX_SHIFT	20
 




More information about the kexec mailing list