Module Name: src
Committed By: jmcneill
Date: Tue Nov 4 11:27:31 UTC 2014
Modified Files:
src/sys/external/bsd/drm2/drm: drm_drv.c
src/sys/external/bsd/drm2/include/drm: drm_irq_netbsd.h
src/sys/external/bsd/drm2/include/linux: spinlock.h ww_mutex.h
src/sys/external/bsd/drm2/linux: linux_idr.c linux_kmap.c linux_work.c
linux_writecomb.c
src/sys/external/bsd/drm2/pci: drm_pci.c
Log Message:
This code should be MP-safe. Use IPL_SCHED in place of IPL_DRM/IPL_VM and set
D_MPSAFE flag in cdevsw.
To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/external/bsd/drm2/drm/drm_drv.c
cvs rdiff -u -r1.2 -r1.3 \
src/sys/external/bsd/drm2/include/drm/drm_irq_netbsd.h
cvs rdiff -u -r1.4 -r1.5 src/sys/external/bsd/drm2/include/linux/spinlock.h
cvs rdiff -u -r1.7 -r1.8 src/sys/external/bsd/drm2/include/linux/ww_mutex.h
cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/drm2/linux/linux_idr.c
cvs rdiff -u -r1.10 -r1.11 src/sys/external/bsd/drm2/linux/linux_kmap.c
cvs rdiff -u -r1.8 -r1.9 src/sys/external/bsd/drm2/linux/linux_work.c
cvs rdiff -u -r1.1 -r1.2 src/sys/external/bsd/drm2/linux/linux_writecomb.c
cvs rdiff -u -r1.6 -r1.7 src/sys/external/bsd/drm2/pci/drm_pci.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/drm/drm_drv.c
diff -u src/sys/external/bsd/drm2/drm/drm_drv.c:1.9 src/sys/external/bsd/drm2/drm/drm_drv.c:1.10
--- src/sys/external/bsd/drm2/drm/drm_drv.c:1.9 Sat Jul 26 21:15:45 2014
+++ src/sys/external/bsd/drm2/drm/drm_drv.c Tue Nov 4 11:27:31 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: drm_drv.c,v 1.9 2014/07/26 21:15:45 riastradh Exp $ */
+/* $NetBSD: drm_drv.c,v 1.10 2014/11/04 11:27:31 jmcneill Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: drm_drv.c,v 1.9 2014/07/26 21:15:45 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_drv.c,v 1.10 2014/11/04 11:27:31 jmcneill Exp $");
#include <sys/param.h>
#include <sys/types.h>
@@ -234,8 +234,7 @@ const struct cdevsw drm_cdevsw = {
.d_kqfilter = nokqfilter,
.d_discard = nodiscard,
/* XXX was D_TTY | D_NEGOFFSAFE */
- /* XXX Add D_MPSAFE some day... */
- .d_flag = D_NEGOFFSAFE,
+ .d_flag = D_NEGOFFSAFE | D_MPSAFE,
};
static const struct fileops drm_fileops = {
Index: src/sys/external/bsd/drm2/include/drm/drm_irq_netbsd.h
diff -u src/sys/external/bsd/drm2/include/drm/drm_irq_netbsd.h:1.2 src/sys/external/bsd/drm2/include/drm/drm_irq_netbsd.h:1.3
--- src/sys/external/bsd/drm2/include/drm/drm_irq_netbsd.h:1.2 Tue Mar 18 18:20:43 2014
+++ src/sys/external/bsd/drm2/include/drm/drm_irq_netbsd.h Tue Nov 4 11:27:31 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: drm_irq_netbsd.h,v 1.2 2014/03/18 18:20:43 riastradh Exp $ */
+/* $NetBSD: drm_irq_netbsd.h,v 1.3 2014/11/04 11:27:31 jmcneill Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -41,6 +41,4 @@ typedef int irqreturn_t;
#define IRQF_SHARED 0 /* XXX */
-#define IPL_DRM IPL_TTY /* XXX */
-
#endif /* _DRM_DRM_IRQ_NETBSD_H_ */
Index: src/sys/external/bsd/drm2/include/linux/spinlock.h
diff -u src/sys/external/bsd/drm2/include/linux/spinlock.h:1.4 src/sys/external/bsd/drm2/include/linux/spinlock.h:1.5
--- src/sys/external/bsd/drm2/include/linux/spinlock.h:1.4 Sat Aug 23 08:03:33 2014
+++ src/sys/external/bsd/drm2/include/linux/spinlock.h Tue Nov 4 11:27:31 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: spinlock.h,v 1.4 2014/08/23 08:03:33 riastradh Exp $ */
+/* $NetBSD: spinlock.h,v 1.5 2014/11/04 11:27:31 jmcneill Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -88,8 +88,7 @@ spin_unlock_irqrestore(spinlock_t *spinl
static inline void
spin_lock_init(spinlock_t *spinlock)
{
- /* XXX What's the right IPL? IPL_DRM...? */
- mutex_init(&spinlock->sl_lock, MUTEX_DEFAULT, IPL_VM);
+ mutex_init(&spinlock->sl_lock, MUTEX_DEFAULT, IPL_SCHED);
}
/*
Index: src/sys/external/bsd/drm2/include/linux/ww_mutex.h
diff -u src/sys/external/bsd/drm2/include/linux/ww_mutex.h:1.7 src/sys/external/bsd/drm2/include/linux/ww_mutex.h:1.8
--- src/sys/external/bsd/drm2/include/linux/ww_mutex.h:1.7 Mon Sep 15 20:24:55 2014
+++ src/sys/external/bsd/drm2/include/linux/ww_mutex.h Tue Nov 4 11:27:31 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: ww_mutex.h,v 1.7 2014/09/15 20:24:55 riastradh Exp $ */
+/* $NetBSD: ww_mutex.h,v 1.8 2014/11/04 11:27:31 jmcneill Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -147,7 +147,7 @@ ww_mutex_init(struct ww_mutex *mutex, st
* XXX Apparently Linux takes these with spin locks held. That
* strikes me as a bad idea, but so it is...
*/
- mutex_init(&mutex->wwm_lock, MUTEX_DEFAULT, IPL_VM);
+ mutex_init(&mutex->wwm_lock, MUTEX_DEFAULT, IPL_SCHED);
mutex->wwm_state = WW_UNLOCKED;
mutex->wwm_class = class;
rb_tree_init(&mutex->wwm_waiters, &ww_acquire_ctx_rb_ops);
Index: src/sys/external/bsd/drm2/linux/linux_idr.c
diff -u src/sys/external/bsd/drm2/linux/linux_idr.c:1.3 src/sys/external/bsd/drm2/linux/linux_idr.c:1.4
--- src/sys/external/bsd/drm2/linux/linux_idr.c:1.3 Wed Jul 16 20:56:25 2014
+++ src/sys/external/bsd/drm2/linux/linux_idr.c Tue Nov 4 11:27:31 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_idr.c,v 1.3 2014/07/16 20:56:25 riastradh Exp $ */
+/* $NetBSD: linux_idr.c,v 1.4 2014/11/04 11:27:31 jmcneill Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_idr.c,v 1.3 2014/07/16 20:56:25 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_idr.c,v 1.4 2014/11/04 11:27:31 jmcneill Exp $");
#include <sys/param.h>
#include <sys/atomic.h>
@@ -58,7 +58,7 @@ int
linux_idr_module_init(void)
{
- mutex_init(&idr_cache.lock, MUTEX_DEFAULT, IPL_VM);
+ mutex_init(&idr_cache.lock, MUTEX_DEFAULT, IPL_SCHED);
SIMPLEQ_INIT(&idr_cache.preloaded_nodes);
SIMPLEQ_INIT(&idr_cache.discarded_nodes);
return 0;
@@ -115,7 +115,7 @@ void
idr_init(struct idr *idr)
{
- mutex_init(&idr->idr_lock, MUTEX_DEFAULT, IPL_VM);
+ mutex_init(&idr->idr_lock, MUTEX_DEFAULT, IPL_SCHED);
rb_tree_init(&idr->idr_tree, &idr_rb_ops);
}
Index: src/sys/external/bsd/drm2/linux/linux_kmap.c
diff -u src/sys/external/bsd/drm2/linux/linux_kmap.c:1.10 src/sys/external/bsd/drm2/linux/linux_kmap.c:1.11
--- src/sys/external/bsd/drm2/linux/linux_kmap.c:1.10 Wed Aug 27 16:41:50 2014
+++ src/sys/external/bsd/drm2/linux/linux_kmap.c Tue Nov 4 11:27:31 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_kmap.c,v 1.10 2014/08/27 16:41:50 riastradh Exp $ */
+/* $NetBSD: linux_kmap.c,v 1.11 2014/11/04 11:27:31 jmcneill Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_kmap.c,v 1.10 2014/08/27 16:41:50 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_kmap.c,v 1.11 2014/11/04 11:27:31 jmcneill Exp $");
#include <sys/types.h>
#include <sys/kmem.h>
@@ -104,8 +104,8 @@ int
linux_kmap_init(void)
{
- /* IPL_VM since interrupt handlers use kmap_atomic. */
- mutex_init(&linux_kmap_atomic_lock, MUTEX_DEFAULT, IPL_VM);
+ /* IPL_SCHED since interrupt handlers use kmap_atomic. */
+ mutex_init(&linux_kmap_atomic_lock, MUTEX_DEFAULT, IPL_SCHED);
linux_kmap_atomic_vaddr = uvm_km_alloc(kernel_map, PAGE_SIZE, 0,
(UVM_KMF_VAONLY | UVM_KMF_WAITVA));
Index: src/sys/external/bsd/drm2/linux/linux_work.c
diff -u src/sys/external/bsd/drm2/linux/linux_work.c:1.8 src/sys/external/bsd/drm2/linux/linux_work.c:1.9
--- src/sys/external/bsd/drm2/linux/linux_work.c:1.8 Fri Aug 29 15:22:18 2014
+++ src/sys/external/bsd/drm2/linux/linux_work.c Tue Nov 4 11:27:31 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_work.c,v 1.8 2014/08/29 15:22:18 riastradh Exp $ */
+/* $NetBSD: linux_work.c,v 1.9 2014/11/04 11:27:31 jmcneill Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_work.c,v 1.8 2014/08/29 15:22:18 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_work.c,v 1.9 2014/11/04 11:27:31 jmcneill Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -123,13 +123,13 @@ alloc_ordered_workqueue(const char *name
wq = kmem_alloc(sizeof(*wq), KM_SLEEP);
error = workqueue_create(&wq->wq_workqueue, name, &linux_worker,
- wq, PRI_NONE, IPL_VM, flags);
+ wq, PRI_NONE, IPL_SCHED, flags);
if (error) {
kmem_free(wq, sizeof(*wq));
return NULL;
}
- mutex_init(&wq->wq_lock, MUTEX_DEFAULT, IPL_VM);
+ mutex_init(&wq->wq_lock, MUTEX_DEFAULT, IPL_SCHED);
cv_init(&wq->wq_cv, name);
TAILQ_INIT(&wq->wq_delayed);
wq->wq_current_work = NULL;
Index: src/sys/external/bsd/drm2/linux/linux_writecomb.c
diff -u src/sys/external/bsd/drm2/linux/linux_writecomb.c:1.1 src/sys/external/bsd/drm2/linux/linux_writecomb.c:1.2
--- src/sys/external/bsd/drm2/linux/linux_writecomb.c:1.1 Wed Jul 16 20:56:25 2014
+++ src/sys/external/bsd/drm2/linux/linux_writecomb.c Tue Nov 4 11:27:31 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_writecomb.c,v 1.1 2014/07/16 20:56:25 riastradh Exp $ */
+/* $NetBSD: linux_writecomb.c,v 1.2 2014/11/04 11:27:31 jmcneill Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_writecomb.c,v 1.1 2014/07/16 20:56:25 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_writecomb.c,v 1.2 2014/11/04 11:27:31 jmcneill Exp $");
#ifdef _KERNEL_OPT
#include "opt_mtrr.h"
@@ -53,7 +53,7 @@ int
linux_writecomb_init(void)
{
- mutex_init(&linux_writecomb.lock, MUTEX_DEFAULT, IPL_VM);
+ mutex_init(&linux_writecomb.lock, MUTEX_DEFAULT, IPL_SCHED);
idr_init(&linux_writecomb.idr);
return 0;
Index: src/sys/external/bsd/drm2/pci/drm_pci.c
diff -u src/sys/external/bsd/drm2/pci/drm_pci.c:1.6 src/sys/external/bsd/drm2/pci/drm_pci.c:1.7
--- src/sys/external/bsd/drm2/pci/drm_pci.c:1.6 Sat Jul 26 07:53:14 2014
+++ src/sys/external/bsd/drm2/pci/drm_pci.c Tue Nov 4 11:27:31 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: drm_pci.c,v 1.6 2014/07/26 07:53:14 riastradh Exp $ */
+/* $NetBSD: drm_pci.c,v 1.7 2014/11/04 11:27:31 jmcneill Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: drm_pci.c,v 1.6 2014/07/26 07:53:14 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_pci.c,v 1.7 2014/11/04 11:27:31 jmcneill Exp $");
#include <sys/types.h>
#include <sys/errno.h>
@@ -248,7 +248,7 @@ drm_pci_irq_install(struct drm_device *d
return -ENOENT;
intrstr = pci_intr_string(pa->pa_pc, ih, intrbuf, sizeof(intrbuf));
- ih_cookie = pci_intr_establish(pa->pa_pc, ih, IPL_DRM, handler, arg);
+ ih_cookie = pci_intr_establish(pa->pa_pc, ih, IPL_SCHED, handler, arg);
if (ih_cookie == NULL) {
aprint_error_dev(dev->dev,
"couldn't establish interrupt at %s (%s)\n",