• Weinan Li's avatar
    drm/i915/gvt: stop scheduling workload when vgpu is inactive · 9f498477
    Weinan Li authored
    There is one corner case that workload_thread may pick and dispatch one
    workload of vgpu after it's already deactivated. Below is the scenario:
    
    1. deactive_vgpu got the vgpu_lock, it found pending workload was
    submitted, then it released the vgpu_lock and wait for vgpu idle.
    2. before deactive_vgpu got the vgpu_lock back, workload_thread might pick
    one new valid workload, then it was blocked by the vgpu_lock.
    3. deactive_vgpu got the vgpu_lock again, finished the last processes of
    deactivating, then release the vgpu_lock.
    4. workload_thread got the vgpu_lock, then it will try to dispatch the
    fetched workload. It's not expected one workload of deactivated vgpu is
    dispatched.
    
    The solution is to add condition check of the vgpu's active flag and stop
    to schedule when it's inactive.
    Reviewed-by: default avatarZhenyu Wang <zhenyuw@linux.intel.com>
    Signed-off-by: default avatarWeinan Li <weinan.z.li@intel.com>
    Signed-off-by: default avatarZhenyu Wang <zhenyuw@linux.intel.com>
    9f498477
scheduler.c 41.1 KB