[PATCH 3/7] drm/vmwgfx: Stop using plane->fb in vmw_kms_helper_dirty()

kbuild test robot lkp at intel.com
Fri Apr 6 08:51:42 UTC 2018


Hi Ville,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on drm/drm-next]
[also build test ERROR on next-20180405]
[cannot apply to v4.16]
[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/Ville-Syrjala/drm-arc-Stop-consulting-plane-fb/20180406-155056
base:   git://people.freedesktop.org/~airlied/linux.git drm-next
config: x86_64-randconfig-x010-201813 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All error/warnings (new ones prefixed by >>):

   In file included from arch/x86/include/asm/bug.h:83:0,
                    from include/linux/bug.h:5,
                    from include/linux/debug_locks.h:7,
                    from include/linux/lockdep.h:28,
                    from include/linux/spinlock_types.h:18,
                    from include/linux/mutex.h:16,
                    from include/linux/kernfs.h:13,
                    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/vmwgfx/vmwgfx_kms.h:31,
                    from drivers/gpu/drm/vmwgfx/vmwgfx_kms.c:28:
   drivers/gpu/drm/vmwgfx/vmwgfx_kms.c: In function 'vmw_kms_helper_dirty':
>> include/linux/lockdep.h:347:52: error: 'struct drm_modeset_lock' has no member named 'dep_map'
    #define lockdep_is_held(lock)  lock_is_held(&(lock)->dep_map)
                                                       ^
   include/asm-generic/bug.h:112:25: note: in definition of macro 'WARN_ON'
     int __ret_warn_on = !!(condition);    \
                            ^~~~~~~~~
>> include/linux/lockdep.h:373:27: note: in expansion of macro 'lockdep_is_held'
      WARN_ON(debug_locks && !lockdep_is_held(l)); \
                              ^~~~~~~~~~~~~~~
>> drivers/gpu/drm/vmwgfx/vmwgfx_kms.c:2337:4: note: in expansion of macro 'lockdep_assert_held'
       lockdep_assert_held(&plane->mutex);
       ^~~~~~~~~~~~~~~~~~~
--
   In file included from arch/x86/include/asm/bug.h:83:0,
                    from include/linux/bug.h:5,
                    from include/linux/debug_locks.h:7,
                    from include/linux/lockdep.h:28,
                    from include/linux/spinlock_types.h:18,
                    from include/linux/mutex.h:16,
                    from include/linux/kernfs.h:13,
                    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/vmwgfx/vmwgfx_kms.h:31,
                    from drivers/gpu//drm/vmwgfx/vmwgfx_kms.c:28:
   drivers/gpu//drm/vmwgfx/vmwgfx_kms.c: In function 'vmw_kms_helper_dirty':
>> include/linux/lockdep.h:347:52: error: 'struct drm_modeset_lock' has no member named 'dep_map'
    #define lockdep_is_held(lock)  lock_is_held(&(lock)->dep_map)
                                                       ^
   include/asm-generic/bug.h:112:25: note: in definition of macro 'WARN_ON'
     int __ret_warn_on = !!(condition);    \
                            ^~~~~~~~~
>> include/linux/lockdep.h:373:27: note: in expansion of macro 'lockdep_is_held'
      WARN_ON(debug_locks && !lockdep_is_held(l)); \
                              ^~~~~~~~~~~~~~~
   drivers/gpu//drm/vmwgfx/vmwgfx_kms.c:2337:4: note: in expansion of macro 'lockdep_assert_held'
       lockdep_assert_held(&plane->mutex);
       ^~~~~~~~~~~~~~~~~~~

vim +/lockdep_assert_held +2337 drivers/gpu/drm/vmwgfx/vmwgfx_kms.c

  2289	
  2290	/**
  2291	 * vmw_kms_helper_dirty - Helper to build commands and perform actions based
  2292	 * on a set of cliprects and a set of display units.
  2293	 *
  2294	 * @dev_priv: Pointer to a device private structure.
  2295	 * @framebuffer: Pointer to the framebuffer on which to perform the actions.
  2296	 * @clips: A set of struct drm_clip_rect. Either this os @vclips must be NULL.
  2297	 * Cliprects are given in framebuffer coordinates.
  2298	 * @vclips: A set of struct drm_vmw_rect cliprects. Either this or @clips must
  2299	 * be NULL. Cliprects are given in source coordinates.
  2300	 * @dest_x: X coordinate offset for the crtc / destination clip rects.
  2301	 * @dest_y: Y coordinate offset for the crtc / destination clip rects.
  2302	 * @num_clips: Number of cliprects in the @clips or @vclips array.
  2303	 * @increment: Integer with which to increment the clip counter when looping.
  2304	 * Used to skip a predetermined number of clip rects.
  2305	 * @dirty: Closure structure. See the description of struct vmw_kms_dirty.
  2306	 */
  2307	int vmw_kms_helper_dirty(struct vmw_private *dev_priv,
  2308				 struct vmw_framebuffer *framebuffer,
  2309				 const struct drm_clip_rect *clips,
  2310				 const struct drm_vmw_rect *vclips,
  2311				 s32 dest_x, s32 dest_y,
  2312				 int num_clips,
  2313				 int increment,
  2314				 struct vmw_kms_dirty *dirty)
  2315	{
  2316		struct vmw_display_unit *units[VMWGFX_NUM_DISPLAY_UNITS];
  2317		struct drm_crtc *crtc;
  2318		u32 num_units = 0;
  2319		u32 i, k;
  2320	
  2321		dirty->dev_priv = dev_priv;
  2322	
  2323		/* If crtc is passed, no need to iterate over other display units */
  2324		if (dirty->crtc) {
  2325			units[num_units++] = vmw_crtc_to_du(dirty->crtc);
  2326		} else {
  2327			list_for_each_entry(crtc, &dev_priv->dev->mode_config.crtc_list,
  2328					    head) {
  2329				struct drm_plane *plane = crtc->primary;
  2330	
  2331				/*
  2332				 * vmw_*_primary_plane_atomic_update() pass in the crtc,
  2333				 * and so don't end up here. All other callers use
  2334				 * drm_modeset_lock_all(), hence we can access the
  2335				 * plane state safely.
  2336				 */
> 2337				lockdep_assert_held(&plane->mutex);
  2338	
  2339				if (plane->state->fb != &framebuffer->base)
  2340					units[num_units++] = vmw_crtc_to_du(crtc);
  2341			}
  2342		}
  2343	
  2344		for (k = 0; k < num_units; k++) {
  2345			struct vmw_display_unit *unit = units[k];
  2346			s32 crtc_x = unit->crtc.x;
  2347			s32 crtc_y = unit->crtc.y;
  2348			s32 crtc_width = unit->crtc.mode.hdisplay;
  2349			s32 crtc_height = unit->crtc.mode.vdisplay;
  2350			const struct drm_clip_rect *clips_ptr = clips;
  2351			const struct drm_vmw_rect *vclips_ptr = vclips;
  2352	
  2353			dirty->unit = unit;
  2354			if (dirty->fifo_reserve_size > 0) {
  2355				dirty->cmd = vmw_fifo_reserve(dev_priv,
  2356							      dirty->fifo_reserve_size);
  2357				if (!dirty->cmd) {
  2358					DRM_ERROR("Couldn't reserve fifo space "
  2359						  "for dirty blits.\n");
  2360					return -ENOMEM;
  2361				}
  2362				memset(dirty->cmd, 0, dirty->fifo_reserve_size);
  2363			}
  2364			dirty->num_hits = 0;
  2365			for (i = 0; i < num_clips; i++, clips_ptr += increment,
  2366			       vclips_ptr += increment) {
  2367				s32 clip_left;
  2368				s32 clip_top;
  2369	
  2370				/*
  2371				 * Select clip array type. Note that integer type
  2372				 * in @clips is unsigned short, whereas in @vclips
  2373				 * it's 32-bit.
  2374				 */
  2375				if (clips) {
  2376					dirty->fb_x = (s32) clips_ptr->x1;
  2377					dirty->fb_y = (s32) clips_ptr->y1;
  2378					dirty->unit_x2 = (s32) clips_ptr->x2 + dest_x -
  2379						crtc_x;
  2380					dirty->unit_y2 = (s32) clips_ptr->y2 + dest_y -
  2381						crtc_y;
  2382				} else {
  2383					dirty->fb_x = vclips_ptr->x;
  2384					dirty->fb_y = vclips_ptr->y;
  2385					dirty->unit_x2 = dirty->fb_x + vclips_ptr->w +
  2386						dest_x - crtc_x;
  2387					dirty->unit_y2 = dirty->fb_y + vclips_ptr->h +
  2388						dest_y - crtc_y;
  2389				}
  2390	
  2391				dirty->unit_x1 = dirty->fb_x + dest_x - crtc_x;
  2392				dirty->unit_y1 = dirty->fb_y + dest_y - crtc_y;
  2393	
  2394				/* Skip this clip if it's outside the crtc region */
  2395				if (dirty->unit_x1 >= crtc_width ||
  2396				    dirty->unit_y1 >= crtc_height ||
  2397				    dirty->unit_x2 <= 0 || dirty->unit_y2 <= 0)
  2398					continue;
  2399	
  2400				/* Clip right and bottom to crtc limits */
  2401				dirty->unit_x2 = min_t(s32, dirty->unit_x2,
  2402						       crtc_width);
  2403				dirty->unit_y2 = min_t(s32, dirty->unit_y2,
  2404						       crtc_height);
  2405	
  2406				/* Clip left and top to crtc limits */
  2407				clip_left = min_t(s32, dirty->unit_x1, 0);
  2408				clip_top = min_t(s32, dirty->unit_y1, 0);
  2409				dirty->unit_x1 -= clip_left;
  2410				dirty->unit_y1 -= clip_top;
  2411				dirty->fb_x -= clip_left;
  2412				dirty->fb_y -= clip_top;
  2413	
  2414				dirty->clip(dirty);
  2415			}
  2416	
  2417			dirty->fifo_commit(dirty);
  2418		}
  2419	
  2420		return 0;
  2421	}
  2422	

---
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: 32835 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20180406/e51f4519/attachment-0001.gz>


More information about the dri-devel mailing list