Tested-by: Yan Zhao <yan.y.zhao@xxxxxxxxx> On Fri, Mar 10, 2023 at 04:22:48PM -0800, Sean Christopherson wrote: > From: Yan Zhao <yan.y.zhao@xxxxxxxxx> > > Switch from the poorly named and flawed ->track_flush_slot() to the newly > introduced ->track_remove_region(). From KVMGT's perspective, the two > hooks are functionally equivalent, the only difference being that > ->track_remove_region() is called only when KVM is 100% certain the > memory region will be removed, i.e. is invoked slightly later in KVM's > memslot modification flow. > > Cc: Zhenyu Wang <zhenyuw@xxxxxxxxxxxxxxx> > Suggested-by: Sean Christopherson <seanjc@xxxxxxxxxx> > Signed-off-by: Yan Zhao <yan.y.zhao@xxxxxxxxx> > [sean: handle name change, massage changelog, rebase] > Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx> > --- > drivers/gpu/drm/i915/gvt/kvmgt.c | 21 +++++++++------------ > 1 file changed, 9 insertions(+), 12 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c > index 577712ea4893..9f188b6c3edf 100644 > --- a/drivers/gpu/drm/i915/gvt/kvmgt.c > +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c > @@ -108,9 +108,8 @@ struct gvt_dma { > > static void kvmgt_page_track_write(gpa_t gpa, const u8 *val, int len, > struct kvm_page_track_notifier_node *node); > -static void kvmgt_page_track_flush_slot(struct kvm *kvm, > - struct kvm_memory_slot *slot, > - struct kvm_page_track_notifier_node *node); > +static void kvmgt_page_track_remove_region(gfn_t gfn, unsigned long nr_pages, > + struct kvm_page_track_notifier_node *node); > > static ssize_t intel_vgpu_show_description(struct mdev_type *mtype, char *buf) > { > @@ -680,7 +679,7 @@ static int intel_vgpu_open_device(struct vfio_device *vfio_dev) > return -EEXIST; > > vgpu->track_node.track_write = kvmgt_page_track_write; > - vgpu->track_node.track_flush_slot = kvmgt_page_track_flush_slot; > + vgpu->track_node.track_remove_region = kvmgt_page_track_remove_region; > kvm_get_kvm(vgpu->vfio_device.kvm); > kvm_page_track_register_notifier(vgpu->vfio_device.kvm, > &vgpu->track_node); > @@ -1631,22 +1630,20 @@ static void kvmgt_page_track_write(gpa_t gpa, const u8 *val, int len, > mutex_unlock(&info->vgpu_lock); > } > > -static void kvmgt_page_track_flush_slot(struct kvm *kvm, > - struct kvm_memory_slot *slot, > - struct kvm_page_track_notifier_node *node) > +static void kvmgt_page_track_remove_region(gfn_t gfn, unsigned long nr_pages, > + struct kvm_page_track_notifier_node *node) > { > unsigned long i; > - gfn_t gfn; > struct intel_vgpu *info = > container_of(node, struct intel_vgpu, track_node); > > mutex_lock(&info->vgpu_lock); > > - for (i = 0; i < slot->npages; i++) { > - gfn = slot->base_gfn + i; > - if (kvmgt_gfn_is_write_protected(info, gfn)) > - kvmgt_protect_table_del(info, gfn); > + for (i = 0; i < nr_pages; i++) { > + if (kvmgt_gfn_is_write_protected(info, gfn + i)) > + kvmgt_protect_table_del(info, gfn + i); > } > + > mutex_unlock(&info->vgpu_lock); > } > > -- > 2.40.0.rc1.284.g88254d51c5-goog >