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
.config.gz
Description: application/gzip
_______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel