Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux

Pull drm fixes from Dave Airlie:
"Pretty minor set of fixes for radeon, ttm and vmwgfx. The ttm ones
are a regression and an oops seen on server chipsets"

* 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
drm/vmwgfx: Fix a surface reference corner-case in legacy emulation mode
drm/radeon/cik: properly set compute ring status on disable
drm/radeon/cik: stop the sdma engines in the enable() function
drm/radeon/cik: properly set sdma ring status on disable
drm/radeon: fix runpm disabling on non-PX harder
drm/ttm: don't oops if no invalidate_caches()
drm/ttm: Work around performance regression with VM_PFNMAP

+50 -17
+4 -1
drivers/gpu/drm/radeon/cik.c
··· 4134 4134 { 4135 4135 if (enable) 4136 4136 WREG32(CP_MEC_CNTL, 0); 4137 - else 4137 + else { 4138 4138 WREG32(CP_MEC_CNTL, (MEC_ME1_HALT | MEC_ME2_HALT)); 4139 + rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX].ready = false; 4140 + rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX].ready = false; 4141 + } 4139 4142 udelay(50); 4140 4143 } 4141 4144
+7 -7
drivers/gpu/drm/radeon/cik_sdma.c
··· 264 264 WREG32(SDMA0_GFX_RB_CNTL + reg_offset, rb_cntl); 265 265 WREG32(SDMA0_GFX_IB_CNTL + reg_offset, 0); 266 266 } 267 + rdev->ring[R600_RING_TYPE_DMA_INDEX].ready = false; 268 + rdev->ring[CAYMAN_RING_TYPE_DMA1_INDEX].ready = false; 267 269 } 268 270 269 271 /** ··· 292 290 { 293 291 u32 me_cntl, reg_offset; 294 292 int i; 293 + 294 + if (enable == false) { 295 + cik_sdma_gfx_stop(rdev); 296 + cik_sdma_rlc_stop(rdev); 297 + } 295 298 296 299 for (i = 0; i < 2; i++) { 297 300 if (i == 0) ··· 427 420 if (!rdev->sdma_fw) 428 421 return -EINVAL; 429 422 430 - /* stop the gfx rings and rlc compute queues */ 431 - cik_sdma_gfx_stop(rdev); 432 - cik_sdma_rlc_stop(rdev); 433 - 434 423 /* halt the MEs */ 435 424 cik_sdma_enable(rdev, false); 436 425 ··· 495 492 */ 496 493 void cik_sdma_fini(struct radeon_device *rdev) 497 494 { 498 - /* stop the gfx rings and rlc compute queues */ 499 - cik_sdma_gfx_stop(rdev); 500 - cik_sdma_rlc_stop(rdev); 501 495 /* halt the MEs */ 502 496 cik_sdma_enable(rdev, false); 503 497 radeon_ring_fini(rdev, &rdev->ring[R600_RING_TYPE_DMA_INDEX]);
+9 -1
drivers/gpu/drm/radeon/radeon_kms.c
··· 33 33 #include <linux/vga_switcheroo.h> 34 34 #include <linux/slab.h> 35 35 #include <linux/pm_runtime.h> 36 + 37 + #if defined(CONFIG_VGA_SWITCHEROO) 38 + bool radeon_is_px(void); 39 + #else 40 + static inline bool radeon_is_px(void) { return false; } 41 + #endif 42 + 36 43 /** 37 44 * radeon_driver_unload_kms - Main unload function for KMS. 38 45 * ··· 137 130 "Error during ACPI methods call\n"); 138 131 } 139 132 140 - if (radeon_runtime_pm != 0) { 133 + if ((radeon_runtime_pm == 1) || 134 + ((radeon_runtime_pm == -1) && radeon_is_px())) { 141 135 pm_runtime_use_autosuspend(dev->dev); 142 136 pm_runtime_set_autosuspend_delay(dev->dev, 5000); 143 137 pm_runtime_set_active(dev->dev);
+5 -3
drivers/gpu/drm/ttm/ttm_bo.c
··· 351 351 352 352 moved: 353 353 if (bo->evicted) { 354 - ret = bdev->driver->invalidate_caches(bdev, bo->mem.placement); 355 - if (ret) 356 - pr_err("Can not flush read caches\n"); 354 + if (bdev->driver->invalidate_caches) { 355 + ret = bdev->driver->invalidate_caches(bdev, bo->mem.placement); 356 + if (ret) 357 + pr_err("Can not flush read caches\n"); 358 + } 357 359 bo->evicted = false; 358 360 } 359 361
+7 -5
drivers/gpu/drm/ttm/ttm_bo_vm.c
··· 339 339 vma->vm_private_data = bo; 340 340 341 341 /* 342 - * PFNMAP is faster than MIXEDMAP due to reduced page 343 - * administration. So use MIXEDMAP only if private VMA, where 344 - * we need to support COW. 342 + * We'd like to use VM_PFNMAP on shared mappings, where 343 + * (vma->vm_flags & VM_SHARED) != 0, for performance reasons, 344 + * but for some reason VM_PFNMAP + x86 PAT + write-combine is very 345 + * bad for performance. Until that has been sorted out, use 346 + * VM_MIXEDMAP on all mappings. See freedesktop.org bug #75719 345 347 */ 346 - vma->vm_flags |= (vma->vm_flags & VM_SHARED) ? VM_PFNMAP : VM_MIXEDMAP; 348 + vma->vm_flags |= VM_MIXEDMAP; 347 349 vma->vm_flags |= VM_IO | VM_DONTEXPAND | VM_DONTDUMP; 348 350 return 0; 349 351 out_unref: ··· 361 359 362 360 vma->vm_ops = &ttm_bo_vm_ops; 363 361 vma->vm_private_data = ttm_bo_reference(bo); 364 - vma->vm_flags |= (vma->vm_flags & VM_SHARED) ? VM_PFNMAP : VM_MIXEDMAP; 362 + vma->vm_flags |= VM_MIXEDMAP; 365 363 vma->vm_flags |= VM_IO | VM_DONTEXPAND; 366 364 return 0; 367 365 }
+18
drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
··· 830 830 if (unlikely(ret != 0)) 831 831 goto out_unlock; 832 832 833 + /* 834 + * A gb-aware client referencing a shared surface will 835 + * expect a backup buffer to be present. 836 + */ 837 + if (dev_priv->has_mob && req->shareable) { 838 + uint32_t backup_handle; 839 + 840 + ret = vmw_user_dmabuf_alloc(dev_priv, tfile, 841 + res->backup_size, 842 + true, 843 + &backup_handle, 844 + &res->backup); 845 + if (unlikely(ret != 0)) { 846 + vmw_resource_unreference(&res); 847 + goto out_unlock; 848 + } 849 + } 850 + 833 851 tmp = vmw_resource_reference(&srf->res); 834 852 ret = ttm_prime_object_init(tfile, res->backup_size, &user_srf->prime, 835 853 req->shareable, VMW_RES_SURFACE,