| From fbb30168c7395b9cfeb9e6f7b0c0bca854a6552d Mon Sep 17 00:00:00 2001 |
| From: John Bates <jbates@chromium.org> |
| Date: Thu, 20 Feb 2020 14:53:19 -0800 |
| Subject: drm/virtio: fix resource id creation race |
| |
| 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); |