Allocate HTAB from ppc_spapr_init() so that we can abort the guest if requested HTAB size is't allocated by the host. However retain the htab reset call in spapr_reset_htab() so that HTAB gets reset (and not allocated) during machine reset.
Signed-off-by: Bharata B Rao <bhar...@linux.vnet.ibm.com> --- hw/ppc/spapr.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 7f4f196..4692122 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -979,7 +979,7 @@ static void emulate_spapr_hypercall(PowerPCCPU *cpu) #define CLEAN_HPTE(_hpte) ((*(uint64_t *)(_hpte)) &= tswap64(~HPTE64_V_HPTE_DIRTY)) #define DIRTY_HPTE(_hpte) ((*(uint64_t *)(_hpte)) |= tswap64(HPTE64_V_HPTE_DIRTY)) -static void spapr_reset_htab(sPAPRMachineState *spapr) +static void spapr_alloc_htab(sPAPRMachineState *spapr) { long shift; int index; @@ -1012,6 +1012,16 @@ static void spapr_reset_htab(sPAPRMachineState *spapr) DIRTY_HPTE(HPTE(spapr->htab, index)); } } +} + +static void spapr_reset_htab(sPAPRMachineState *spapr) +{ + /* + * We have already allocated the hash page table, this call will + * not again allocate but only result in clearing of hash page + * table entries. + */ + kvmppc_reset_htab(spapr->htab_shift); /* Update the RMA size if necessary */ if (spapr->vrma_adjust) { @@ -1709,6 +1719,7 @@ static void ppc_spapr_init(MachineState *machine) } spapr->htab_shift++; } + spapr_alloc_htab(spapr); /* Set up Interrupt Controller before we create the VCPUs */ spapr->icp = xics_system_init(machine, -- 2.1.0