• Dexuan Cui's avatar
    video: hyperv: hyperv_fb: refresh the VM screen by force on VM panic · 3686fe96
    Dexuan Cui authored
    Currently the VSC has no chance to notify the VSP of the dirty rectangle on VM
    panic because the notification work is done in a workqueue, and in panic() the
    kernel typically ends up in an infinite loop, and a typical kernel config has
    CONFIG_PREEMPT_VOLUNTARY=y and CONFIG_PREEMPT is not set, so a context switch
    can't happen in panic() and the workqueue won't have a chance to run. As a
    result, the VM Connection window can't refresh until it's closed and we
    re-connect to the VM.
    
    We can register a handler on panic_notifier_list: the handler can notify
    the VSC and switch the framebuffer driver to a "synchronous mode", meaning
    the VSC flushes any future framebuffer change to the VSP immediately.
    
    v2: removed the MS-TFS line in the commit message
    v3: remove some 'unlikely' markings
    v4: avoid global variables as Tomi Valkeinen suggested
    
    Cc: Haiyang Zhang <haiyangz@microsoft.com>
    Signed-off-by: default avatarDexuan Cui <decui@microsoft.com>
    Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
    3686fe96
hyperv_fb.c 22.6 KB