[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [qemu-xen stable-4.10] spapr: Include "pre-plugged" DIMMS in ram size calculation at reset



commit 5f214279d456a52bf738887005af0e8d29c358b0
Author:     David Gibson <david@xxxxxxxxxxxxxxxxxxxxx>
AuthorDate: Fri Dec 1 16:05:33 2017 +1100
Commit:     Michael Roth <mdroth@xxxxxxxxxxxxxxxxxx>
CommitDate: Wed Dec 6 18:12:45 2017 -0600

    spapr: Include "pre-plugged" DIMMS in ram size calculation at reset
    
    At guest reset time, we allocate a hash page table (HPT) for the guest
    based on the guest's RAM size.  If dynamic HPT resizing is not available we
    use the maximum RAM size, if it is we use the current RAM size.
    
    But the "current RAM size" calculation is incorrect - we just use the
    "base" ram_size from the machine structure.  This doesn't include any
    pluggable DIMMs that are already plugged at reset time.
    
    This means that if you try to start a 'pseries' machine with a DIMM
    specified on the command line that's much larger than the "base" RAM size,
    then the guest will get a woefully inadequate HPT.  This can lead to a
    guest freeze during boot as it runs out of HPT space during initial MMU
    setup.
    
    Signed-off-by: David Gibson <david@xxxxxxxxxxxxxxxxxxxxx>
    Reviewed-by: Greg Kurz <groug@xxxxxxxx>
    Tested-by: Greg Kurz <groug@xxxxxxxx>
    (cherry picked from commit 768a20f3a491ed4afce73ebb65347d55251c0ebd)
    *drop dep on 9aa3397f
    Signed-off-by: Michael Roth <mdroth@xxxxxxxxxxxxxxxxxx>
---
 hw/ppc/spapr.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 8630281..8edac5d 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1366,7 +1366,10 @@ void spapr_setup_hpt_and_vrma(sPAPRMachineState *spapr)
             && !spapr_ovec_test(spapr->ov5_cas, OV5_HPT_RESIZE))) {
         hpt_shift = spapr_hpt_shift_for_ramsize(MACHINE(spapr)->maxram_size);
     } else {
-        hpt_shift = spapr_hpt_shift_for_ramsize(MACHINE(spapr)->ram_size);
+        uint64_t current_ram_size;
+
+        current_ram_size = MACHINE(spapr)->ram_size + 
pc_existing_dimms_capacity(&error_abort);
+        hpt_shift = spapr_hpt_shift_for_ramsize(current_ram_size);
     }
     spapr_reallocate_hpt(spapr, hpt_shift, &error_fatal);
 
--
generated by git-patchbot for /home/xen/git/qemu-xen.git#stable-4.10

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.