• Paul Mackerras's avatar
    KVM: PPC: Book3S HV: Make secondary threads more robust against stray IPIs · f0888f70
    Paul Mackerras authored
    Currently on POWER7, if we are running the guest on a core and we don't
    need all the hardware threads, we do nothing to ensure that the unused
    threads aren't executing in the kernel (other than checking that they
    are offline).  We just assume they're napping and we don't do anything
    to stop them trying to enter the kernel while the guest is running.
    This means that a stray IPI can wake up the hardware thread and it will
    then try to enter the kernel, but since the core is in guest context,
    it will execute code from the guest in hypervisor mode once it turns the
    MMU on, which tends to lead to crashes or hangs in the host.
    
    This fixes the problem by adding two new one-byte flags in the
    kvmppc_host_state structure in the PACA which are used to interlock
    between the primary thread and the unused secondary threads when entering
    the guest.  With these flags, the primary thread can ensure that the
    unused secondaries are not already in kernel mode (i.e. handling a stray
    IPI) and then indicate that they should not try to enter the kernel
    if they do get woken for any reason.  Instead they will go into KVM code,
    find that there is no vcpu to run, acknowledge and clear the IPI and go
    back to nap mode.
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
    Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
    Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
    f0888f70
book3s_hv_rmhandlers.S 39.2 KB