Module Name:    src
Committed By:   mrg
Date:           Thu Jan  1 01:15:43 UTC 2015

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:
due to hangs seen by several folks, for now revert:
http://mail-index.netbsd.org/source-changes/2014/11/04/msg060120.html

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.12 -r1.13 src/sys/external/bsd/drm2/drm/drm_drv.c
cvs rdiff -u -r1.3 -r1.4 \
    src/sys/external/bsd/drm2/include/drm/drm_irq_netbsd.h
cvs rdiff -u -r1.5 -r1.6 src/sys/external/bsd/drm2/include/linux/spinlock.h
cvs rdiff -u -r1.8 -r1.9 src/sys/external/bsd/drm2/include/linux/ww_mutex.h
cvs rdiff -u -r1.4 -r1.5 src/sys/external/bsd/drm2/linux/linux_idr.c
cvs rdiff -u -r1.11 -r1.12 src/sys/external/bsd/drm2/linux/linux_kmap.c
cvs rdiff -u -r1.9 -r1.10 src/sys/external/bsd/drm2/linux/linux_work.c
cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/linux/linux_writecomb.c
cvs rdiff -u -r1.8 -r1.9 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.12 src/sys/external/bsd/drm2/drm/drm_drv.c:1.13
--- src/sys/external/bsd/drm2/drm/drm_drv.c:1.12	Sun Dec 14 23:48:58 2014
+++ src/sys/external/bsd/drm2/drm/drm_drv.c	Thu Jan  1 01:15:42 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: drm_drv.c,v 1.12 2014/12/14 23:48:58 chs Exp $	*/
+/*	$NetBSD: drm_drv.c,v 1.13 2015/01/01 01:15:42 mrg 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.12 2014/12/14 23:48:58 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_drv.c,v 1.13 2015/01/01 01:15:42 mrg Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -231,7 +231,8 @@ const struct cdevsw drm_cdevsw = {
 	.d_kqfilter = nokqfilter,
 	.d_discard = nodiscard,
 	/* XXX was D_TTY | D_NEGOFFSAFE */
-	.d_flag = D_NEGOFFSAFE | D_MPSAFE,
+	/* XXX Add D_MPSAFE some day... */
+	.d_flag = D_NEGOFFSAFE,
 };
 
 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.3 src/sys/external/bsd/drm2/include/drm/drm_irq_netbsd.h:1.4
--- src/sys/external/bsd/drm2/include/drm/drm_irq_netbsd.h:1.3	Tue Nov  4 11:27:31 2014
+++ src/sys/external/bsd/drm2/include/drm/drm_irq_netbsd.h	Thu Jan  1 01:15:42 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: drm_irq_netbsd.h,v 1.3 2014/11/04 11:27:31 jmcneill Exp $	*/
+/*	$NetBSD: drm_irq_netbsd.h,v 1.4 2015/01/01 01:15:42 mrg Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -41,4 +41,6 @@ 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.5 src/sys/external/bsd/drm2/include/linux/spinlock.h:1.6
--- src/sys/external/bsd/drm2/include/linux/spinlock.h:1.5	Tue Nov  4 11:27:31 2014
+++ src/sys/external/bsd/drm2/include/linux/spinlock.h	Thu Jan  1 01:15:42 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: spinlock.h,v 1.5 2014/11/04 11:27:31 jmcneill Exp $	*/
+/*	$NetBSD: spinlock.h,v 1.6 2015/01/01 01:15:42 mrg Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -88,7 +88,8 @@ spin_unlock_irqrestore(spinlock_t *spinl
 static inline void
 spin_lock_init(spinlock_t *spinlock)
 {
-	mutex_init(&spinlock->sl_lock, MUTEX_DEFAULT, IPL_SCHED);
+	/* XXX What's the right IPL?  IPL_DRM...?  */
+	mutex_init(&spinlock->sl_lock, MUTEX_DEFAULT, IPL_VM);
 }
 
 /*

Index: src/sys/external/bsd/drm2/include/linux/ww_mutex.h
diff -u src/sys/external/bsd/drm2/include/linux/ww_mutex.h:1.8 src/sys/external/bsd/drm2/include/linux/ww_mutex.h:1.9
--- src/sys/external/bsd/drm2/include/linux/ww_mutex.h:1.8	Tue Nov  4 11:27:31 2014
+++ src/sys/external/bsd/drm2/include/linux/ww_mutex.h	Thu Jan  1 01:15:42 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: ww_mutex.h,v 1.8 2014/11/04 11:27:31 jmcneill Exp $	*/
+/*	$NetBSD: ww_mutex.h,v 1.9 2015/01/01 01:15:42 mrg 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_SCHED);
+	mutex_init(&mutex->wwm_lock, MUTEX_DEFAULT, IPL_VM);
 	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.4 src/sys/external/bsd/drm2/linux/linux_idr.c:1.5
--- src/sys/external/bsd/drm2/linux/linux_idr.c:1.4	Tue Nov  4 11:27:31 2014
+++ src/sys/external/bsd/drm2/linux/linux_idr.c	Thu Jan  1 01:15:43 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_idr.c,v 1.4 2014/11/04 11:27:31 jmcneill Exp $	*/
+/*	$NetBSD: linux_idr.c,v 1.5 2015/01/01 01:15:43 mrg 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.4 2014/11/04 11:27:31 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_idr.c,v 1.5 2015/01/01 01:15:43 mrg 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_SCHED);
+	mutex_init(&idr_cache.lock, MUTEX_DEFAULT, IPL_VM);
 	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_SCHED);
+	mutex_init(&idr->idr_lock, MUTEX_DEFAULT, IPL_VM);
 	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.11 src/sys/external/bsd/drm2/linux/linux_kmap.c:1.12
--- src/sys/external/bsd/drm2/linux/linux_kmap.c:1.11	Tue Nov  4 11:27:31 2014
+++ src/sys/external/bsd/drm2/linux/linux_kmap.c	Thu Jan  1 01:15:43 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_kmap.c,v 1.11 2014/11/04 11:27:31 jmcneill Exp $	*/
+/*	$NetBSD: linux_kmap.c,v 1.12 2015/01/01 01:15:43 mrg 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.11 2014/11/04 11:27:31 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_kmap.c,v 1.12 2015/01/01 01:15:43 mrg Exp $");
 
 #include <sys/types.h>
 #include <sys/kmem.h>
@@ -104,8 +104,8 @@ int
 linux_kmap_init(void)
 {
 
-	/* IPL_SCHED since interrupt handlers use kmap_atomic.  */
-	mutex_init(&linux_kmap_atomic_lock, MUTEX_DEFAULT, IPL_SCHED);
+	/* IPL_VM since interrupt handlers use kmap_atomic.  */
+	mutex_init(&linux_kmap_atomic_lock, MUTEX_DEFAULT, IPL_VM);
 
 	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.9 src/sys/external/bsd/drm2/linux/linux_work.c:1.10
--- src/sys/external/bsd/drm2/linux/linux_work.c:1.9	Tue Nov  4 11:27:31 2014
+++ src/sys/external/bsd/drm2/linux/linux_work.c	Thu Jan  1 01:15:43 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_work.c,v 1.9 2014/11/04 11:27:31 jmcneill Exp $	*/
+/*	$NetBSD: linux_work.c,v 1.10 2015/01/01 01:15:43 mrg 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.9 2014/11/04 11:27:31 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_work.c,v 1.10 2015/01/01 01:15:43 mrg 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_SCHED, flags);
+	    wq, PRI_NONE, IPL_VM, flags);
 	if (error) {
 		kmem_free(wq, sizeof(*wq));
 		return NULL;
 	}
 
-	mutex_init(&wq->wq_lock, MUTEX_DEFAULT, IPL_SCHED);
+	mutex_init(&wq->wq_lock, MUTEX_DEFAULT, IPL_VM);
 	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.2 src/sys/external/bsd/drm2/linux/linux_writecomb.c:1.3
--- src/sys/external/bsd/drm2/linux/linux_writecomb.c:1.2	Tue Nov  4 11:27:31 2014
+++ src/sys/external/bsd/drm2/linux/linux_writecomb.c	Thu Jan  1 01:15:43 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_writecomb.c,v 1.2 2014/11/04 11:27:31 jmcneill Exp $	*/
+/*	$NetBSD: linux_writecomb.c,v 1.3 2015/01/01 01:15:43 mrg 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.2 2014/11/04 11:27:31 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_writecomb.c,v 1.3 2015/01/01 01:15:43 mrg 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_SCHED);
+	mutex_init(&linux_writecomb.lock, MUTEX_DEFAULT, IPL_VM);
 	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.8 src/sys/external/bsd/drm2/pci/drm_pci.c:1.9
--- src/sys/external/bsd/drm2/pci/drm_pci.c:1.8	Sat Nov 22 19:18:07 2014
+++ src/sys/external/bsd/drm2/pci/drm_pci.c	Thu Jan  1 01:15:43 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: drm_pci.c,v 1.8 2014/11/22 19:18:07 riastradh Exp $	*/
+/*	$NetBSD: drm_pci.c,v 1.9 2015/01/01 01:15:43 mrg 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.8 2014/11/22 19:18:07 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_pci.c,v 1.9 2015/01/01 01:15:43 mrg Exp $");
 
 #include <sys/types.h>
 #include <sys/errno.h>
@@ -243,7 +243,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_SCHED, handler, arg);
+	ih_cookie = pci_intr_establish(pa->pa_pc, ih, IPL_DRM, handler, arg);
 	if (ih_cookie == NULL) {
 		aprint_error_dev(dev->dev,
 		    "couldn't establish interrupt at %s (%s)\n",

Reply via email to