aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/drm_gem.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-09-03 20:02:26 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-09-03 20:02:26 -0400
commit906dde0f355bd97c080c215811ae7db1137c4af8 (patch)
tree1e1b4ba58a59c4027f06d86e7430566ee0dcbb15 /drivers/gpu/drm/drm_gem.c
parent69c0067aa3f40d3e52ab78643aecb17d669d3389 (diff)
parent7846b12fe0b5feab5446d892f41b5140c1419109 (diff)
Merge tag 'drm-for-v4.14' of git://people.freedesktop.org/~airlied/linux
Pull drm updates from Dave Airlie: "This is the main drm pull request for 4.14 merge window. I'm sending this early, as my continuing journey into fatherhood is occurring really soon now, I'm going to be mostly useless for the next couple of weeks, though I may be able to read email, I doubt I'll be doing much patch applications or git sending. If anything urgent pops up I've asked Daniel/Jani/Alex/Sean to try and direct stuff towards you. Outside drm changes: Some rcar-du updates that touch the V4L tree, all acks should be in place. It adds one export to the radix tree code for new i915 use case. There are some minor AGP cleanups (don't see that too often). Changes to the vbox driver in staging to avoid breaking compilation. Summary: core: - Atomic helper fixes - Atomic UAPI fixes - Add YCBCR 4:2:0 support - Drop set_busid hook - Refactor fb_helper locking - Remove a bunch of internal APIs - Add a bunch of better default handlers - Format modifier/blob plane property added - More internal header refactoring - Make more internal API names consistent - Enhanced syncobj APIs (wait/signal/reset/create signalled) bridge: - Add Synopsys Designware MIPI DSI host bridge driver tiny: - Add Pervasive Displays RePaper displays - Add support for LEGO MINDSTORMS EV3 LCD i915: - Lots of GEN10/CNL support patches - drm syncobj support - Skylake+ watermark refactoring - GVT vGPU 48-bit ppgtt support - GVT performance improvements - NOA change ioctl - CCS (color compression) scanout support - GPU reset improvements amdgpu: - Initial hugepage support - BO migration logic rework - Vega10 improvements - Powerplay fixes - Stop reprogramming the MC - Fixes for ACP audio on stoney - SR-IOV fixes/improvements - Command submission overhead improvements amdkfd: - Non-dGPU upstreaming patches - Scratch VA ioctl - Image tiling modes - Update PM4 headers for new firmware - Drop all BUG_ONs. nouveau: - GP108 modesetting support. - Disable MSI on big endian. vmwgfx: - Add fence fd support. msm: - Runtime PM improvements exynos: - NV12MT support - Refactor KMS drivers imx-drm: - Lock scanout channel to improve memory bw - Cleanups etnaviv: - GEM object population fixes tegra: - Prep work for Tegra186 support - PRIME mmap support sunxi: - HDMI support improvements - HDMI CEC support omapdrm: - HDMI hotplug IRQ support - Big driver cleanup - OMAP5 DSI support rcar-du: - vblank fixes - VSP1 updates arcgpu: - Minor fixes stm: - Add STM32 DSI controller driver dw_hdmi: - Add support for Rockchip RK3399 - HDMI CEC support atmel-hlcdc: - Add 8-bit color support vc4: - Atomic fixes - New ioctl to attach a label to a buffer object - HDMI CEC support - Allow userspace to dictate rendering order on submit ioctl" * tag 'drm-for-v4.14' of git://people.freedesktop.org/~airlied/linux: (1074 commits) drm/syncobj: Add a signal ioctl (v3) drm/syncobj: Add a reset ioctl (v3) drm/syncobj: Add a syncobj_array_find helper drm/syncobj: Allow wait for submit and signal behavior (v5) drm/syncobj: Add a CREATE_SIGNALED flag drm/syncobj: Add a callback mechanism for replace_fence (v3) drm/syncobj: add sync obj wait interface. (v8) i915: Use drm_syncobj_fence_get drm/syncobj: Add a race-free drm_syncobj_fence_get helper (v2) drm/syncobj: Rename fence_get to find_fence drm: kirin: Add mode_valid logic to avoid mode clocks we can't generate drm/vmwgfx: Bump the version for fence FD support drm/vmwgfx: Add export fence to file descriptor support drm/vmwgfx: Add support for imported Fence File Descriptor drm/vmwgfx: Prepare to support fence fd drm/vmwgfx: Fix incorrect command header offset at restart drm/vmwgfx: Support the NOP_ERROR command drm/vmwgfx: Restart command buffers after errors drm/vmwgfx: Move irq bottom half processing to threads drm/vmwgfx: Don't use drm_irq_[un]install ...
Diffstat (limited to 'drivers/gpu/drm/drm_gem.c')
-rw-r--r--drivers/gpu/drm/drm_gem.c47
1 files changed, 42 insertions, 5 deletions
diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
index cdaac37907b1..88c6d78ee2d5 100644
--- a/drivers/gpu/drm/drm_gem.c
+++ b/drivers/gpu/drm/drm_gem.c
@@ -311,6 +311,41 @@ drm_gem_handle_delete(struct drm_file *filp, u32 handle)
311EXPORT_SYMBOL(drm_gem_handle_delete); 311EXPORT_SYMBOL(drm_gem_handle_delete);
312 312
313/** 313/**
314 * drm_gem_dumb_map_offset - return the fake mmap offset for a gem object
315 * @file: drm file-private structure containing the gem object
316 * @dev: corresponding drm_device
317 * @handle: gem object handle
318 * @offset: return location for the fake mmap offset
319 *
320 * This implements the &drm_driver.dumb_map_offset kms driver callback for
321 * drivers which use gem to manage their backing storage.
322 *
323 * Returns:
324 * 0 on success or a negative error code on failure.
325 */
326int drm_gem_dumb_map_offset(struct drm_file *file, struct drm_device *dev,
327 u32 handle, u64 *offset)
328{
329 struct drm_gem_object *obj;
330 int ret;
331
332 obj = drm_gem_object_lookup(file, handle);
333 if (!obj)
334 return -ENOENT;
335
336 ret = drm_gem_create_mmap_offset(obj);
337 if (ret)
338 goto out;
339
340 *offset = drm_vma_node_offset_addr(&obj->vma_node);
341out:
342 drm_gem_object_put_unlocked(obj);
343
344 return ret;
345}
346EXPORT_SYMBOL_GPL(drm_gem_dumb_map_offset);
347
348/**
314 * drm_gem_dumb_destroy - dumb fb callback helper for gem based drivers 349 * drm_gem_dumb_destroy - dumb fb callback helper for gem based drivers
315 * @file: drm file-private structure to remove the dumb handle from 350 * @file: drm file-private structure to remove the dumb handle from
316 * @dev: corresponding drm_device 351 * @dev: corresponding drm_device
@@ -826,13 +861,15 @@ drm_gem_object_put_unlocked(struct drm_gem_object *obj)
826 return; 861 return;
827 862
828 dev = obj->dev; 863 dev = obj->dev;
829 might_lock(&dev->struct_mutex);
830 864
831 if (dev->driver->gem_free_object_unlocked) 865 if (dev->driver->gem_free_object_unlocked) {
832 kref_put(&obj->refcount, drm_gem_object_free); 866 kref_put(&obj->refcount, drm_gem_object_free);
833 else if (kref_put_mutex(&obj->refcount, drm_gem_object_free, 867 } else {
868 might_lock(&dev->struct_mutex);
869 if (kref_put_mutex(&obj->refcount, drm_gem_object_free,
834 &dev->struct_mutex)) 870 &dev->struct_mutex))
835 mutex_unlock(&dev->struct_mutex); 871 mutex_unlock(&dev->struct_mutex);
872 }
836} 873}
837EXPORT_SYMBOL(drm_gem_object_put_unlocked); 874EXPORT_SYMBOL(drm_gem_object_put_unlocked);
838 875
@@ -964,7 +1001,7 @@ int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma)
964 struct drm_vma_offset_node *node; 1001 struct drm_vma_offset_node *node;
965 int ret; 1002 int ret;
966 1003
967 if (drm_device_is_unplugged(dev)) 1004 if (drm_dev_is_unplugged(dev))
968 return -ENODEV; 1005 return -ENODEV;
969 1006
970 drm_vma_offset_lock_lookup(dev->vma_offset_manager); 1007 drm_vma_offset_lock_lookup(dev->vma_offset_manager);