• Claudio Imbrenda's avatar
    KVM: s390: pv: fix asynchronous teardown for small VMs · 292a7d6f
    Claudio Imbrenda authored
    On machines without the Destroy Secure Configuration Fast UVC, the
    topmost level of page tables is set aside and freed asynchronously
    as last step of the asynchronous teardown.
    
    Each gmap has a host_to_guest radix tree mapping host (userspace)
    addresses (with 1M granularity) to gmap segment table entries (pmds).
    
    If a guest is smaller than 2GB, the topmost level of page tables is the
    segment table (i.e. there are only 2 levels). Replacing it means that
    the pointers in the host_to_guest mapping would become stale and cause
    all kinds of nasty issues.
    
    This patch fixes the issue by disallowing asynchronous teardown for
    guests with only 2 levels of page tables. Userspace should (and already
    does) try using the normal destroy if the asynchronous one fails.
    
    Update s390_replace_asce so it refuses to replace segment type ASCEs.
    This is still needed in case the normal destroy VM fails.
    
    Fixes: fb491d55 ("KVM: s390: pv: asynchronous destroy for reboot")
    Reviewed-by: default avatarMarc Hartmayer <mhartmay@linux.ibm.com>
    Reviewed-by: default avatarJanosch Frank <frankja@linux.ibm.com>
    Signed-off-by: default avatarClaudio Imbrenda <imbrenda@linux.ibm.com>
    Message-Id: <20230421085036.52511-2-imbrenda@linux.ibm.com>
    292a7d6f
gmap.c 82.1 KB