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

    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>
    ---
    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 88c1ed57a3c5..a50495083d6f 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;

    if (copy_to_user((void __user *)(unsigned long)args->addr, ptr, size))
    diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c
    index dd5ead2541c2..c7a5ca027245 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.22.0.rc2.383.gf4fbbf30c2-goog
    \
     
     \ /
      Last update: 2019-06-10 23:18    [W:4.692 / U:0.896 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site