• Johannes Berg's avatar
    um: virtio_uml: Fix broken device handling in time-travel · af9fb41e
    Johannes Berg authored
    If a device implementation crashes, virtio_uml will mark it
    as dead by calling virtio_break_device() and scheduling the
    work that will remove it.
    
    This still seems like the right thing to do, but it's done
    directly while reading the message, and if time-travel is
    used, this is in the time-travel handler, outside of the
    normal Linux machinery. Therefore, we cannot acquire locks
    or do normal "linux-y" things because e.g. lockdep will be
    confused about the context.
    
    Move handling this situation out of the read function and
    into the actual IRQ handler and response handling instead,
    so that in the case of time-travel we don't call it in the
    wrong context.
    
    Chances are the system will still crash immediately, since
    the device implementation crashing may also cause the time-
    travel controller to go down, but at least all of that now
    happens without strange warnings from lockdep.
    
    Fixes: c8177aba ("um: time-travel: rework interrupt handling in ext mode")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
    af9fb41e
virtio_uml.c 35.3 KB