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;