diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2019-06-07 00:27:51 +0200 |
---|---|---|
committer | Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com> | 2019-06-27 04:19:22 +0200 |
commit | e5ff5344f4a44cf9f4606c5c2754d913f06aaae1 (patch) | |
tree | 08e55b4d0c52eea84289e62701acac60f5ca9d1d /drivers/gpu/drm/vkms | |
parent | drm/vkms: totally reworked crc data tracking (diff) | |
download | linux-e5ff5344f4a44cf9f4606c5c2754d913f06aaae1.tar.xz linux-e5ff5344f4a44cf9f4606c5c2754d913f06aaae1.zip |
drm/vkms: No need for ->pages_lock in crc work anymore
We're now guaranteed to no longer race against prepare_fb/cleanup_fb,
which means we can access ->vaddr without having to hold a lock.
Before the previous patches it was fairly easy to observe the cursor
->vaddr being invalid, but that's now gone, so we can upgrade to a
full WARN_ON.
Cc: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com>
Cc: Haneen Mohammed <hamohammed.sa@gmail.com>
Cc: Daniel Vetter <daniel@ffwll.ch>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Reviewed-by: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com>
Tested-by: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com>
Signed-off-by: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190606222751.32567-11-daniel.vetter@ffwll.ch
Diffstat (limited to 'drivers/gpu/drm/vkms')
-rw-r--r-- | drivers/gpu/drm/vkms/vkms_crc.c | 13 |
1 files changed, 2 insertions, 11 deletions
diff --git a/drivers/gpu/drm/vkms/vkms_crc.c b/drivers/gpu/drm/vkms/vkms_crc.c index c860a92cf142..30b048b67a32 100644 --- a/drivers/gpu/drm/vkms/vkms_crc.c +++ b/drivers/gpu/drm/vkms/vkms_crc.c @@ -97,16 +97,10 @@ static void compose_cursor(struct vkms_crc_data *cursor_crc, cursor_obj = drm_gem_fb_get_obj(&cursor_crc->fb, 0); cursor_vkms_obj = drm_gem_to_vkms_gem(cursor_obj); - mutex_lock(&cursor_vkms_obj->pages_lock); - if (!cursor_vkms_obj->vaddr) { - DRM_WARN("cursor plane vaddr is NULL"); - goto out; - } + if (WARN_ON(!cursor_vkms_obj->vaddr)) + return; blend(vaddr_out, cursor_vkms_obj->vaddr, primary_crc, cursor_crc); - -out: - mutex_unlock(&cursor_vkms_obj->pages_lock); } static uint32_t _vkms_get_crc(struct vkms_crc_data *primary_crc, @@ -123,15 +117,12 @@ static uint32_t _vkms_get_crc(struct vkms_crc_data *primary_crc, return 0; } - mutex_lock(&vkms_obj->pages_lock); if (WARN_ON(!vkms_obj->vaddr)) { - mutex_unlock(&vkms_obj->pages_lock); kfree(vaddr_out); return crc; } memcpy(vaddr_out, vkms_obj->vaddr, vkms_obj->gem.size); - mutex_unlock(&vkms_obj->pages_lock); if (cursor_crc) compose_cursor(cursor_crc, primary_crc, vaddr_out); |