lkml.org 
[lkml]   [2019]   [Jul]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.2 054/171] drm/virtio: Add memory barriers for capset cache.
    Date
    From: David Riley <davidriley@chromium.org>

    [ Upstream commit 9ff3a5c88e1f1ab17a31402b96d45abe14aab9d7 ]

    After data is copied to the cache entry, atomic_set is used indicate
    that the data is the entry is valid without appropriate memory barriers.
    Similarly the read side was missing the corresponding memory barriers.

    Signed-off-by: David Riley <davidriley@chromium.org>
    Link: http://patchwork.freedesktop.org/patch/msgid/20190610211810.253227-5-davidriley@chromium.org
    Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/virtio/virtgpu_ioctl.c | 3 +++
    drivers/gpu/drm/virtio/virtgpu_vq.c | 2 ++
    2 files changed, 5 insertions(+)

    diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
    index 949a264985fc..19fbffd0f7a3 100644
    --- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c
    +++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
    @@ -542,6 +542,9 @@ static int virtio_gpu_get_caps_ioctl(struct drm_device *dev,
    if (!ret)
    return -EBUSY;

    + /* is_valid check must proceed before copy of the cache entry. */
    + smp_rmb();
    +
    ptr = cache_ent->caps_cache;

    copy_exit:
    diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c
    index 5bb0f0a084e9..a7684f9c80db 100644
    --- a/drivers/gpu/drm/virtio/virtgpu_vq.c
    +++ b/drivers/gpu/drm/virtio/virtgpu_vq.c
    @@ -583,6 +583,8 @@ static void virtio_gpu_cmd_capset_cb(struct virtio_gpu_device *vgdev,
    cache_ent->id == le32_to_cpu(cmd->capset_id)) {
    memcpy(cache_ent->caps_cache, resp->capset_data,
    cache_ent->size);
    + /* Copy must occur before is_valid is signalled. */
    + smp_wmb();
    atomic_set(&cache_ent->is_valid, 1);
    break;
    }
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-07-19 06:39    [W:3.286 / U:0.464 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site