Skip to content
This repository has been archived by the owner on Jul 26, 2021. It is now read-only.

Commit

Permalink
hw/ppc/spapr_hcall: set htab_shift after kvmppc_resize_hpt_commit
Browse files Browse the repository at this point in the history
Newer kernels have a htab resize capability when adding or remove
memory. At these situations, the guest kernel might reallocate its
htab to a more suitable size based on the resulting memory.

However, we're not setting the new value back into the machine state
when a KVM guest resizes its htab. At first this doesn't seem harmful,
but when migrating or saving the guest state (via virsh managedsave,
for instance) this mismatch between the htab size of QEMU and the
kernel makes the guest hangs when trying to load its state.

Inside h_resize_hpt_commit, the hypercall that commits the hash page
resize changes, let's set spapr->htab_shift to the new value if we're
sure that kvmppc_resize_hpt_commit were successful.

While we're here, add a "not RADIX" sanity check as it is already done
in the related hypercall h_resize_hpt_prepare.

Fixes: open-power-host-os#28
Reported-by: Satheesh Rajendran <[email protected]>
Signed-off-by: Daniel Henrique Barboza <[email protected]>
Signed-off-by: David Gibson <[email protected]>
  • Loading branch information
danielhb authored and dgibson committed Feb 16, 2018
1 parent 4b402e0 commit 9478956
Showing 1 changed file with 11 additions and 1 deletion.
12 changes: 11 additions & 1 deletion hw/ppc/spapr_hcall.c
Original file line number Diff line number Diff line change
Expand Up @@ -731,11 +731,21 @@ static target_ulong h_resize_hpt_commit(PowerPCCPU *cpu,
return H_AUTHORITY;
}

if (!spapr->htab_shift) {
/* Radix guest, no HPT */
return H_NOT_AVAILABLE;
}

trace_spapr_h_resize_hpt_commit(flags, shift);

rc = kvmppc_resize_hpt_commit(cpu, flags, shift);
if (rc != -ENOSYS) {
return resize_hpt_convert_rc(rc);
rc = resize_hpt_convert_rc(rc);
if (rc == H_SUCCESS) {
/* Need to set the new htab_shift in the machine state */
spapr->htab_shift = shift;
}
return rc;
}

if (flags != 0) {
Expand Down

0 comments on commit 9478956

Please sign in to comment.