Re: [PATCH v4 8/9] gpu/drm/i915: optimize out the case when a range is updated to read only
From: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Date: 2019-01-24 12:09:26
Also in:
dri-devel, kvm, linux-fsdevel, linux-rdma, lkml
Hi Jerome, This patch seems to have plenty of Cc:s, but none of the right ones :) For further iterations, I guess you could use git option --cc to make sure everyone gets the whole series, and still keep the Cc:s in the patches themselves relevant to subsystems. This doesn't seem to be on top of drm-tip, but on top of your previous patches(?) that I had some comments about. Could you take a moment to first address the couple of question I had, before proceeding to discuss what is built on top of that base. My reply's Message-ID is: 154289518994.19402.3481838548028068213@jlahtine-desk.ger.corp.intel.com Regards, Joonas PS. Please keep me Cc:d in the following patches, I'm keen on understanding the motive and benefits. Quoting jglisse@redhat.com (2019-01-24 00:23:14)
quoted hunk ↗ jump to hunk
From: Jérôme Glisse <redacted> When range of virtual address is updated read only and corresponding user ptr object are already read only it is pointless to do anything. Optimize this case out. Signed-off-by: Jérôme Glisse <redacted> Cc: Christian König <christian.koenig@amd.com> Cc: Jan Kara <jack@suse.cz> Cc: Felix Kuehling <Felix.Kuehling@amd.com> Cc: Jason Gunthorpe <redacted> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Matthew Wilcox <redacted> Cc: Ross Zwisler <zwisler@kernel.org> Cc: Dan Williams <redacted> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Radim Krčmář <redacted> Cc: Michal Hocko <mhocko@kernel.org> Cc: Ralph Campbell <redacted> Cc: John Hubbard <jhubbard@nvidia.com> Cc: kvm@vger.kernel.org Cc: dri-devel@lists.freedesktop.org Cc: linux-rdma@vger.kernel.org Cc: linux-fsdevel@vger.kernel.org Cc: Arnd Bergmann <arnd@arndb.de> --- drivers/gpu/drm/i915/i915_gem_userptr.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c b/drivers/gpu/drm/i915/i915_gem_userptr.c index 9558582c105e..23330ac3d7ea 100644 --- a/drivers/gpu/drm/i915/i915_gem_userptr.c +++ b/drivers/gpu/drm/i915/i915_gem_userptr.c@@ -59,6 +59,7 @@ struct i915_mmu_object { struct interval_tree_node it; struct list_head link; struct work_struct work; + bool read_only; bool attached; };@@ -119,6 +120,7 @@ static int i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn, container_of(_mn, struct i915_mmu_notifier, mn); struct i915_mmu_object *mo; struct interval_tree_node *it; + bool update_to_read_only; LIST_HEAD(cancelled); unsigned long end;@@ -128,6 +130,8 @@ static int i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn, /* interval ranges are inclusive, but invalidate range is exclusive */ end = range->end - 1; + update_to_read_only = mmu_notifier_range_update_to_read_only(range); + spin_lock(&mn->lock); it = interval_tree_iter_first(&mn->objects, range->start, end); while (it) {@@ -145,6 +149,17 @@ static int i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn, * object if it is not in the process of being destroyed. */ mo = container_of(it, struct i915_mmu_object, it); + + /* + * If it is already read only and we are updating to + * read only then we do not need to change anything. + * So save time and skip this one. + */ + if (update_to_read_only && mo->read_only) { + it = interval_tree_iter_next(it, range->start, end); + continue; + } + if (kref_get_unless_zero(&mo->obj->base.refcount)) queue_work(mn->wq, &mo->work);@@ -270,6 +285,7 @@ i915_gem_userptr_init__mmu_notifier(struct drm_i915_gem_object *obj, mo->mn = mn; mo->obj = obj; mo->it.start = obj->userptr.ptr; + mo->read_only = i915_gem_object_is_readonly(obj); mo->it.last = obj->userptr.ptr + obj->base.size - 1; INIT_WORK(&mo->work, cancel_userptr);-- 2.17.2 _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel