diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-11-15 00:19:54 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-11-15 00:19:54 -0500 |
commit | 049ffa8ab33a63b3bff672d1a0ee6a35ad253fe8 (patch) | |
tree | 70f4c684818b1c9871fa800088427e40d260592e /drivers/gpu/drm/ttm/ttm_bo_util.c | |
parent | c681427e5ca22925fcc1be76a2e260a11e0a8498 (diff) | |
parent | 0846c728e20a0cd1e43fb75a3015f3b176a26466 (diff) |
Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
Pull drm updates from Dave Airlie:
"This is a combo of -next and some -fixes that came in in the
intervening time.
Highlights:
New drivers:
ARM Armada driver for Marvell Armada 510 SOCs
Intel:
Broadwell initial support under a default off switch,
Stereo/3D HDMI mode support
Valleyview improvements
Displayport improvements
Haswell fixes
initial mipi dsi panel support
CRC support for debugging
build with CONFIG_FB=n
Radeon:
enable DPM on a number of GPUs by default
secondary GPU powerdown support
enable HDMI audio by default
Hawaii support
Nouveau:
dynamic pm code infrastructure reworked, does nothing major yet
GK208 modesetting support
MSI fixes, on by default again
PMPEG improvements
pageflipping fixes
GMA500:
minnowboard SDVO support
VMware:
misc fixes
MSM:
prime, plane and rendernodes support
Tegra:
rearchitected to put the drm driver into the drm subsystem.
HDMI and gr2d support for tegra 114 SoC
QXL:
oops fix, and multi-head fixes
DRM core:
sysfs lifetime fixes
client capability ioctl
further cleanups to device midlayer
more vblank timestamp fixes"
* 'drm-next' of git://people.freedesktop.org/~airlied/linux: (789 commits)
drm/nouveau: do not map evicted vram buffers in nouveau_bo_vma_add
drm/nvc0-/gr: shift wrapping bug in nvc0_grctx_generate_r406800
drm/nouveau/pwr: fix missing mutex unlock in a failure path
drm/nv40/therm: fix slowing down fan when pstate undefined
drm/nv11-: synchronise flips to vblank, unless async flip requested
drm/nvc0-: remove nasty fifo swmthd hack for flip completion method
drm/nv10-: we no longer need to create nvsw object on user channels
drm/nouveau: always queue flips relative to kernel channel activity
drm/nouveau: there is no need to reserve/fence the new fb when flipping
drm/nouveau: when bailing out of a pushbuf ioctl, do not remove previous fence
drm/nouveau: allow nouveau_fence_ref() to be a noop
drm/nvc8/mc: msi rearm is via the nvc0 method
drm/ttm: Fix vma page_prot bit manipulation
drm/vmwgfx: Fix a couple of compile / sparse warnings and errors
drm/vmwgfx: Resource evict fixes
drm/edid: compare actual vrefresh for all modes for quirks
drm: shmob_drm: Convert to clk_prepare/unprepare
drm/nouveau: fix 32-bit build
drm/i915/opregion: fix build error on CONFIG_ACPI=n
Revert "drm/radeon/audio: don't set speaker allocation on DCE4+"
...
Diffstat (limited to 'drivers/gpu/drm/ttm/ttm_bo_util.c')
-rw-r--r-- | drivers/gpu/drm/ttm/ttm_bo_util.c | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c index 7cc904d3a4d1..4834c463c38b 100644 --- a/drivers/gpu/drm/ttm/ttm_bo_util.c +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c | |||
@@ -343,19 +343,25 @@ int ttm_bo_move_memcpy(struct ttm_buffer_object *bo, | |||
343 | if (ret) | 343 | if (ret) |
344 | goto out; | 344 | goto out; |
345 | 345 | ||
346 | /* | ||
347 | * Single TTM move. NOP. | ||
348 | */ | ||
346 | if (old_iomap == NULL && new_iomap == NULL) | 349 | if (old_iomap == NULL && new_iomap == NULL) |
347 | goto out2; | 350 | goto out2; |
351 | |||
352 | /* | ||
353 | * Move nonexistent data. NOP. | ||
354 | */ | ||
348 | if (old_iomap == NULL && ttm == NULL) | 355 | if (old_iomap == NULL && ttm == NULL) |
349 | goto out2; | 356 | goto out2; |
350 | 357 | ||
351 | if (ttm->state == tt_unpopulated) { | 358 | /* |
359 | * TTM might be null for moves within the same region. | ||
360 | */ | ||
361 | if (ttm && ttm->state == tt_unpopulated) { | ||
352 | ret = ttm->bdev->driver->ttm_tt_populate(ttm); | 362 | ret = ttm->bdev->driver->ttm_tt_populate(ttm); |
353 | if (ret) { | 363 | if (ret) |
354 | /* if we fail here don't nuke the mm node | ||
355 | * as the bo still owns it */ | ||
356 | old_copy.mm_node = NULL; | ||
357 | goto out1; | 364 | goto out1; |
358 | } | ||
359 | } | 365 | } |
360 | 366 | ||
361 | add = 0; | 367 | add = 0; |
@@ -381,11 +387,8 @@ int ttm_bo_move_memcpy(struct ttm_buffer_object *bo, | |||
381 | prot); | 387 | prot); |
382 | } else | 388 | } else |
383 | ret = ttm_copy_io_page(new_iomap, old_iomap, page); | 389 | ret = ttm_copy_io_page(new_iomap, old_iomap, page); |
384 | if (ret) { | 390 | if (ret) |
385 | /* failing here, means keep old copy as-is */ | ||
386 | old_copy.mm_node = NULL; | ||
387 | goto out1; | 391 | goto out1; |
388 | } | ||
389 | } | 392 | } |
390 | mb(); | 393 | mb(); |
391 | out2: | 394 | out2: |
@@ -403,7 +406,12 @@ out1: | |||
403 | ttm_mem_reg_iounmap(bdev, old_mem, new_iomap); | 406 | ttm_mem_reg_iounmap(bdev, old_mem, new_iomap); |
404 | out: | 407 | out: |
405 | ttm_mem_reg_iounmap(bdev, &old_copy, old_iomap); | 408 | ttm_mem_reg_iounmap(bdev, &old_copy, old_iomap); |
406 | ttm_bo_mem_put(bo, &old_copy); | 409 | |
410 | /* | ||
411 | * On error, keep the mm node! | ||
412 | */ | ||
413 | if (!ret) | ||
414 | ttm_bo_mem_put(bo, &old_copy); | ||
407 | return ret; | 415 | return ret; |
408 | } | 416 | } |
409 | EXPORT_SYMBOL(ttm_bo_move_memcpy); | 417 | EXPORT_SYMBOL(ttm_bo_move_memcpy); |