• Dexuan Cui's avatar
    hv: run non-blocking message handlers in the dispatch tasklet · 652594c7
    Dexuan Cui authored
    A work item in vmbus_connection.work_queue can sleep, waiting for a new
    host message (usually it is some kind of "completion" message). Currently
    the new message will be handled in the same workqueue, but since work items
    in the workqueue is serialized, we actually have no chance to handle
    the new message if the current work item is sleeping -- as as result, the
    current work item will hang forever.
    
    K. Y. has posted the below fix to resolve the issue:
    Drivers: hv: vmbus: Perform device register in the per-channel work element
    
    Actually we can simplify the fix by directly running non-blocking message
    handlers in the dispatch tasklet (inspired by K. Y.).
    
    This patch is the fundamental change. The following 2 patches will simplify
    the message offering and rescind-offering handling a lot.
    Signed-off-by: default avatarDexuan Cui <decui@microsoft.com>
    Cc: K. Y. Srinivasan <kys@microsoft.com>
    Signed-off-by: default avatarK. Y. Srinivasan <kys@microsoft.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    652594c7
vmbus_drv.c 27.8 KB