[Intel-gfx] [PATCH] drm/i915/selftests: Prevent background reaping of active objects

kbuild test robot lkp at intel.com
Sun Jul 8 15:36:39 UTC 2018


Hi Chris,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on drm-intel/for-linux-next]
[also build test ERROR on v4.18-rc3 next-20180706]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Chris-Wilson/drm-i915-selftests-Prevent-background-reaping-of-active-objects/20180708-204032
base:   git://anongit.freedesktop.org/drm-intel for-linux-next
config: i386-randconfig-a1-201827 (attached as .config)
compiler: gcc-4.9 (Debian 4.9.4-2) 4.9.4
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All errors (new ones prefixed by >>):

   In file included from drivers/gpu/drm/i915/i915_gem.c:6153:0:
   drivers/gpu/drm/i915/selftests/i915_gem_object.c: In function 'igt_mmap_offset_exhaustion':
>> drivers/gpu/drm/i915/selftests/i915_gem_object.c:555:2: error: incompatible type for argument 1 of 'cancel_delayed_work_sync'
     cancel_delayed_work_sync(i915->gt.retire_work);
     ^
   In file included from include/linux/srcu.h:34:0,
                    from include/linux/notifier.h:16,
                    from include/linux/memory_hotplug.h:7,
                    from include/linux/mmzone.h:777,
                    from include/linux/gfp.h:6,
                    from include/linux/idr.h:16,
                    from include/linux/kernfs.h:14,
                    from include/linux/sysfs.h:16,
                    from include/linux/kobject.h:20,
                    from include/linux/cdev.h:5,
                    from include/drm/drmP.h:36,
                    from drivers/gpu/drm/i915/i915_gem.c:28:
   include/linux/workqueue.h:484:13: note: expected 'struct delayed_work *' but argument is of type 'struct delayed_work'
    extern bool cancel_delayed_work_sync(struct delayed_work *dwork);
                ^
   In file included from drivers/gpu/drm/i915/i915_gem.c:6153:0:
   drivers/gpu/drm/i915/selftests/i915_gem_object.c:556:2: error: incompatible type for argument 1 of 'cancel_delayed_work_sync'
     cancel_delayed_work_sync(i915->gt.idle_work);
     ^
   In file included from include/linux/srcu.h:34:0,
                    from include/linux/notifier.h:16,
                    from include/linux/memory_hotplug.h:7,
                    from include/linux/mmzone.h:777,
                    from include/linux/gfp.h:6,
                    from include/linux/idr.h:16,
                    from include/linux/kernfs.h:14,
                    from include/linux/sysfs.h:16,
                    from include/linux/kobject.h:20,
                    from include/linux/cdev.h:5,
                    from include/drm/drmP.h:36,
                    from drivers/gpu/drm/i915/i915_gem.c:28:
   include/linux/workqueue.h:484:13: note: expected 'struct delayed_work *' but argument is of type 'struct delayed_work'
    extern bool cancel_delayed_work_sync(struct delayed_work *dwork);
                ^

vim +/cancel_delayed_work_sync +555 drivers/gpu/drm/i915/selftests/i915_gem_object.c

   493	
   494	static int igt_mmap_offset_exhaustion(void *arg)
   495	{
   496		struct drm_i915_private *i915 = arg;
   497		struct drm_mm *mm = &i915->drm.vma_offset_manager->vm_addr_space_mm;
   498		struct drm_i915_gem_object *obj;
   499		struct drm_mm_node resv, *hole;
   500		u64 hole_start, hole_end;
   501		int loop, err;
   502	
   503		/* Trim the device mmap space to only a page */
   504		memset(&resv, 0, sizeof(resv));
   505		drm_mm_for_each_hole(hole, mm, hole_start, hole_end) {
   506			resv.start = hole_start;
   507			resv.size = hole_end - hole_start - 1; /* PAGE_SIZE units */
   508			err = drm_mm_reserve_node(mm, &resv);
   509			if (err) {
   510				pr_err("Failed to trim VMA manager, err=%d\n", err);
   511				return err;
   512			}
   513			break;
   514		}
   515	
   516		/* Just fits! */
   517		if (!assert_mmap_offset(i915, PAGE_SIZE, 0)) {
   518			pr_err("Unable to insert object into single page hole\n");
   519			err = -EINVAL;
   520			goto out;
   521		}
   522	
   523		/* Too large */
   524		if (!assert_mmap_offset(i915, 2*PAGE_SIZE, -ENOSPC)) {
   525			pr_err("Unexpectedly succeeded in inserting too large object into single page hole\n");
   526			err = -EINVAL;
   527			goto out;
   528		}
   529	
   530		/* Fill the hole, further allocation attempts should then fail */
   531		obj = i915_gem_object_create_internal(i915, PAGE_SIZE);
   532		if (IS_ERR(obj)) {
   533			err = PTR_ERR(obj);
   534			goto out;
   535		}
   536	
   537		err = i915_gem_object_create_mmap_offset(obj);
   538		if (err) {
   539			pr_err("Unable to insert object into reclaimed hole\n");
   540			goto err_obj;
   541		}
   542	
   543		if (!assert_mmap_offset(i915, PAGE_SIZE, -ENOSPC)) {
   544			pr_err("Unexpectedly succeeded in inserting object into no holes!\n");
   545			err = -EINVAL;
   546			goto err_obj;
   547		}
   548	
   549		i915_gem_object_put(obj);
   550	
   551		/* Disable background reaper */
   552		mutex_lock(&i915->drm.struct_mutex);
   553		i915_gem_unpark(i915);
   554		mutex_unlock(&i915->drm.struct_mutex);
 > 555		cancel_delayed_work_sync(i915->gt.retire_work);
   556		cancel_delayed_work_sync(i915->gt.idle_work);
   557		GEM_BUG_ON(!i915->gt.awake);
   558	
   559		/* Now fill with busy dead objects that we expect to reap */
   560		for (loop = 0; loop < 3; loop++) {
   561			if (i915_terminally_wedged(&i915->gpu_error))
   562				break;
   563	
   564			obj = i915_gem_object_create_internal(i915, PAGE_SIZE);
   565			if (IS_ERR(obj)) {
   566				err = PTR_ERR(obj);
   567				goto out;
   568			}
   569	
   570			mutex_lock(&i915->drm.struct_mutex);
   571			intel_runtime_pm_get(i915);
   572			err = make_obj_busy(obj);
   573			intel_runtime_pm_put(i915);
   574			mutex_unlock(&i915->drm.struct_mutex);
   575			if (err) {
   576				pr_err("[loop %d] Failed to busy the object\n", loop);
   577				goto err_obj;
   578			}
   579	
   580			GEM_BUG_ON(!i915_gem_object_is_active(obj));
   581			err = i915_gem_object_create_mmap_offset(obj);
   582			if (err) {
   583				pr_err("[loop %d] i915_gem_object_create_mmap_offset failed with err=%d\n",
   584				       loop, err);
   585				goto out;
   586			}
   587		}
   588	
   589	out:
   590		drm_mm_remove_node(&resv);
   591		queue_delayed_work(i915->wq, &i915->gt.retire_work, 0);
   592		return err;
   593	err_obj:
   594		i915_gem_object_put(obj);
   595		goto out;
   596	}
   597	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 28080 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/intel-gfx/attachments/20180708/4fd716e0/attachment-0001.gz>


More information about the Intel-gfx mailing list