[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