Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 063ff274 authored by Matthew Wilcox's avatar Matthew Wilcox Committed by Alistair Delva
Browse files

UPSTREAM: drm/virtio: Replace IDRs with IDAs



These IDRs were only being used to allocate unique numbers, not to look
up pointers, so they can use the more space-efficient IDA instead.

Signed-off-by: default avatarMatthew Wilcox <willy@infradead.org>
Link: http://patchwork.freedesktop.org/patch/msgid/20180926160031.15721-2-willy@infradead.org



[ kraxel: resolve conflict ]

Signed-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
(cherry picked from commit 1938d1ae32fefa172288e3a9245ae126640c5c10)
Signed-off-by: default avatarGreg Hartman <ghartman@google.com>
BUG: 139386237
Change-Id: Ie7a81e0eedc7adf6ae7f4d75a0b7fa2533fae577
parent 1142e84c
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -191,8 +191,7 @@ struct virtio_gpu_device {
	struct kmem_cache *vbufs;
	bool vqs_ready;

	struct idr	resource_idr;
	spinlock_t resource_idr_lock;
	struct ida	resource_ida;

	wait_queue_head_t resp_wq;
	/* current display info */
@@ -201,8 +200,7 @@ struct virtio_gpu_device {

	struct virtio_gpu_fence_driver fence_drv;

	struct idr	ctx_id_idr;
	spinlock_t ctx_id_idr_lock;
	struct ida	ctx_id_ida;

	bool has_virgl_3d;

+4 −14
Original line number Diff line number Diff line
@@ -55,21 +55,13 @@ static void virtio_gpu_config_changed_work_func(struct work_struct *work)
static void virtio_gpu_ctx_id_get(struct virtio_gpu_device *vgdev,
				  uint32_t *resid)
{
	int handle;

	idr_preload(GFP_KERNEL);
	spin_lock(&vgdev->ctx_id_idr_lock);
	handle = idr_alloc(&vgdev->ctx_id_idr, NULL, 1, 0, 0);
	spin_unlock(&vgdev->ctx_id_idr_lock);
	idr_preload_end();
	int handle = ida_alloc_min(&vgdev->ctx_id_ida, 1, GFP_KERNEL);
	*resid = handle;
}

static void virtio_gpu_ctx_id_put(struct virtio_gpu_device *vgdev, uint32_t id)
{
	spin_lock(&vgdev->ctx_id_idr_lock);
	idr_remove(&vgdev->ctx_id_idr, id);
	spin_unlock(&vgdev->ctx_id_idr_lock);
	ida_free(&vgdev->ctx_id_ida, id);
}

static void virtio_gpu_context_create(struct virtio_gpu_device *vgdev,
@@ -151,10 +143,8 @@ int virtio_gpu_driver_load(struct drm_device *dev, unsigned long flags)
	vgdev->dev = dev->dev;

	spin_lock_init(&vgdev->display_info_lock);
	spin_lock_init(&vgdev->ctx_id_idr_lock);
	idr_init(&vgdev->ctx_id_idr);
	spin_lock_init(&vgdev->resource_idr_lock);
	idr_init(&vgdev->resource_idr);
	ida_init(&vgdev->ctx_id_ida);
	ida_init(&vgdev->resource_ida);
	init_waitqueue_head(&vgdev->resp_wq);
	virtio_gpu_init_vq(&vgdev->ctrlq, virtio_gpu_dequeue_ctrl_func);
	virtio_gpu_init_vq(&vgdev->cursorq, virtio_gpu_dequeue_cursor_func);
+2 −10
Original line number Diff line number Diff line
@@ -28,21 +28,13 @@
static void virtio_gpu_resource_id_get(struct virtio_gpu_device *vgdev,
				       uint32_t *resid)
{
	int handle;

	idr_preload(GFP_KERNEL);
	spin_lock(&vgdev->resource_idr_lock);
	handle = idr_alloc(&vgdev->resource_idr, NULL, 1, 0, GFP_NOWAIT);
	spin_unlock(&vgdev->resource_idr_lock);
	idr_preload_end();
	int handle = ida_alloc_min(&vgdev->resource_ida, 1, GFP_KERNEL);
	*resid = handle;
}

static void virtio_gpu_resource_id_put(struct virtio_gpu_device *vgdev, uint32_t id)
{
	spin_lock(&vgdev->resource_idr_lock);
	idr_remove(&vgdev->resource_idr, id);
	spin_unlock(&vgdev->resource_idr_lock);
	ida_free(&vgdev->resource_ida, id);
}

static void virtio_gpu_ttm_bo_destroy(struct ttm_buffer_object *tbo)