• Pei Zhang's avatar
    drm/i915/gvt: fix deadlock in workload_thread · 90d27a1b
    Pei Zhang authored
    It's a classical abba type deadlock when using 2 mutex objects, which
    are gvt.lock(a) and drm.struct_mutex(b). Deadlock happens in threads:
    1. intel_gvt_create/destroy_vgpu: P(a)->P(b)
    2. workload_thread: P(b)->P(a)
    
    Fix solution is align the lock acquire sequence in both threads. This
    patch choose to adjust the sequence in workload_thread function.
    
    This fixed lockup symptom for guest-reboot stress test.
    
    v2: adjust sequence in workload_thread based on zhenyu's suggestion.
        adjust sequence in create/destroy_vgpu function.
    v3: fix to still require struct_mutex for dispatch_workload()
    Signed-off-by: default avatarPei Zhang <pei.zhang@intel.com>
    [zhenyuw: fix unused variables warnings.]
    Signed-off-by: default avatarZhenyu Wang <zhenyuw@linux.intel.com>
    90d27a1b
scheduler.c 15.1 KB