diff options
author | Dave Airlie <airlied@redhat.com> | 2017-12-03 14:38:52 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2017-12-03 14:42:49 -0500 |
commit | 2c1c55cb75a9c72f9726fabb8c3607947711a8df (patch) | |
tree | fa835b954149545970eaa256107876d9a24bbf28 /drivers/gpu/drm/drm_syncobj.c | |
parent | ae64f9bd1d3621b5e60d7363bc20afb46aede215 (diff) | |
parent | 2f51be0945b9e0b9baafe47289c802be6d4c7980 (diff) |
Merge tag 'drm-misc-next-2017-11-30' of git://anongit.freedesktop.org/drm/drm-misc into drm-next
Cross-subsystem Changes:
- device tree doc for the Mitsubishi AA070MC01 and Tianma TM070RVHG71
panels (Lukasz Majewski) and for a 2nd endpoint on stm32 (Philippe Cornu)
Core Changes:
The most important changes are:
- Add drm_driver .last_close and .output_poll_changed helpers to reduce
fbdev emulation footprint in drivers (Noralf)
- Fix plane clipping in core and for vmwgfx (Ville)
Then we have a bunch of of improvement for print and debug such as the
addition of a framebuffer debugfs file. ELD connector, HDMI and
improvements. And a bunch of misc improvements, clean ups and style
changes and doc updates
[airlied: drop eld bits from amdgpu_dm]
Driver Changes:
- sii8620: filter unsupported modes and add DVI mode support (Maciej Purski)
- rockchip: analogix_dp: Remove unnecessary init code (Jeffy Chen)
- virtio, cirrus: add fb create_handle support to enable screenshots(Lepton Wu)
- virtio: replace reference/unreference with get/put (Aastha Gupta)
- vc4, gma500: Convert timers to use timer_setup() (Kees Cook)
- vc4: Reject HDMI modes with too high of clocks (Eric)
- vc4: Add support for more pixel formats (Dave Stevenson)
- stm: dsi: Rename driver name to "stm32-display-dsi" (Philippe Cornu)
- stm: ltdc: add a 2nd endpoint (Philippe Cornu)
- via: use monotonic time for VIA_WAIT_IRQ (Arnd Bergmann)
* tag 'drm-misc-next-2017-11-30' of git://anongit.freedesktop.org/drm/drm-misc: (96 commits)
drm/bridge: tc358767: add copyright lines
MAINTAINERS: change maintainer for Rockchip drm drivers
drm/vblank: Fix vblank timestamp debugs
drm/via: use monotonic time for VIA_WAIT_IRQ
dma-buf: Fix ifnullfree.cocci warnings
drm/printer: Add drm_vprintf()
drm/edid: Allow HDMI infoframe without VIC or S3D
video/hdmi: Allow "empty" HDMI infoframes
dma-buf/fence: Fix lock inversion within dma-fence-array
drm/sti: Handle return value of platform_get_irq_byname
drm/vc4: Add support for NV21 and NV61.
drm/vc4: Use .pixel_order instead of custom .flip_cbcr
drm/vc4: Add support for DRM_FORMAT_RGB888 and DRM_FORMAT_BGR888
drm: Move drm_plane_helper_check_state() into drm_atomic_helper.c
drm: Check crtc_state->enable rather than crtc->enabled in drm_plane_helper_check_state()
drm/vmwgfx: Try to fix plane clipping
drm/vmwgfx: Use drm_plane_helper_check_state()
drm/vmwgfx: Remove bogus crtc coords vs fb size check
gpu: gma500: remove unneeded DRIVER_LICENSE #define
drm: don't link DP aux i2c adapter to the hardware device node
...
Diffstat (limited to 'drivers/gpu/drm/drm_syncobj.c')
-rw-r--r-- | drivers/gpu/drm/drm_syncobj.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c index f776fc1cc543..9b733c510cbf 100644 --- a/drivers/gpu/drm/drm_syncobj.c +++ b/drivers/gpu/drm/drm_syncobj.c | |||
@@ -106,7 +106,8 @@ static int drm_syncobj_fence_get_or_add_callback(struct drm_syncobj *syncobj, | |||
106 | * callback when a fence has already been set. | 106 | * callback when a fence has already been set. |
107 | */ | 107 | */ |
108 | if (syncobj->fence) { | 108 | if (syncobj->fence) { |
109 | *fence = dma_fence_get(syncobj->fence); | 109 | *fence = dma_fence_get(rcu_dereference_protected(syncobj->fence, |
110 | lockdep_is_held(&syncobj->lock))); | ||
110 | ret = 1; | 111 | ret = 1; |
111 | } else { | 112 | } else { |
112 | *fence = NULL; | 113 | *fence = NULL; |
@@ -168,8 +169,9 @@ void drm_syncobj_replace_fence(struct drm_syncobj *syncobj, | |||
168 | 169 | ||
169 | spin_lock(&syncobj->lock); | 170 | spin_lock(&syncobj->lock); |
170 | 171 | ||
171 | old_fence = syncobj->fence; | 172 | old_fence = rcu_dereference_protected(syncobj->fence, |
172 | syncobj->fence = fence; | 173 | lockdep_is_held(&syncobj->lock)); |
174 | rcu_assign_pointer(syncobj->fence, fence); | ||
173 | 175 | ||
174 | if (fence != old_fence) { | 176 | if (fence != old_fence) { |
175 | list_for_each_entry_safe(cur, tmp, &syncobj->cb_list, node) { | 177 | list_for_each_entry_safe(cur, tmp, &syncobj->cb_list, node) { |
@@ -659,7 +661,8 @@ static void syncobj_wait_syncobj_func(struct drm_syncobj *syncobj, | |||
659 | container_of(cb, struct syncobj_wait_entry, syncobj_cb); | 661 | container_of(cb, struct syncobj_wait_entry, syncobj_cb); |
660 | 662 | ||
661 | /* This happens inside the syncobj lock */ | 663 | /* This happens inside the syncobj lock */ |
662 | wait->fence = dma_fence_get(syncobj->fence); | 664 | wait->fence = dma_fence_get(rcu_dereference_protected(syncobj->fence, |
665 | lockdep_is_held(&syncobj->lock))); | ||
663 | wake_up_process(wait->task); | 666 | wake_up_process(wait->task); |
664 | } | 667 | } |
665 | 668 | ||