Extend rtas-blob to accommodate error log. Error log structure is saved in rtas space upon a machine check exception.
Signed-off-by: Aravinda Prasad <aravi...@linux.vnet.ibm.com> --- hw/ppc/spapr.c | 7 +++++++ include/hw/ppc/spapr.h | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 30de25d..38e26af 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1431,6 +1431,13 @@ static void ppc_spapr_init(MachineState *machine) filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, "spapr-rtas.bin"); spapr->rtas_size = get_image_size(filename); + + /* + * Resize blob to accommodate error log. The layout of the rtas + * blob is defined in include/hw/ppc/spapr.h + */ + spapr->rtas_size = TARGET_PAGE_ALIGN(spapr->rtas_size); + spapr->rtas_blob = g_malloc(spapr->rtas_size); if (load_image_size(filename, spapr->rtas_blob, spapr->rtas_size) < 0) { hw_error("qemu: could not load LPAR rtas '%s'\n", filename); diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index 749daf4..d08fcc2 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -480,4 +480,9 @@ int spapr_dma_dt(void *fdt, int node_off, const char *propname, int spapr_tcet_dma_dt(void *fdt, int node_off, const char *propname, sPAPRTCETable *tcet); +/* RTAS Blob layout in memory */ +#define RTAS_ENTRY_OFFSET 0 +#define RTAS_TRAMPOLINE_OFFSET 0x200 +#define RTAS_ERRLOG_OFFSET 0x800 + #endif /* !defined (__HW_SPAPR_H__) */