summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Vivier <lvivier@redhat.com>2016-08-08 15:08:53 +0200
committerMichael Roth <mdroth@linux.vnet.ibm.com>2016-08-15 08:55:58 -0500
commit1f1b96a1dfb3d311fa467a8dbbb557111df10f9a (patch)
tree2b3ac92a72bbf17e419accf35981045f5bde003f
parent236039b89da8cf0a82fe32e605c1d647a13820f0 (diff)
downloadqemu-1f1b96a1dfb3d311fa467a8dbbb557111df10f9a.tar.gz
ppc64: fix compressed dump with pseries kernel
If we don't provide the page size in target-ppc:cpu_get_dump_info(), the default one (TARGET_PAGE_SIZE, 4KB) is used to create the compressed dump. It works fine with Macintosh, but not with pseries as the kernel default page size is 64KB. Without this patch, if we generate a compressed dump in the QEMU monitor: (qemu) dump-guest-memory -z qemu.dump This dump cannot be read by crash: # crash vmlinux qemu.dump ... WARNING: cannot translate vmemmap kernel virtual addresses: commands requiring page structure contents will fail ... Page_size is used to determine the dumpfile's block size. The block size needs to be at least the page size, but a multiple of page size works fine too. For PPC64, linux supports either 4KB or 64KB software page size. So we define the page_size to 64KB. Signed-off-by: Laurent Vivier <lvivier@redhat.com> Reviewed-by: Andrew Jones <drjones@redhat.com> Signed-off-by: David Gibson <david@gibson.dropbear.id.au> (cherry picked from commit 760d88d1d0c409f1afe6f1c91539487413e8b2a9) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
-rw-r--r--target-ppc/arch_dump.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/target-ppc/arch_dump.c b/target-ppc/arch_dump.c
index df1fd8c336..40282a1f50 100644
--- a/target-ppc/arch_dump.c
+++ b/target-ppc/arch_dump.c
@@ -220,6 +220,11 @@ int cpu_get_dump_info(ArchDumpInfo *info,
} else {
info->d_endian = ELFDATA2LSB;
}
+ /* 64KB is the max page size for pseries kernel */
+ if (strncmp(object_get_typename(qdev_get_machine()),
+ "pseries-", 8) == 0) {
+ info->page_size = (1U << 16);
+ }
return 0;
}