Skip to content
  • Paul Mackerras's avatar
    KVM: PPC: Book3S HV: Fix migration and HPT resizing of HPT guests on radix hosts · ded13fc1
    Paul Mackerras authored
    This fixes two errors that prevent a guest using the HPT MMU from
    successfully migrating to a POWER9 host in radix MMU mode, or resizing
    its HPT when running on a radix host.
    
    The first bug was that commit 8dc6cca5 ("KVM: PPC: Book3S HV:
    Don't rely on host's page size information", 2017-09-11) missed two
    uses of hpte_base_page_size(), one in the HPT rehashing code and
    one in kvm_htab_write() (which is used on the destination side in
    migrating a HPT guest).  Instead we use kvmppc_hpte_base_page_shift().
    Having the shift count means that we can use left and right shifts
    instead of multiplication and division in a few places.
    
    Along the way, this adds a check in kvm_htab_write() to ensure that the
    page size encoding in the incoming HPTEs is recognized, and if not
    return an EINVAL error to userspace.
    
    The second bug was that kvm_htab_write was performing some but not all
    of the functions of kvmhv_setup_mmu(), resulting in the destination VM
    being left in radix mode as far as the hardware is concerned.  The
    simplest fix for now is make kvm_htab_write() call
    kvmppc_setup_partition_table() like kvmppc_hv_setup_htab_rma() does.
    In future it would be better to refactor the code more extensively
    to remove the duplication.
    
    Fixes: 8dc6cca5 ("KVM: PPC: Book3S HV: Don't rely on host's page size information")
    Fixes: 7a84084c
    
     ("KVM: PPC: Book3S HV: Set partition table rather than SDR1 on POWER9")
    Reported-by: default avatarSuraj Jitindar Singh <sjitindarsingh@gmail.com>
    Tested-by: default avatarSuraj Jitindar Singh <sjitindarsingh@gmail.com>
    Signed-off-by: default avatarPaul Mackerras <paulus@ozlabs.org>
    ded13fc1