• Sean Christopherson's avatar
    drm/i915/gvt: Explicitly check that vGPU is attached before shadowing · 96b138cd
    Sean Christopherson authored
    Move the check that a vGPU is attached from is_2MB_gtt_possible() all the
    way up to shadow_ppgtt_mm() to avoid unnecessary work, and to make it more
    obvious that a future cleanup of is_2MB_gtt_possible() isn't introducing a
    bug.
    
    is_2MB_gtt_possible() has only one caller, ppgtt_populate_shadow_entry(),
    and all paths in ppgtt_populate_shadow_entry() eventually check for
    attachment by way of intel_gvt_dma_map_guest_page().
    
    And of the paths that lead to ppgtt_populate_shadow_entry(),
    shadow_ppgtt_mm() is the only one that doesn't already check for
    INTEL_VGPU_STATUS_ACTIVE or INTEL_VGPU_STATUS_ATTACHED.
    
      workload_thread() <= pick_next_workload() => INTEL_VGPU_STATUS_ACTIVE
      |
      -> dispatch_workload()
         |
         |-> prepare_workload()
             |
             -> intel_vgpu_sync_oos_pages()
             |  |
             |  |-> ppgtt_set_guest_page_sync()
             |      |
             |      |-> sync_oos_page()
             |          |
             |          |-> ppgtt_populate_shadow_entry()
             |
             |-> intel_vgpu_flush_post_shadow()
                 |
      1:         |-> ppgtt_handle_guest_write_page_table()
                     |
                     |-> ppgtt_handle_guest_entry_add()
                         |
      2:                 | -> ppgtt_populate_spt_by_guest_entry()
                         |    |
                         |    |-> ppgtt_populate_spt()
                         |        |
                         |        |-> ppgtt_populate_shadow_entry()
                         |            |
                         |            |-> ppgtt_populate_spt_by_guest_entry() [see 2]
                         |
                         |-> ppgtt_populate_shadow_entry()
    
      kvmgt_page_track_write()  <= KVM callback => INTEL_VGPU_STATUS_ATTACHED
      |
      |-> intel_vgpu_page_track_handler()
          |
          |-> ppgtt_write_protection_handler()
              |
              |-> ppgtt_handle_guest_write_page_table_bytes()
                  |
                  |-> ppgtt_handle_guest_write_page_table() [see 1]
    Reviewed-by: default avatarYan Zhao <yan.y.zhao@intel.com>
    Tested-by: default avatarYan Zhao <yan.y.zhao@intel.com>
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    96b138cd
gtt.c 76.2 KB