spapr: tune rtas-size
QEMU reserves space for RTAS via /rtas/rtas-size which tells the client
how much space the RTAS requires to work which includes the RTAS binary
blob implementing RTAS runtime. Because pseries supports FWNMI which
requires plenty of space, QEMU reserves more than 2KB which is
enough for the RTAS blob as it is just 20 bytes (under QEMU).
Since FWNMI reset delivery was added, RTAS_SIZE macro is not used anymore.
This replaces RTAS_SIZE with RTAS_MIN_SIZE and uses it in
the /rtas/rtas-size calculation to account for the RTAS blob.
Fixes: 0e236d3477
("ppc/spapr: Implement FWNMI System Reset delivery")
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Message-Id: <20210622070336.1463250-1-aik@ozlabs.ru>
Reviewed-by: Greg Kurz <groug@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
642f6f59cd
commit
7381c5d11f
@ -919,9 +919,13 @@ static void spapr_dt_rtas(SpaprMachineState *spapr, void *fdt)
|
||||
*
|
||||
* The extra 8 bytes is required because Linux's FWNMI error log check
|
||||
* is off-by-one.
|
||||
*
|
||||
* RTAS_MIN_SIZE is required for the RTAS blob itself.
|
||||
*/
|
||||
_FDT(fdt_setprop_cell(fdt, rtas, "rtas-size", RTAS_ERROR_LOG_MAX +
|
||||
ms->smp.max_cpus * sizeof(uint64_t)*2 + sizeof(uint64_t)));
|
||||
_FDT(fdt_setprop_cell(fdt, rtas, "rtas-size", RTAS_MIN_SIZE +
|
||||
RTAS_ERROR_LOG_MAX +
|
||||
ms->smp.max_cpus * sizeof(uint64_t) * 2 +
|
||||
sizeof(uint64_t)));
|
||||
_FDT(fdt_setprop_cell(fdt, rtas, "rtas-error-log-max",
|
||||
RTAS_ERROR_LOG_MAX));
|
||||
_FDT(fdt_setprop_cell(fdt, rtas, "rtas-event-scan-rate",
|
||||
|
@ -770,7 +770,7 @@ void spapr_load_rtas(SpaprMachineState *spapr, void *fdt, hwaddr addr);
|
||||
#define SPAPR_IS_PCI_LIOBN(liobn) (!!((liobn) & 0x80000000))
|
||||
#define SPAPR_PCI_DMA_WINDOW_NUM(liobn) ((liobn) & 0xff)
|
||||
|
||||
#define RTAS_SIZE 2048
|
||||
#define RTAS_MIN_SIZE 20 /* hv_rtas_size in SLOF */
|
||||
#define RTAS_ERROR_LOG_MAX 2048
|
||||
|
||||
/* Offset from rtas-base where error log is placed */
|
||||
|
Loading…
Reference in New Issue
Block a user