On 5/13/2023 8:35 AM, Sean Christopherson wrote: > Move the check that a vGPU is attacked from is_2MB_gtt_possible() to its > sole caller, ppgtt_populate_shadow_entry(). All of the paths in > ppgtt_populate_shadow_entry() eventually check for attachment by way of > intel_gvt_dma_map_guest_page(), but explicitly checking can avoid > unnecessary work and will make it more obvious that a future cleanup of > is_2MB_gtt_possible() isn't introducing a bug. > It might be better move this check to shadow_ppgtt_mm() which is used in both shadow page table creation and pinning path so that the path can bail out even earlier when creating a shadow page table but a vGPU has not been attached to KVM yet. > Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx> > --- > drivers/gpu/drm/i915/gvt/gtt.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c > index 5426a27c1b71..2aed31b497c9 100644 > --- a/drivers/gpu/drm/i915/gvt/gtt.c > +++ b/drivers/gpu/drm/i915/gvt/gtt.c > @@ -1163,8 +1163,6 @@ static int is_2MB_gtt_possible(struct intel_vgpu *vgpu, > if (!HAS_PAGE_SIZES(vgpu->gvt->gt->i915, I915_GTT_PAGE_SIZE_2M)) > return 0; > > - if (!test_bit(INTEL_VGPU_STATUS_ATTACHED, vgpu->status)) > - return -EINVAL; > pfn = gfn_to_pfn(vgpu->vfio_device.kvm, ops->get_pfn(entry)); > if (is_error_noslot_pfn(pfn)) > return -EINVAL; > @@ -1277,6 +1275,9 @@ static int ppgtt_populate_shadow_entry(struct intel_vgpu *vgpu, > if (!pte_ops->test_present(ge)) > return 0; > > + if (!test_bit(INTEL_VGPU_STATUS_ATTACHED, vgpu->status)) > + return -EINVAL; > + > gfn = pte_ops->get_pfn(ge); > > switch (ge->type) {