• Paul Mackerras's avatar
    KVM: PPC: Book3S HV: Don't dynamically split core when already split · f74f2e2e
    Paul Mackerras authored
    In static micro-threading modes, the dynamic micro-threading code
    is supposed to be disabled, because subcores can't make independent
    decisions about what micro-threading mode to put the core in - there is
    only one micro-threading mode for the whole core.  The code that
    implements dynamic micro-threading checks for this, except that the
    check was missed in one case.  This means that it is possible for a
    subcore in static 2-way micro-threading mode to try to put the core
    into 4-way micro-threading mode, which usually leads to stuck CPUs,
    spinlock lockups, and other stalls in the host.
    
    The problem was in the can_split_piggybacked_subcores() function, which
    should always return false if the system is in a static micro-threading
    mode.  This fixes the problem by making can_split_piggybacked_subcores()
    use subcore_config_ok() for its checks, as subcore_config_ok() includes
    the necessary check for the static micro-threading modes.
    
    Credit to Gautham Shenoy for working out that the reason for the hangs
    and stalls we were seeing was that we were trying to do dynamic 4-way
    micro-threading while we were in static 2-way mode.
    
    Fixes: b4deba5c
    Cc: vger@stable.kernel.org # v4.3
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
    f74f2e2e
book3s_hv.c 83.1 KB