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