aboutsummaryrefslogtreecommitdiff
path: root/hw/ppc
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2017-10-11 00:16:57 +1100
committerDavid Gibson <david@gibson.dropbear.id.au>2017-10-17 10:34:01 +1100
commitdb50f280cf5f714e64ff2b134aae138908f07502 (patch)
tree9fe4c0de99f07e78aedaac3ad8e895439b067d42 /hw/ppc
parentbeba5c0fe48bf80011ceeaacf0df0c186e413bc0 (diff)
downloadqemu-db50f280cf5f714e64ff2b134aae138908f07502.zip
qemu-db50f280cf5f714e64ff2b134aae138908f07502.tar.gz
qemu-db50f280cf5f714e64ff2b134aae138908f07502.tar.bz2
spapr: Correct RAM size calculation for HPT resizing
In order to prevent the guest from forcing the allocation of large amounts of qemu memory (or host kernel memory, in the case of KVM HV), we limit the size of Hashed Page Table (HPT) it is allowed to allocated, based on its RAM size. However, the current calculation is not correct: it only adds up the size of plugged memory, ignoring the base memory size. This patch corrects it. While we're there, use get_plugged_memory_size() instead of directly calling pc_existing_dimms_capacity(). The only difference is that it will abort on failure, which is right: a failure here indicates something wrong within qemu. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Reviewed-by: Greg Kurz <groug@kaod.org> Reviewed-by: Laurent Vivier <lvivier@redhat.com>
Diffstat (limited to 'hw/ppc')
-rw-r--r--hw/ppc/spapr_hcall.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
index 8d72bb7..0d59d15 100644
--- a/hw/ppc/spapr_hcall.c
+++ b/hw/ppc/spapr_hcall.c
@@ -472,7 +472,7 @@ static target_ulong h_resize_hpt_prepare(PowerPCCPU *cpu,
target_ulong flags = args[0];
int shift = args[1];
sPAPRPendingHPT *pending = spapr->pending_hpt;
- uint64_t current_ram_size = MACHINE(spapr)->ram_size;
+ uint64_t current_ram_size;
int rc;
if (spapr->resize_hpt == SPAPR_RESIZE_HPT_DISABLED) {
@@ -494,7 +494,7 @@ static target_ulong h_resize_hpt_prepare(PowerPCCPU *cpu,
return H_PARAMETER;
}
- current_ram_size = pc_existing_dimms_capacity(&error_fatal);
+ current_ram_size = MACHINE(spapr)->ram_size + get_plugged_memory_size();
/* We only allow the guest to allocate an HPT one order above what
* we'd normally give them (to stop a small guest claiming a huge