Module Name: src Committed By: riastradh Date: Sun Dec 19 12:30:05 UTC 2021
Modified Files: src/sys/external/bsd/drm2/dist/drm: drm_auth.c drm_bufs.c drm_context.c drm_legacy_misc.c src/sys/external/bsd/drm2/drm: drm_lock.c drm_scatter.c files.drmkms src/sys/external/bsd/drm2/include/linux: io.h seq_file.h Log Message: drm: Make some legacy UMS crap build. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/external/bsd/drm2/dist/drm/drm_auth.c cvs rdiff -u -r1.15 -r1.16 src/sys/external/bsd/drm2/dist/drm/drm_bufs.c cvs rdiff -u -r1.8 -r1.9 src/sys/external/bsd/drm2/dist/drm/drm_context.c cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/dist/drm/drm_legacy_misc.c cvs rdiff -u -r1.12 -r1.13 src/sys/external/bsd/drm2/drm/drm_lock.c cvs rdiff -u -r1.8 -r1.9 src/sys/external/bsd/drm2/drm/drm_scatter.c cvs rdiff -u -r1.69 -r1.70 src/sys/external/bsd/drm2/drm/files.drmkms cvs rdiff -u -r1.7 -r1.8 src/sys/external/bsd/drm2/include/linux/io.h cvs rdiff -u -r1.4 -r1.5 src/sys/external/bsd/drm2/include/linux/seq_file.h 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_auth.c diff -u src/sys/external/bsd/drm2/dist/drm/drm_auth.c:1.5 src/sys/external/bsd/drm2/dist/drm/drm_auth.c:1.6 --- src/sys/external/bsd/drm2/dist/drm/drm_auth.c:1.5 Sat Dec 18 23:44:57 2021 +++ src/sys/external/bsd/drm2/dist/drm/drm_auth.c Sun Dec 19 12:30:04 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_auth.c,v 1.5 2021/12/18 23:44:57 riastradh Exp $ */ +/* $NetBSD: drm_auth.c,v 1.6 2021/12/19 12:30:04 riastradh Exp $ */ /* * Created: Tue Feb 2 08:37:54 1999 by fa...@valinux.com @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_auth.c,v 1.5 2021/12/18 23:44:57 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_auth.c,v 1.6 2021/12/19 12:30:04 riastradh Exp $"); #include <linux/slab.h> @@ -348,6 +348,12 @@ static void drm_master_destroy(struct kr idr_destroy(&master->leases); idr_destroy(&master->lessee_idr); +#ifdef CONFIG_DRM_LEGACY + /* XXX drm_master_legacy_init unwind */ + DRM_DESTROY_WAITQUEUE(&master->lock.lock_queue); + spin_lock_destroy(&master->lock.spinlock); +#endif + kfree(master->unique); kfree(master); } Index: src/sys/external/bsd/drm2/dist/drm/drm_bufs.c diff -u src/sys/external/bsd/drm2/dist/drm/drm_bufs.c:1.15 src/sys/external/bsd/drm2/dist/drm/drm_bufs.c:1.16 --- src/sys/external/bsd/drm2/dist/drm/drm_bufs.c:1.15 Sun Dec 19 00:55:51 2021 +++ src/sys/external/bsd/drm2/dist/drm/drm_bufs.c Sun Dec 19 12:30:04 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_bufs.c,v 1.15 2021/12/19 00:55:51 riastradh Exp $ */ +/* $NetBSD: drm_bufs.c,v 1.16 2021/12/19 12:30:04 riastradh Exp $ */ /* * Legacy: Generic DRM Buffer Management @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_bufs.c,v 1.15 2021/12/19 00:55:51 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_bufs.c,v 1.16 2021/12/19 12:30:04 riastradh Exp $"); #include <linux/export.h> #include <linux/log2.h> @@ -262,14 +262,14 @@ static int drm_addmap_core(struct drm_de map->offset = (unsigned long)map->handle; if (map->flags & _DRM_CONTAINS_LOCK) { /* Prevent a 2nd X Server from creating a 2nd lock */ - spin_lock(&dev->primary->master->lock.spinlock); + spin_lock(&dev->master->lock.spinlock); if (dev->master->lock.hw_lock != NULL) { spin_unlock(&dev->master->lock.spinlock); vfree(map->handle); kfree(map); return -EBUSY; } - spin_unlock(&dev->primary->master->lock.spinlock); + spin_unlock(&dev->master->lock.spinlock); dev->sigdata.lock = dev->master->lock.hw_lock = map->handle; /* Pointer to lock */ } break; @@ -588,7 +588,7 @@ int drm_legacy_rmmap_locked(struct drm_d * equivalent to having a master set? * * XXX There is copypasta of this in - * drm_fops.c. + * drm_lock.c, drm_legacy_lock_master_cleanup. */ BUG_ON(master->lock.hw_lock == NULL); if (dev->sigdata.lock == master->lock.hw_lock) @@ -1514,8 +1514,13 @@ int drm_legacy_freebufs(struct drm_devic idx = array_index_nospec(idx, dma->buf_count); buf = dma->buflist[idx]; if (buf->file_priv != file_priv) { +#ifdef __NetBSD__ + DRM_ERROR("Process %d freeing buffer not owned\n", + (int)curproc->p_pid); +#else DRM_ERROR("Process %d freeing buffer not owned\n", task_pid_nr(current)); +#endif return -EINVAL; } drm_legacy_free_buffer(dev, buf); Index: src/sys/external/bsd/drm2/dist/drm/drm_context.c diff -u src/sys/external/bsd/drm2/dist/drm/drm_context.c:1.8 src/sys/external/bsd/drm2/dist/drm/drm_context.c:1.9 --- src/sys/external/bsd/drm2/dist/drm/drm_context.c:1.8 Sun Dec 19 00:56:09 2021 +++ src/sys/external/bsd/drm2/dist/drm/drm_context.c Sun Dec 19 12:30:04 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_context.c,v 1.8 2021/12/19 00:56:09 riastradh Exp $ */ +/* $NetBSD: drm_context.c,v 1.9 2021/12/19 12:30:04 riastradh Exp $ */ /* * Legacy: Generic DRM Contexts @@ -31,8 +31,9 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_context.c,v 1.8 2021/12/19 00:56:09 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_context.c,v 1.9 2021/12/19 12:30:04 riastradh Exp $"); +#include <linux/err.h> #include <linux/slab.h> #include <linux/uaccess.h> Index: src/sys/external/bsd/drm2/dist/drm/drm_legacy_misc.c diff -u src/sys/external/bsd/drm2/dist/drm/drm_legacy_misc.c:1.2 src/sys/external/bsd/drm2/dist/drm/drm_legacy_misc.c:1.3 --- src/sys/external/bsd/drm2/dist/drm/drm_legacy_misc.c:1.2 Sat Dec 18 23:44:57 2021 +++ src/sys/external/bsd/drm2/dist/drm/drm_legacy_misc.c Sun Dec 19 12:30:04 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_legacy_misc.c,v 1.2 2021/12/18 23:44:57 riastradh Exp $ */ +/* $NetBSD: drm_legacy_misc.c,v 1.3 2021/12/19 12:30:04 riastradh Exp $ */ /* * \file drm_legacy_misc.c @@ -36,7 +36,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_legacy_misc.c,v 1.2 2021/12/18 23:44:57 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_legacy_misc.c,v 1.3 2021/12/19 12:30:04 riastradh Exp $"); #include <drm/drm_agpsupport.h> #include <drm/drm_device.h> @@ -47,6 +47,8 @@ __KERNEL_RCSID(0, "$NetBSD: drm_legacy_m #include "drm_internal.h" #include "drm_legacy.h" +#include <linux/nbsd-namespace.h> + void drm_legacy_init_members(struct drm_device *dev) { INIT_LIST_HEAD(&dev->ctxlist); @@ -59,6 +61,7 @@ void drm_legacy_init_members(struct drm_ void drm_legacy_destroy_members(struct drm_device *dev) { mutex_destroy(&dev->ctxlist_mutex); + spin_lock_destroy(&dev->buf_lock); } int drm_legacy_setup(struct drm_device * dev) @@ -108,5 +111,5 @@ void drm_legacy_dev_reinit(struct drm_de void drm_master_legacy_init(struct drm_master *master) { spin_lock_init(&master->lock.spinlock); - init_waitqueue_head(&master->lock.lock_queue); + DRM_INIT_WAITQUEUE(&master->lock.lock_queue, "drmlock"); } Index: src/sys/external/bsd/drm2/drm/drm_lock.c diff -u src/sys/external/bsd/drm2/drm/drm_lock.c:1.12 src/sys/external/bsd/drm2/drm/drm_lock.c:1.13 --- src/sys/external/bsd/drm2/drm/drm_lock.c:1.12 Sun Dec 19 09:52:00 2021 +++ src/sys/external/bsd/drm2/drm/drm_lock.c Sun Dec 19 12:30:05 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_lock.c,v 1.12 2021/12/19 09:52:00 riastradh Exp $ */ +/* $NetBSD: drm_lock.c,v 1.13 2021/12/19 12:30:05 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -46,14 +46,18 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_lock.c,v 1.12 2021/12/19 09:52:00 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_lock.c,v 1.13 2021/12/19 12:30:05 riastradh Exp $"); #include <sys/types.h> #include <sys/errno.h> #include <sys/file.h> #include <sys/systm.h> +#include <drm/drm_device.h> +#include <drm/drm_drv.h> +#include <drm/drm_file.h> #include <drm/drm_print.h> + #include "../dist/drm/drm_internal.h" #include "../dist/drm/drm_legacy.h" @@ -216,7 +220,31 @@ out1: spin_unlock(&master->lock.spinlock out0: mutex_lock(&drm_global_mutex); return error; } -#endif + +void +drm_legacy_lock_master_cleanup(struct drm_device *dev, + struct drm_master *master) +{ + + if (!drm_core_check_feature(dev, DRIVER_LEGACY)) + return; + + /* + * XXX Synchronize with _DRM_SHM case of + * drm_legacy_rmmap_locked in drm_bufs.c. + */ + spin_lock(&master->lock.spinlock); + if (master->lock.hw_lock) { + if (dev->sigdata.lock == master->lock.hw_lock) + dev->sigdata.lock = NULL; + master->lock.hw_lock = NULL; + master->lock.file_priv = NULL; + DRM_SPIN_WAKEUP_ALL(&master->lock.lock_queue, + &master->lock.spinlock); + } + spin_unlock(&master->lock.spinlock); +} +#endif /* CONFIG_DRM_LEGACY */ /* * Try to acquire the lock. Whether or not we acquire it, guarantee Index: src/sys/external/bsd/drm2/drm/drm_scatter.c diff -u src/sys/external/bsd/drm2/drm/drm_scatter.c:1.8 src/sys/external/bsd/drm2/drm/drm_scatter.c:1.9 --- src/sys/external/bsd/drm2/drm/drm_scatter.c:1.8 Sun Dec 19 10:32:59 2021 +++ src/sys/external/bsd/drm2/drm/drm_scatter.c Sun Dec 19 12:30:05 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_scatter.c,v 1.8 2021/12/19 10:32:59 riastradh Exp $ */ +/* $NetBSD: drm_scatter.c,v 1.9 2021/12/19 12:30:05 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -30,13 +30,14 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_scatter.c,v 1.8 2021/12/19 10:32:59 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_scatter.c,v 1.9 2021/12/19 12:30:05 riastradh Exp $"); #include <sys/types.h> #include <sys/bus.h> #include <sys/errno.h> #include <sys/systm.h> +#include <linux/mm.h> #include <linux/slab.h> #include <drm/drm_device.h> Index: src/sys/external/bsd/drm2/drm/files.drmkms diff -u src/sys/external/bsd/drm2/drm/files.drmkms:1.69 src/sys/external/bsd/drm2/drm/files.drmkms:1.70 --- src/sys/external/bsd/drm2/drm/files.drmkms:1.69 Sun Dec 19 12:23:16 2021 +++ src/sys/external/bsd/drm2/drm/files.drmkms Sun Dec 19 12:30:05 2021 @@ -1,4 +1,4 @@ -# $NetBSD: files.drmkms,v 1.69 2021/12/19 12:23:16 riastradh Exp $ +# $NetBSD: files.drmkms,v 1.70 2021/12/19 12:30:05 riastradh Exp $ version 20180827 @@ -88,7 +88,7 @@ file external/bsd/drm2/dist/drm/drm_bufs file external/bsd/drm2/dist/drm/drm_context.c drmums file external/bsd/drm2/dist/drm/drm_dma.c drmums file external/bsd/drm2/dist/drm/drm_legacy_misc.c drmums -file external/bsd/drm2/dist/drm/drm_lock.c drmums +file external/bsd/drm2/drm/drm_lock.c drmums file external/bsd/drm2/drm/drm_scatter.c drmums # GPU scheduler Index: src/sys/external/bsd/drm2/include/linux/io.h diff -u src/sys/external/bsd/drm2/include/linux/io.h:1.7 src/sys/external/bsd/drm2/include/linux/io.h:1.8 --- src/sys/external/bsd/drm2/include/linux/io.h:1.7 Sun Dec 19 01:49:21 2021 +++ src/sys/external/bsd/drm2/include/linux/io.h Sun Dec 19 12:30:05 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: io.h,v 1.7 2021/12/19 01:49:21 riastradh Exp $ */ +/* $NetBSD: io.h,v 1.8 2021/12/19 12:30:05 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -33,6 +33,7 @@ #define _LINUX_IO_H_ #include <linux/types.h> +#include <linux/err.h> #include <asm/io.h> Index: src/sys/external/bsd/drm2/include/linux/seq_file.h diff -u src/sys/external/bsd/drm2/include/linux/seq_file.h:1.4 src/sys/external/bsd/drm2/include/linux/seq_file.h:1.5 --- src/sys/external/bsd/drm2/include/linux/seq_file.h:1.4 Sun Dec 19 09:43:34 2021 +++ src/sys/external/bsd/drm2/include/linux/seq_file.h Sun Dec 19 12:30:05 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: seq_file.h,v 1.4 2021/12/19 09:43:34 riastradh Exp $ */ +/* $NetBSD: seq_file.h,v 1.5 2021/12/19 12:30:05 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -32,6 +32,7 @@ #ifndef _LINUX_SEQ_FILE_H_ #define _LINUX_SEQ_FILE_H_ +#include <linux/capability.h> #include <linux/string.h> struct seq_file;