lkml.org 
[lkml]   [2019]   [Jul]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 236/293] drm/virtio: Add memory barriers for capset cache.
    Date
    [ 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 ed9c443bb8a1..40cc2f6707cf 100644
    --- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c
    +++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
    @@ -523,6 +523,9 @@ static int virtio_gpu_get_caps_ioctl(struct drm_device *dev,
    ret = wait_event_timeout(vgdev->resp_wq,
    atomic_read(&cache_ent->is_valid), 5 * HZ);

    + /* 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 26a2da1f712d..21c2de81f3e3 100644
    --- a/drivers/gpu/drm/virtio/virtgpu_vq.c
    +++ b/drivers/gpu/drm/virtio/virtgpu_vq.c
    @@ -585,6 +585,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-29 22:40    [W:4.454 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site