lkml.org 
[lkml]   [2019]   [Apr]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.0 117/117] drm/virtio: do NOT reuse resource ids
    Date
    From: Gerd Hoffmann <kraxel@redhat.com>

    commit 16065fcdd19ddb9e093192914ac863884f308766 upstream.

    Bisected guest kernel changes crashing qemu. Landed at
    "6c1cd97bda drm/virtio: fix resource id handling". Looked again, and
    noticed we where not only leaking *some* ids, but *all* ids. The old
    code never ever called virtio_gpu_resource_id_put().

    So, commit 6c1cd97bda effectively makes the linux kernel starting
    re-using IDs after releasing them, and apparently virglrenderer can't
    deal with that. Oops.

    This patch puts a temporary stopgap into place for the 5.0 release.

    Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
    Reviewed-by: Dave Airlie <airlied@redhat.com>
    Signed-off-by: Dave Airlie <airlied@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20190208140409.15280-1-kraxel@redhat.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

    --- a/drivers/gpu/drm/virtio/virtgpu_object.c
    +++ b/drivers/gpu/drm/virtio/virtgpu_object.c
    @@ -28,10 +28,21 @@
    static int virtio_gpu_resource_id_get(struct virtio_gpu_device *vgdev,
    uint32_t *resid)
    {
    +#if 0
    int handle = ida_alloc(&vgdev->resource_ida, GFP_KERNEL);

    if (handle < 0)
    return handle;
    +#else
    + static int handle;
    +
    + /*
    + * FIXME: dirty hack to avoid re-using IDs, virglrenderer
    + * can't deal with that. Needs fixing in virglrenderer, also
    + * should figure a better way to handle that in the guest.
    + */
    + handle++;
    +#endif

    *resid = handle + 1;
    return 0;
    @@ -39,7 +50,9 @@ static int virtio_gpu_resource_id_get(st

    static void virtio_gpu_resource_id_put(struct virtio_gpu_device *vgdev, uint32_t id)
    {
    +#if 0
    ida_free(&vgdev->resource_ida, id - 1);
    +#endif
    }

    static void virtio_gpu_ttm_bo_destroy(struct ttm_buffer_object *tbo)

    \
     
     \ /
      Last update: 2019-04-15 21:15    [W:2.551 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site