Skip to content
  • Laurent Vivier's avatar
    aef92d87
    pseries: fix kvmppc_set_fwnmi() · aef92d87
    Laurent Vivier authored
    
    
    QEMU issues the ioctl(KVM_CAP_PPC_FWNMI) on the first vCPU.
    
    If the first vCPU is currently running, the vCPU mutex is held
    and the ioctl() cannot be done and waits until the mutex is released.
    This never happens and the VM is stuck.
    
    To avoid this deadlock, issue the ioctl on the same vCPU doing the
    RTAS call.
    
    The problem can be reproduced by booting a guest with several vCPUs
    (the probability to have the problem is (n - 1) / n,  n = # of CPUs),
    and then by triggering a kernel crash with "echo c >/proc/sysrq-trigger".
    
    On the reboot, the kernel hangs after:
    
    ...
    [    0.000000] -----------------------------------------------------
    [    0.000000] ppc64_pft_size    = 0x0
    [    0.000000] phys_mem_size     = 0x48000000
    [    0.000000] dcache_bsize      = 0x80
    [    0.000000] icache_bsize      = 0x80
    [    0.000000] cpu_features      = 0x0001c06f8f4f91a7
    [    0.000000]   possible        = 0x0003fbffcf5fb1a7
    [    0.000000]   always          = 0x00000003800081a1
    [    0.000000] cpu_user_features = 0xdc0065c2 0xaee00000
    [    0.000000] mmu_features      = 0x3c006041
    [    0.000000] firmware_features = 0x00000085455a445f
    [    0.000000] physical_start    = 0x8000000
    [    0.000000] -----------------------------------------------------
    [    0.000000] numa:   NODE_DATA [mem 0x47f33c80-0x47f3ffff]
    
    Fixes: ec010c00 ("ppc/spapr: KVM FWNMI should not be enabled until guest requests it")
    Cc: npiggin@gmail.com
    Signed-off-by: default avatarLaurent Vivier <lvivier@redhat.com>
    Message-Id: <20200724083533.281700-1-lvivier@redhat.com>
    Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
    aef92d87
    pseries: fix kvmppc_set_fwnmi()
    Laurent Vivier authored
    
    
    QEMU issues the ioctl(KVM_CAP_PPC_FWNMI) on the first vCPU.
    
    If the first vCPU is currently running, the vCPU mutex is held
    and the ioctl() cannot be done and waits until the mutex is released.
    This never happens and the VM is stuck.
    
    To avoid this deadlock, issue the ioctl on the same vCPU doing the
    RTAS call.
    
    The problem can be reproduced by booting a guest with several vCPUs
    (the probability to have the problem is (n - 1) / n,  n = # of CPUs),
    and then by triggering a kernel crash with "echo c >/proc/sysrq-trigger".
    
    On the reboot, the kernel hangs after:
    
    ...
    [    0.000000] -----------------------------------------------------
    [    0.000000] ppc64_pft_size    = 0x0
    [    0.000000] phys_mem_size     = 0x48000000
    [    0.000000] dcache_bsize      = 0x80
    [    0.000000] icache_bsize      = 0x80
    [    0.000000] cpu_features      = 0x0001c06f8f4f91a7
    [    0.000000]   possible        = 0x0003fbffcf5fb1a7
    [    0.000000]   always          = 0x00000003800081a1
    [    0.000000] cpu_user_features = 0xdc0065c2 0xaee00000
    [    0.000000] mmu_features      = 0x3c006041
    [    0.000000] firmware_features = 0x00000085455a445f
    [    0.000000] physical_start    = 0x8000000
    [    0.000000] -----------------------------------------------------
    [    0.000000] numa:   NODE_DATA [mem 0x47f33c80-0x47f3ffff]
    
    Fixes: ec010c00 ("ppc/spapr: KVM FWNMI should not be enabled until guest requests it")
    Cc: npiggin@gmail.com
    Signed-off-by: default avatarLaurent Vivier <lvivier@redhat.com>
    Message-Id: <20200724083533.281700-1-lvivier@redhat.com>
    Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
Loading