diff mbox series

[6/9] drm/i915: Drop __rcu from gem_context->vm

Message ID 20210802154806.3710472-7-daniel.vetter@ffwll.ch (mailing list archive)
State New, archived
Headers show
Series remove rcu support from i915_address_space | expand

Commit Message

Daniel Vetter Aug. 2, 2021, 3:48 p.m. UTC
It's been invariant since

    commit ccbc1b97948ab671335e950271e39766729736c3
    Author: Jason Ekstrand <jason@jlekstrand.net>
    Date:   Thu Jul 8 10:48:30 2021 -0500

        drm/i915/gem: Don't allow changing the VM on running contexts (v4)

this just completes the deed. I've tried to split out prep work for
more careful review as much as possible, this is what's left:

- get_ppgtt gets simplified since we don't need to grab a temporary
  reference - we can rely on the temporary reference for the gem_ctx
  while we inspect the vm. The new vm_id still needs a full
  i915_vm_open ofc. This also removes the final caller of context_get_vm_rcu

- A pile of selftests can now just look at ctx->vm instead of
  rcu_dereference_protected( , true) or similar things.

- All callers of i915_gem_context_vm also disappear.

- I've changed the hugepage selftest to set scrub_64K without any
  locking, because when we inspect that setting we're also not taking
  any locks either. It works because it's a selftests that's careful
  (single threaded gives you nice ordering) and not a live driver
  where races can happen from anywhere.

These can only be split up further if we have some intermediate state
with a bunch more rcu_dereference_protected(ctx->vm, true), just to
shut up lockdep and sparse.

The conversion to __rcu happened in

commit a4e7ccdac38ec8335d9e4e2656c1a041c77feae1
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Fri Oct 4 14:40:09 2019 +0100

    drm/i915: Move context management under GEM

Note that we're not breaking the actual bugfix in there: The real
bugfix is pushing the i915_vm_relase onto a separate worker, to avoid
locking inversion issues. The rcu conversion was just thrown in for
entertainment value on top (no vm lookup isn't even close to anything
that's a hotpath where removing the single spinlock can be measured).

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Jon Bloomfield <jon.bloomfield@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Cc: Dave Airlie <airlied@redhat.com>
Cc: Jason Ekstrand <jason@jlekstrand.net>
---
 drivers/gpu/drm/i915/gem/i915_gem_context.c   | 53 ++-----------------
 drivers/gpu/drm/i915/gem/i915_gem_context.h   | 14 ++---
 .../gpu/drm/i915/gem/i915_gem_context_types.h |  2 +-
 .../gpu/drm/i915/gem/selftests/huge_pages.c   |  4 +-
 .../drm/i915/gem/selftests/i915_gem_context.c | 24 ++++-----
 drivers/gpu/drm/i915/i915_trace.h             |  2 +-
 drivers/gpu/drm/i915/selftests/i915_vma.c     |  2 +-
 7 files changed, 21 insertions(+), 80 deletions(-)

Comments

kernel test robot Aug. 3, 2021, 12:35 a.m. UTC | #1
Hi Daniel,

I love your patch! Perhaps something to improve:

[auto build test WARNING on drm-tip/drm-tip]
[cannot apply to drm-intel/for-linux-next drm-exynos/exynos-drm-next tegra-drm/drm/tegra/for-next drm/drm-next v5.14-rc3 next-20210730]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Daniel-Vetter/remove-rcu-support-from-i915_address_space/20210802-234929
base:   git://anongit.freedesktop.org/drm/drm-tip drm-tip
config: i386-randconfig-s002-20210802 (attached as .config)
compiler: gcc-10 (Ubuntu 10.3.0-1ubuntu1~20.04) 10.3.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.3-341-g8af24329-dirty
        # https://github.com/0day-ci/linux/commit/4a70c02a8b49ee9845e8222c55b4bf932e843224
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Daniel-Vetter/remove-rcu-support-from-i915_address_space/20210802-234929
        git checkout 4a70c02a8b49ee9845e8222c55b4bf932e843224
        # save the attached .config to linux build tree
        make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


sparse warnings: (new ones prefixed by >>)
   drivers/gpu/drm/i915/gem/i915_gem_context.c: note: in included file (through drivers/gpu/drm/i915/gt/intel_gt_requests.h, drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c):
   /usr/lib/gcc/x86_64-linux-gnu/10/include/stddef.h:406:9: sparse: sparse: preprocessor token offsetof redefined
   drivers/gpu/drm/i915/gem/i915_gem_context.c: note: in included file (through include/uapi/linux/posix_types.h, include/uapi/linux/types.h, include/linux/types.h, ...):
   include/linux/stddef.h:17:9: sparse: this was the original definition
   drivers/gpu/drm/i915/gem/i915_gem_context.c: note: in included file:
>> drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c:698:33: sparse: sparse: incompatible types in comparison expression (different address spaces):
>> drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c:698:33: sparse:    struct i915_address_space [noderef] __rcu *
>> drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c:698:33: sparse:    struct i915_address_space *

vim +698 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c

f2085c8e950d53 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-27  631  
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  632  static int igt_ctx_exec(void *arg)
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  633  {
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  634  	struct drm_i915_private *i915 = arg;
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  635  	struct intel_engine_cs *engine;
6e1281412ab9e6 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-11-14  636  	int err = -ENODEV;
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  637  
0fdbe58c4a0f8c drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2018-07-06  638  	/*
0fdbe58c4a0f8c drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2018-07-06  639  	 * Create a few different contexts (with different mm) and write
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  640  	 * through each ctx/mm using the GPU making sure those writes end
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  641  	 * up in the expected pages of our obj.
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  642  	 */
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  643  
0fdbe58c4a0f8c drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2018-07-06  644  	if (!DRIVER_CAPS(i915)->has_logical_contexts)
0fdbe58c4a0f8c drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2018-07-06  645  		return 0;
0fdbe58c4a0f8c drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2018-07-06  646  
51757cf4d7e6e1 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Tvrtko Ursulin 2019-10-22  647  	for_each_uabi_engine(engine, i915) {
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  648  		struct drm_i915_gem_object *obj = NULL;
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  649  		unsigned long ncontexts, ndwords, dw;
f2085c8e950d53 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-27  650  		struct i915_request *tq[5] = {};
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  651  		struct igt_live_test t;
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  652  		IGT_TIMEOUT(end_time);
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  653  		LIST_HEAD(objects);
a8c9a7f52ec5a4 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-11-07  654  		struct file *file;
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  655  
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  656  		if (!intel_engine_can_store_dword(engine))
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  657  			continue;
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  658  
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  659  		if (!engine->context_size)
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  660  			continue; /* No logical context support in HW */
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  661  
ef47a0e0f49d53 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-03-13  662  		file = mock_file(i915);
ef47a0e0f49d53 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-03-13  663  		if (IS_ERR(file))
ef47a0e0f49d53 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-03-13  664  			return PTR_ERR(file);
ef47a0e0f49d53 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-03-13  665  
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  666  		err = igt_live_test_begin(&t, i915, __func__, engine->name);
8dd0f8d37eaec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2018-10-12  667  		if (err)
a4e7ccdac38ec8 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-10-04  668  			goto out_file;
8dd0f8d37eaec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2018-10-12  669  
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  670  		ncontexts = 0;
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  671  		ndwords = 0;
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  672  		dw = 0;
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  673  		while (!time_after(jiffies, end_time)) {
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  674  			struct i915_gem_context *ctx;
75b974a859e5d9 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-24  675  			struct intel_context *ce;
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  676  
5888d588597408 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Jason Ekstrand 2021-07-08  677  			ctx = kernel_context(i915, NULL);
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  678  			if (IS_ERR(ctx)) {
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  679  				err = PTR_ERR(ctx);
a4e7ccdac38ec8 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-10-04  680  				goto out_file;
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  681  			}
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  682  
75b974a859e5d9 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-24  683  			ce = i915_gem_context_get_engine(ctx, engine->legacy_idx);
21b0c32bdaba7c drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-27  684  			GEM_BUG_ON(IS_ERR(ce));
75b974a859e5d9 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-24  685  
ca83d5840cb641 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-05-23  686  			if (!obj) {
75b974a859e5d9 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-24  687  				obj = create_test_object(ce->vm, file, &objects);
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  688  				if (IS_ERR(obj)) {
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  689  					err = PTR_ERR(obj);
75b974a859e5d9 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-24  690  					intel_context_put(ce);
c4e6488120e9ef drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-27  691  					kernel_context_close(ctx);
a4e7ccdac38ec8 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-10-04  692  					goto out_file;
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  693  				}
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  694  			}
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  695  
75b974a859e5d9 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-24  696  			err = gpu_fill(ce, obj, dw);
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  697  			if (err) {
2935ed5339c495 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-10-04 @698  				pr_err("Failed to fill dword %lu [%lu/%lu] with gpu (%s) [full-ppgtt? %s], err=%d\n",
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  699  				       ndwords, dw, max_dwords(obj),
2935ed5339c495 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-10-04  700  				       engine->name,
a4e7ccdac38ec8 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-10-04  701  				       yesno(!!rcu_access_pointer(ctx->vm)),
a4e7ccdac38ec8 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-10-04  702  				       err);
f2085c8e950d53 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-27  703  				intel_context_put(ce);
c4e6488120e9ef drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-27  704  				kernel_context_close(ctx);
a4e7ccdac38ec8 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-10-04  705  				goto out_file;
f2085c8e950d53 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-27  706  			}
f2085c8e950d53 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-27  707  
f2085c8e950d53 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-27  708  			err = throttle(ce, tq, ARRAY_SIZE(tq));
f2085c8e950d53 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-27  709  			if (err) {
f2085c8e950d53 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-27  710  				intel_context_put(ce);
c4e6488120e9ef drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-27  711  				kernel_context_close(ctx);
a4e7ccdac38ec8 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-10-04  712  				goto out_file;
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  713  			}
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  714  
ca83d5840cb641 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-05-23  715  			if (++dw == max_dwords(obj)) {
ca83d5840cb641 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-05-23  716  				obj = NULL;
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  717  				dw = 0;
ca83d5840cb641 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-05-23  718  			}
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  719  
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  720  			ndwords++;
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  721  			ncontexts++;
f2085c8e950d53 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-27  722  
f2085c8e950d53 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-27  723  			intel_context_put(ce);
c4e6488120e9ef drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-27  724  			kernel_context_close(ctx);
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  725  		}
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  726  
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  727  		pr_info("Submitted %lu contexts to %s, filling %lu dwords\n",
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  728  			ncontexts, engine->name, ndwords);
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  729  
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  730  		ncontexts = dw = 0;
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  731  		list_for_each_entry(obj, &objects, st_link) {
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  732  			unsigned int rem =
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  733  				min_t(unsigned int, ndwords - dw, max_dwords(obj));
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  734  
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  735  			err = cpu_check(obj, ncontexts++, rem);
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  736  			if (err)
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  737  				break;
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  738  
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  739  			dw += rem;
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  740  		}
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  741  
a4e7ccdac38ec8 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-10-04  742  out_file:
f2085c8e950d53 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-08-27  743  		throttle_release(tq, ARRAY_SIZE(tq));
e4a8c8130ba3ac drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-01-21  744  		if (igt_live_test_end(&t))
7c2f5bc5f0f41a drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2018-05-05  745  			err = -EIO;
791ff39ae32a34 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2017-02-13  746  
a8c9a7f52ec5a4 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-11-07  747  		fput(file);
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  748  		if (err)
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  749  			return err;
6582f4f613e352 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-07-04  750  
6582f4f613e352 drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c Chris Wilson   2019-07-04  751  		i915_gem_drain_freed_objects(i915);
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  752  	}
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  753  
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  754  	return 0;
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  755  }
e0695db7298ec2 drivers/gpu/drm/i915/selftests/i915_gem_context.c     Chris Wilson   2019-03-22  756  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context.c b/drivers/gpu/drm/i915/gem/i915_gem_context.c
index fd24a1236682..2f3cc73d4710 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_context.c
@@ -735,44 +735,6 @@  static int set_proto_ctx_param(struct drm_i915_file_private *fpriv,
 	return ret;
 }
 
-static struct i915_address_space *
-context_get_vm_rcu(struct i915_gem_context *ctx)
-{
-	GEM_BUG_ON(!rcu_access_pointer(ctx->vm));
-
-	do {
-		struct i915_address_space *vm;
-
-		/*
-		 * We do not allow downgrading from full-ppgtt [to a shared
-		 * global gtt], so ctx->vm cannot become NULL.
-		 */
-		vm = rcu_dereference(ctx->vm);
-		if (!kref_get_unless_zero(&vm->ref))
-			continue;
-
-		/*
-		 * This ppgtt may have be reallocated between
-		 * the read and the kref, and reassigned to a third
-		 * context. In order to avoid inadvertent sharing
-		 * of this ppgtt with that third context (and not
-		 * src), we have to confirm that we have the same
-		 * ppgtt after passing through the strong memory
-		 * barrier implied by a successful
-		 * kref_get_unless_zero().
-		 *
-		 * Once we have acquired the current ppgtt of ctx,
-		 * we no longer care if it is released from ctx, as
-		 * it cannot be reallocated elsewhere.
-		 */
-
-		if (vm == rcu_access_pointer(ctx->vm))
-			return rcu_pointer_handoff(vm);
-
-		i915_vm_put(vm);
-	} while (1);
-}
-
 static int intel_context_set_gem(struct intel_context *ce,
 				 struct i915_gem_context *ctx,
 				 struct intel_sseu sseu)
@@ -1193,7 +1155,7 @@  static void context_close(struct i915_gem_context *ctx)
 
 	set_closed_name(ctx);
 
-	vm = i915_gem_context_vm(ctx);
+	vm = ctx->vm;
 	if (vm)
 		i915_vm_close(vm);
 
@@ -1350,7 +1312,7 @@  i915_gem_create_context(struct drm_i915_private *i915,
 		vm = &ppgtt->vm;
 	}
 	if (vm) {
-		RCU_INIT_POINTER(ctx->vm, i915_vm_open(vm));
+		ctx->vm = i915_vm_open(vm);
 
 		/* i915_vm_open() takes a reference */
 		i915_vm_put(vm);
@@ -1576,15 +1538,12 @@  static int get_ppgtt(struct drm_i915_file_private *file_priv,
 	if (!i915_gem_context_is_full_ppgtt(ctx))
 		return -ENODEV;
 
-	rcu_read_lock();
-	vm = context_get_vm_rcu(ctx);
-	rcu_read_unlock();
-	if (!vm)
-		return -ENODEV;
+	vm = ctx->vm;
+	GEM_BUG_ON(!vm);
 
 	err = xa_alloc(&file_priv->vm_xa, &id, vm, xa_limit_32b, GFP_KERNEL);
 	if (err)
-		goto err_put;
+		return err;
 
 	i915_vm_open(vm);
 
@@ -1592,8 +1551,6 @@  static int get_ppgtt(struct drm_i915_file_private *file_priv,
 	args->value = id;
 	args->size = 0;
 
-err_put:
-	i915_vm_put(vm);
 	return err;
 }
 
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context.h b/drivers/gpu/drm/i915/gem/i915_gem_context.h
index 37536a260e6e..7696bc91647d 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_context.h
+++ b/drivers/gpu/drm/i915/gem/i915_gem_context.h
@@ -148,17 +148,11 @@  static inline void i915_gem_context_put(struct i915_gem_context *ctx)
 	kref_put(&ctx->ref, i915_gem_context_release);
 }
 
-static inline struct i915_address_space *
-i915_gem_context_vm(struct i915_gem_context *ctx)
-{
-	return rcu_dereference_protected(ctx->vm, lockdep_is_held(&ctx->mutex));
-}
-
 static inline bool i915_gem_context_is_full_ppgtt(struct i915_gem_context *ctx)
 {
-	GEM_BUG_ON(!!rcu_access_pointer(ctx->vm) != HAS_FULL_PPGTT(ctx->i915));
+	GEM_BUG_ON(!!ctx->vm != HAS_FULL_PPGTT(ctx->i915));
 
-	return !!rcu_access_pointer(ctx->vm);
+	return !!ctx->vm;
 }
 
 static inline struct i915_address_space *
@@ -166,12 +160,10 @@  i915_gem_context_get_eb_vm(struct i915_gem_context *ctx)
 {
 	struct i915_address_space *vm;
 
-	rcu_read_lock();
-	vm = rcu_dereference(ctx->vm);
+	vm = ctx->vm;
 	if (!vm)
 		vm = &ctx->i915->ggtt.vm;
 	vm = i915_vm_get(vm);
-	rcu_read_unlock();
 
 	return vm;
 }
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context_types.h b/drivers/gpu/drm/i915/gem/i915_gem_context_types.h
index 94c03a97cb77..540ad16204a9 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_context_types.h
+++ b/drivers/gpu/drm/i915/gem/i915_gem_context_types.h
@@ -262,7 +262,7 @@  struct i915_gem_context {
 	 * In other modes, this is a NULL pointer with the expectation that
 	 * the caller uses the shared global GTT.
 	 */
-	struct i915_address_space __rcu *vm;
+	struct i915_address_space *vm;
 
 	/**
 	 * @pid: process id of creator
diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
index 6c68fe26bb32..5d71626a1ee5 100644
--- a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
+++ b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
@@ -1688,11 +1688,9 @@  int i915_gem_huge_page_live_selftests(struct drm_i915_private *i915)
 		goto out_file;
 	}
 
-	mutex_lock(&ctx->mutex);
-	vm = i915_gem_context_vm(ctx);
+	vm = ctx->vm;
 	if (vm)
 		WRITE_ONCE(vm->scrub_64K, true);
-	mutex_unlock(&ctx->mutex);
 
 	err = i915_subtests(tests, ctx);
 
diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
index 5442b8e59629..49d17701d8d3 100644
--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
@@ -27,12 +27,6 @@ 
 
 #define DW_PER_PAGE (PAGE_SIZE / sizeof(u32))
 
-static inline struct i915_address_space *ctx_vm(struct i915_gem_context *ctx)
-{
-	/* single threaded, private ctx */
-	return rcu_dereference_protected(ctx->vm, true);
-}
-
 static int live_nop_switch(void *arg)
 {
 	const unsigned int nctx = 1024;
@@ -813,7 +807,7 @@  static int igt_shared_ctx_exec(void *arg)
 			struct i915_gem_context *ctx;
 			struct intel_context *ce;
 
-			ctx = kernel_context(i915, ctx_vm(parent));
+			ctx = kernel_context(i915, parent->vm);
 			if (IS_ERR(ctx)) {
 				err = PTR_ERR(ctx);
 				goto out_test;
@@ -823,7 +817,7 @@  static int igt_shared_ctx_exec(void *arg)
 			GEM_BUG_ON(IS_ERR(ce));
 
 			if (!obj) {
-				obj = create_test_object(ctx_vm(parent),
+				obj = create_test_object(parent->vm,
 							 file, &objects);
 				if (IS_ERR(obj)) {
 					err = PTR_ERR(obj);
@@ -1380,7 +1374,7 @@  static int igt_ctx_readonly(void *arg)
 		goto out_file;
 	}
 
-	vm = ctx_vm(ctx) ?: &i915->ggtt.alias->vm;
+	vm = ctx->vm ?: &i915->ggtt.alias->vm;
 	if (!vm || !vm->has_read_only) {
 		err = 0;
 		goto out_file;
@@ -1499,7 +1493,7 @@  static int write_to_scratch(struct i915_gem_context *ctx,
 
 	GEM_BUG_ON(offset < I915_GTT_PAGE_SIZE);
 
-	err = check_scratch(ctx_vm(ctx), offset);
+	err = check_scratch(ctx->vm, offset);
 	if (err)
 		return err;
 
@@ -1596,7 +1590,7 @@  static int read_from_scratch(struct i915_gem_context *ctx,
 
 	GEM_BUG_ON(offset < I915_GTT_PAGE_SIZE);
 
-	err = check_scratch(ctx_vm(ctx), offset);
+	err = check_scratch(ctx->vm, offset);
 	if (err)
 		return err;
 
@@ -1739,7 +1733,7 @@  static int check_scratch_page(struct i915_gem_context *ctx, u32 *out)
 	u32 *vaddr;
 	int err = 0;
 
-	vm = ctx_vm(ctx);
+	vm = ctx->vm;
 	if (!vm)
 		return -ENODEV;
 
@@ -1801,7 +1795,7 @@  static int igt_vm_isolation(void *arg)
 	}
 
 	/* We can only test vm isolation, if the vm are distinct */
-	if (ctx_vm(ctx_a) == ctx_vm(ctx_b))
+	if (ctx_a->vm == ctx_b->vm)
 		goto out_file;
 
 	/* Read the initial state of the scratch page */
@@ -1813,8 +1807,8 @@  static int igt_vm_isolation(void *arg)
 	if (err)
 		goto out_file;
 
-	vm_total = ctx_vm(ctx_a)->total;
-	GEM_BUG_ON(ctx_vm(ctx_b)->total != vm_total);
+	vm_total = ctx_a->vm->total;
+	GEM_BUG_ON(ctx_b->vm->total != vm_total);
 
 	count = 0;
 	num_engines = 0;
diff --git a/drivers/gpu/drm/i915/i915_trace.h b/drivers/gpu/drm/i915/i915_trace.h
index 806ad688274b..237e5061381b 100644
--- a/drivers/gpu/drm/i915/i915_trace.h
+++ b/drivers/gpu/drm/i915/i915_trace.h
@@ -1246,7 +1246,7 @@  DECLARE_EVENT_CLASS(i915_context,
 	TP_fast_assign(
 			__entry->dev = ctx->i915->drm.primary->index;
 			__entry->ctx = ctx;
-			__entry->vm = rcu_access_pointer(ctx->vm);
+			__entry->vm = ctx->vm;
 	),
 
 	TP_printk("dev=%u, ctx=%p, ctx_vm=%p",
diff --git a/drivers/gpu/drm/i915/selftests/i915_vma.c b/drivers/gpu/drm/i915/selftests/i915_vma.c
index 79ba72da0813..1f10fe36619b 100644
--- a/drivers/gpu/drm/i915/selftests/i915_vma.c
+++ b/drivers/gpu/drm/i915/selftests/i915_vma.c
@@ -39,7 +39,7 @@  static bool assert_vma(struct i915_vma *vma,
 {
 	bool ok = true;
 
-	if (vma->vm != rcu_access_pointer(ctx->vm)) {
+	if (vma->vm != ctx->vm) {
 		pr_err("VMA created with wrong VM\n");
 		ok = false;
 	}