Module Name: src
Committed By: riastradh
Date: Sun Dec 19 11:06:55 UTC 2021
Modified Files:
src/sys/external/bsd/drm2/dist/drm: drm_connector.c drm_dp_aux_dev.c
drm_mode_object.c
src/sys/external/bsd/drm2/dist/drm/i915: i915_perf.c
src/sys/external/bsd/drm2/dist/drm/i915/gvt: dmabuf.c vgpu.c
src/sys/external/bsd/drm2/dist/drm/vgem: vgem_fence.c
Log Message:
drm: Add idr_preload.
Gone from Linux API -- Linux just assumes that allocation under
mutex, even if it means sleeping, is OK.
To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/external/bsd/drm2/dist/drm/drm_connector.c
cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/dist/drm/drm_dp_aux_dev.c \
src/sys/external/bsd/drm2/dist/drm/drm_mode_object.c
cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/dist/drm/i915/i915_perf.c
cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/dist/drm/i915/gvt/dmabuf.c \
src/sys/external/bsd/drm2/dist/drm/i915/gvt/vgpu.c
cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/dist/drm/vgem/vgem_fence.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/external/bsd/drm2/dist/drm/drm_connector.c
diff -u src/sys/external/bsd/drm2/dist/drm/drm_connector.c:1.5 src/sys/external/bsd/drm2/dist/drm/drm_connector.c:1.6
--- src/sys/external/bsd/drm2/dist/drm/drm_connector.c:1.5 Sun Dec 19 09:51:50 2021
+++ src/sys/external/bsd/drm2/dist/drm/drm_connector.c Sun Dec 19 11:06:54 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: drm_connector.c,v 1.5 2021/12/19 09:51:50 riastradh Exp $ */
+/* $NetBSD: drm_connector.c,v 1.6 2021/12/19 11:06:54 riastradh Exp $ */
/*
* Copyright (c) 2016 Intel Corporation
@@ -23,7 +23,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: drm_connector.c,v 1.5 2021/12/19 09:51:50 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_connector.c,v 1.6 2021/12/19 11:06:54 riastradh Exp $");
#include <drm/drm_connector.h>
#include <drm/drm_edid.h>
@@ -2400,6 +2400,7 @@ struct drm_tile_group *drm_mode_create_t
memcpy(tg->group_data, topology, 8);
tg->dev = dev;
+ idr_preload(GFP_KERNEL);
mutex_lock(&dev->mode_config.idr_mutex);
ret = idr_alloc(&dev->mode_config.tile_idr, tg, 1, 0, GFP_KERNEL);
if (ret >= 0) {
@@ -2410,6 +2411,7 @@ struct drm_tile_group *drm_mode_create_t
}
mutex_unlock(&dev->mode_config.idr_mutex);
+ idr_preload_end();
return tg;
}
EXPORT_SYMBOL(drm_mode_create_tile_group);
Index: src/sys/external/bsd/drm2/dist/drm/drm_dp_aux_dev.c
diff -u src/sys/external/bsd/drm2/dist/drm/drm_dp_aux_dev.c:1.2 src/sys/external/bsd/drm2/dist/drm/drm_dp_aux_dev.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/drm_dp_aux_dev.c:1.2 Sat Dec 18 23:44:57 2021
+++ src/sys/external/bsd/drm2/dist/drm/drm_dp_aux_dev.c Sun Dec 19 11:06:54 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: drm_dp_aux_dev.c,v 1.2 2021/12/18 23:44:57 riastradh Exp $ */
+/* $NetBSD: drm_dp_aux_dev.c,v 1.3 2021/12/19 11:06:54 riastradh Exp $ */
/*
* Copyright © 2015 Intel Corporation
@@ -28,7 +28,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: drm_dp_aux_dev.c,v 1.2 2021/12/18 23:44:57 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_dp_aux_dev.c,v 1.3 2021/12/19 11:06:54 riastradh Exp $");
#include <linux/device.h>
#include <linux/fs.h>
@@ -87,9 +87,11 @@ static struct drm_dp_aux_dev *alloc_drm_
atomic_set(&aux_dev->usecount, 1);
kref_init(&aux_dev->refcount);
+ idr_preload(GFP_KERNEL);
mutex_lock(&aux_idr_mutex);
index = idr_alloc(&aux_idr, aux_dev, 0, DRM_AUX_MINORS, GFP_KERNEL);
mutex_unlock(&aux_idr_mutex);
+ idr_preload_end();
if (index < 0) {
kfree(aux_dev);
return ERR_PTR(index);
Index: src/sys/external/bsd/drm2/dist/drm/drm_mode_object.c
diff -u src/sys/external/bsd/drm2/dist/drm/drm_mode_object.c:1.2 src/sys/external/bsd/drm2/dist/drm/drm_mode_object.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/drm_mode_object.c:1.2 Sat Dec 18 23:44:57 2021
+++ src/sys/external/bsd/drm2/dist/drm/drm_mode_object.c Sun Dec 19 11:06:54 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: drm_mode_object.c,v 1.2 2021/12/18 23:44:57 riastradh Exp $ */
+/* $NetBSD: drm_mode_object.c,v 1.3 2021/12/19 11:06:54 riastradh Exp $ */
/*
* Copyright (c) 2016 Intel Corporation
@@ -23,7 +23,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: drm_mode_object.c,v 1.2 2021/12/18 23:44:57 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_mode_object.c,v 1.3 2021/12/19 11:06:54 riastradh Exp $");
#include <linux/export.h>
#include <linux/uaccess.h>
@@ -49,6 +49,7 @@ int __drm_mode_object_add(struct drm_dev
WARN_ON(!dev->driver->load && dev->registered && !obj_free_cb);
+ idr_preload(GFP_KERNEL);
mutex_lock(&dev->mode_config.idr_mutex);
ret = idr_alloc(&dev->mode_config.object_idr, register_obj ? obj : NULL,
1, 0, GFP_KERNEL);
@@ -65,6 +66,7 @@ int __drm_mode_object_add(struct drm_dev
}
}
mutex_unlock(&dev->mode_config.idr_mutex);
+ idr_preload_end();
return ret < 0 ? ret : 0;
}
Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_perf.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_perf.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/i915_perf.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_perf.c:1.2 Sat Dec 18 23:45:28 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_perf.c Sun Dec 19 11:06:55 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: i915_perf.c,v 1.2 2021/12/18 23:45:28 riastradh Exp $ */
+/* $NetBSD: i915_perf.c,v 1.3 2021/12/19 11:06:55 riastradh Exp $ */
/*
* Copyright © 2015-2016 Intel Corporation
@@ -194,7 +194,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_perf.c,v 1.2 2021/12/18 23:45:28 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_perf.c,v 1.3 2021/12/19 11:06:55 riastradh Exp $");
#include <linux/anon_inodes.h>
#include <linux/sizes.h>
@@ -4080,6 +4080,7 @@ int i915_perf_add_config_ioctl(struct dr
oa_config->flex_regs = regs;
}
+ idr_preload(GFP_KERNEL);
err = mutex_lock_interruptible(&perf->metrics_lock);
if (err)
goto reg_err;
@@ -4112,6 +4113,7 @@ int i915_perf_add_config_ioctl(struct dr
}
mutex_unlock(&perf->metrics_lock);
+ idr_preload_end();
DRM_DEBUG("Added config %s id=%i\n", oa_config->uuid, oa_config->id);
@@ -4119,6 +4121,7 @@ int i915_perf_add_config_ioctl(struct dr
sysfs_err:
mutex_unlock(&perf->metrics_lock);
+ idr_preload_end();
reg_err:
i915_oa_config_put(oa_config);
DRM_DEBUG("Failed to add new OA config\n");
Index: src/sys/external/bsd/drm2/dist/drm/i915/gvt/dmabuf.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gvt/dmabuf.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/gvt/dmabuf.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/gvt/dmabuf.c:1.2 Sat Dec 18 23:45:31 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gvt/dmabuf.c Sun Dec 19 11:06:55 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: dmabuf.c,v 1.2 2021/12/18 23:45:31 riastradh Exp $ */
+/* $NetBSD: dmabuf.c,v 1.3 2021/12/19 11:06:55 riastradh Exp $ */
/*
* Copyright 2017 Intel Corporation. All rights reserved.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dmabuf.c,v 1.2 2021/12/18 23:45:31 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dmabuf.c,v 1.3 2021/12/19 11:06:55 riastradh Exp $");
#include <linux/dma-buf.h>
#include <linux/vfio.h>
@@ -486,7 +486,9 @@ int intel_vgpu_query_plane(struct intel_
dmabuf_obj->vgpu = vgpu;
+ idr_preload(GFP_NOWAIT); /* XXX ??? */
ret = idr_alloc(&vgpu->object_idr, dmabuf_obj, 1, 0, GFP_NOWAIT);
+ idr_preload_end();
if (ret < 0)
goto out_free_info;
gfx_plane_info->dmabuf_id = ret;
Index: src/sys/external/bsd/drm2/dist/drm/i915/gvt/vgpu.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gvt/vgpu.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/gvt/vgpu.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/gvt/vgpu.c:1.2 Sat Dec 18 23:45:31 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gvt/vgpu.c Sun Dec 19 11:06:55 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: vgpu.c,v 1.2 2021/12/18 23:45:31 riastradh Exp $ */
+/* $NetBSD: vgpu.c,v 1.3 2021/12/19 11:06:55 riastradh Exp $ */
/*
* Copyright(c) 2011-2016 Intel Corporation. All rights reserved.
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vgpu.c,v 1.2 2021/12/18 23:45:31 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vgpu.c,v 1.3 2021/12/19 11:06:55 riastradh Exp $");
#include "i915_drv.h"
#include "gvt.h"
@@ -375,8 +375,10 @@ static struct intel_vgpu *__intel_gvt_cr
if (!vgpu)
return ERR_PTR(-ENOMEM);
+ idr_preload(GFP_KERNEL);
ret = idr_alloc(&gvt->vgpu_idr, vgpu, IDLE_VGPU_IDR + 1, GVT_MAX_VGPU,
GFP_KERNEL);
+ idr_preload_end();
if (ret < 0)
goto out_free_vgpu;
Index: src/sys/external/bsd/drm2/dist/drm/vgem/vgem_fence.c
diff -u src/sys/external/bsd/drm2/dist/drm/vgem/vgem_fence.c:1.2 src/sys/external/bsd/drm2/dist/drm/vgem/vgem_fence.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/vgem/vgem_fence.c:1.2 Sat Dec 18 23:45:44 2021
+++ src/sys/external/bsd/drm2/dist/drm/vgem/vgem_fence.c Sun Dec 19 11:06:55 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: vgem_fence.c,v 1.2 2021/12/18 23:45:44 riastradh Exp $ */
+/* $NetBSD: vgem_fence.c,v 1.3 2021/12/19 11:06:55 riastradh Exp $ */
/*
* Copyright 2016 Intel Corporation
@@ -23,7 +23,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vgem_fence.c,v 1.2 2021/12/18 23:45:44 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vgem_fence.c,v 1.3 2021/12/19 11:06:55 riastradh Exp $");
#include <linux/dma-buf.h>
#include <linux/dma-resv.h>
@@ -173,9 +173,11 @@ int vgem_fence_attach_ioctl(struct drm_d
/* Record the fence in our idr for later signaling */
if (ret == 0) {
+ idr_preload(GFP_KERNEL);
mutex_lock(&vfile->fence_mutex);
ret = idr_alloc(&vfile->fence_idr, fence, 1, 0, GFP_KERNEL);
mutex_unlock(&vfile->fence_mutex);
+ idr_preload_end();
if (ret > 0) {
arg->out_fence = ret;
ret = 0;