OSDN Git Service

drm/virtio: Use IDAs more efficiently
authorMatthew Wilcox <willy@infradead.org>
Tue, 30 Oct 2018 16:53:52 +0000 (09:53 -0700)
committerGerd Hoffmann <kraxel@redhat.com>
Wed, 14 Nov 2018 11:50:34 +0000 (12:50 +0100)
0-based IDAs are more efficient than any other base.  Convert the
1-based IDAs to be 0-based.

Signed-off-by: Matthew Wilcox <willy@infradead.org>
Link: http://patchwork.freedesktop.org/patch/msgid/20181030165352.13065-2-willy@infradead.org
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
drivers/gpu/drm/virtio/virtgpu_kms.c
drivers/gpu/drm/virtio/virtgpu_object.c

index bf609dc..8118f10 100644 (file)
@@ -55,10 +55,11 @@ static void virtio_gpu_config_changed_work_func(struct work_struct *work)
 static int virtio_gpu_context_create(struct virtio_gpu_device *vgdev,
                                      uint32_t nlen, const char *name)
 {
-       int handle = ida_alloc_min(&vgdev->ctx_id_ida, 1, GFP_KERNEL);
+       int handle = ida_alloc(&vgdev->ctx_id_ida, GFP_KERNEL);
 
        if (handle < 0)
                return handle;
+       handle += 1;
        virtio_gpu_cmd_context_create(vgdev, handle, nlen, name);
        return handle;
 }
@@ -67,7 +68,7 @@ static void virtio_gpu_context_destroy(struct virtio_gpu_device *vgdev,
                                      uint32_t ctx_id)
 {
        virtio_gpu_cmd_context_destroy(vgdev, ctx_id);
-       ida_free(&vgdev->ctx_id_ida, ctx_id);
+       ida_free(&vgdev->ctx_id_ida, ctx_id - 1);
 }
 
 static void virtio_gpu_init_vq(struct virtio_gpu_queue *vgvq,
index 5ac42dd..f39a183 100644 (file)
 static int virtio_gpu_resource_id_get(struct virtio_gpu_device *vgdev,
                                       uint32_t *resid)
 {
-       int handle = ida_alloc_min(&vgdev->resource_ida, 1, GFP_KERNEL);
+       int handle = ida_alloc(&vgdev->resource_ida, GFP_KERNEL);
 
        if (handle < 0)
                return handle;
 
-       *resid = handle;
+       *resid = handle + 1;
        return 0;
 }
 
 static void virtio_gpu_resource_id_put(struct virtio_gpu_device *vgdev, uint32_t id)
 {
-       ida_free(&vgdev->resource_ida, id);
+       ida_free(&vgdev->resource_ida, id - 1);
 }
 
 static void virtio_gpu_ttm_bo_destroy(struct ttm_buffer_object *tbo)