• Colin Xu's avatar
    drm/i915/gvt: Adding ppgtt to GVT GEM context after shadow pdps settled. · 41874148
    Colin Xu authored
    Windows guest can't run after force-TDR with host log:
    ...
    gvt: vgpu 1: workload shadow ppgtt isn't ready
    gvt: vgpu 1: fail to dispatch workload, skip
    ...
    
    The error is raised by set_context_ppgtt_from_shadow(), when it checks
    and found the shadow_mm isn't marked as shadowed.
    
    In work thread before each submission, a shadow_mm is set to shadowed in:
    shadow_ppgtt_mm()
    <-intel_vgpu_pin_mm()
    <-prepare_workload()
    <-dispatch_workload()
    <-workload_thread()
    However checking whether or not shadow_mm is shadowed is prior to it:
    set_context_ppgtt_from_shadow()
    <-dispatch_workload()
    <-workload_thread()
    
    In normal case, create workload will check the existence of shadow_mm,
    if not it will create a new one and marked as shadowed. If already exist
    it will reuse the old one. Since shadow_mm is reused, checking of shadowed
    in set_context_ppgtt_from_shadow() actually always see the state set in
    creation, but not the state set in intel_vgpu_pin_mm().
    
    When force-TDR, all engines are reset, since it's not dmlr level, all
    ppgtt_mm are invalidated but not destroyed. Invalidation will mark all
    reused shadow_mm as not shadowed but still keeps in ppgtt_mm_list_head.
    If workload submission phase those shadow_mm are reused with shadowed
    not set, then set_context_ppgtt_from_shadow() will report error.
    
    Pin for context after shadow_mm pinned and shadow pdps settled.
    
    v2:
    Move set_context_ppgtt_from_shadow() after prepare_workload(). (zhenyu)
    v3:
    Move set_context_ppgtt_from_shadow() after shadow pdps updated.(zhenyu)
    
    Fixes: 4f15665c ("drm/i915: Add ppgtt to GVT GEM context")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarColin Xu <colin.xu@intel.com>
    Signed-off-by: default avatarZhenyu Wang <zhenyuw@linux.intel.com>
    41874148
scheduler.c 43.4 KB