lkml.org 
[lkml]   [2020]   [Mar]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.5 129/189] drm/virtio: fix resource id creation race
    Date
    From: John Bates <jbates@chromium.org>

    commit fbb30168c7395b9cfeb9e6f7b0c0bca854a6552d upstream.

    The previous code was not thread safe and caused
    undefined behavior from spurious duplicate resource IDs.
    In this patch, an atomic_t is used instead. We no longer
    see any duplicate IDs in tests with this change.

    Fixes: 16065fcdd19d ("drm/virtio: do NOT reuse resource ids")
    Signed-off-by: John Bates <jbates@chromium.org>
    Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/20200220225319.45621-1-jbates@chromium.org
    Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/gpu/drm/virtio/virtgpu_object.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    --- a/drivers/gpu/drm/virtio/virtgpu_object.c
    +++ b/drivers/gpu/drm/virtio/virtgpu_object.c
    @@ -42,8 +42,8 @@ static int virtio_gpu_resource_id_get(st
    * "f91a9dd35715 Fix unlinking resources from hash
    * table." (Feb 2019) fixes the bug.
    */
    - static int handle;
    - handle++;
    + static atomic_t seqno = ATOMIC_INIT(0);
    + int handle = atomic_inc_return(&seqno);
    *resid = handle + 1;
    } else {
    int handle = ida_alloc(&vgdev->resource_ida, GFP_KERNEL);

    \
     
     \ /
      Last update: 2020-03-10 14:02    [W:3.615 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site