Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/external/bsd/drm2 due to hangs seen by several folks, fo...



details:   https://anonhg.NetBSD.org/src/rev/a2524e7d9713
branches:  trunk
changeset: 805413:a2524e7d9713
user:      mrg <mrg%NetBSD.org@localhost>
date:      Thu Jan 01 01:15:42 2015 +0000

description:
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.

diffstat:

 sys/external/bsd/drm2/drm/drm_drv.c                |  7 ++++---
 sys/external/bsd/drm2/include/drm/drm_irq_netbsd.h |  4 +++-
 sys/external/bsd/drm2/include/linux/spinlock.h     |  5 +++--
 sys/external/bsd/drm2/include/linux/ww_mutex.h     |  4 ++--
 sys/external/bsd/drm2/linux/linux_idr.c            |  8 ++++----
 sys/external/bsd/drm2/linux/linux_kmap.c           |  8 ++++----
 sys/external/bsd/drm2/linux/linux_work.c           |  8 ++++----
 sys/external/bsd/drm2/linux/linux_writecomb.c      |  6 +++---
 sys/external/bsd/drm2/pci/drm_pci.c                |  6 +++---
 9 files changed, 30 insertions(+), 26 deletions(-)

diffs (234 lines):

diff -r 241e7a1e5ab6 -r a2524e7d9713 sys/external/bsd/drm2/drm/drm_drv.c
--- a/sys/external/bsd/drm2/drm/drm_drv.c       Wed Dec 31 23:38:42 2014 +0000
+++ b/sys/external/bsd/drm2/drm/drm_drv.c       Thu Jan 01 01:15:42 2015 +0000
@@ -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 @@
        .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 = {
diff -r 241e7a1e5ab6 -r a2524e7d9713 sys/external/bsd/drm2/include/drm/drm_irq_netbsd.h
--- a/sys/external/bsd/drm2/include/drm/drm_irq_netbsd.h        Wed Dec 31 23:38:42 2014 +0000
+++ b/sys/external/bsd/drm2/include/drm/drm_irq_netbsd.h        Thu Jan 01 01:15:42 2015 +0000
@@ -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 @@
 
 #define        IRQF_SHARED     0       /* XXX */
 
+#define        IPL_DRM         IPL_TTY /* XXX */
+
 #endif  /* _DRM_DRM_IRQ_NETBSD_H_ */
diff -r 241e7a1e5ab6 -r a2524e7d9713 sys/external/bsd/drm2/include/linux/spinlock.h
--- a/sys/external/bsd/drm2/include/linux/spinlock.h    Wed Dec 31 23:38:42 2014 +0000
+++ b/sys/external/bsd/drm2/include/linux/spinlock.h    Thu Jan 01 01:15:42 2015 +0000
@@ -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 @@
 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);
 }
 
 /*
diff -r 241e7a1e5ab6 -r a2524e7d9713 sys/external/bsd/drm2/include/linux/ww_mutex.h
--- a/sys/external/bsd/drm2/include/linux/ww_mutex.h    Wed Dec 31 23:38:42 2014 +0000
+++ b/sys/external/bsd/drm2/include/linux/ww_mutex.h    Thu Jan 01 01:15:42 2015 +0000
@@ -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 @@
         * 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);
diff -r 241e7a1e5ab6 -r a2524e7d9713 sys/external/bsd/drm2/linux/linux_idr.c
--- a/sys/external/bsd/drm2/linux/linux_idr.c   Wed Dec 31 23:38:42 2014 +0000
+++ b/sys/external/bsd/drm2/linux/linux_idr.c   Thu Jan 01 01:15:42 2015 +0000
@@ -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 @@
 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 @@
 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);
 }
 
diff -r 241e7a1e5ab6 -r a2524e7d9713 sys/external/bsd/drm2/linux/linux_kmap.c
--- a/sys/external/bsd/drm2/linux/linux_kmap.c  Wed Dec 31 23:38:42 2014 +0000
+++ b/sys/external/bsd/drm2/linux/linux_kmap.c  Thu Jan 01 01:15:42 2015 +0000
@@ -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 @@
 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));
diff -r 241e7a1e5ab6 -r a2524e7d9713 sys/external/bsd/drm2/linux/linux_work.c
--- a/sys/external/bsd/drm2/linux/linux_work.c  Wed Dec 31 23:38:42 2014 +0000
+++ b/sys/external/bsd/drm2/linux/linux_work.c  Thu Jan 01 01:15:42 2015 +0000
@@ -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 @@
 
        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;
diff -r 241e7a1e5ab6 -r a2524e7d9713 sys/external/bsd/drm2/linux/linux_writecomb.c
--- a/sys/external/bsd/drm2/linux/linux_writecomb.c     Wed Dec 31 23:38:42 2014 +0000
+++ b/sys/external/bsd/drm2/linux/linux_writecomb.c     Thu Jan 01 01:15:42 2015 +0000
@@ -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 @@
 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;
diff -r 241e7a1e5ab6 -r a2524e7d9713 sys/external/bsd/drm2/pci/drm_pci.c
--- a/sys/external/bsd/drm2/pci/drm_pci.c       Wed Dec 31 23:38:42 2014 +0000
+++ b/sys/external/bsd/drm2/pci/drm_pci.c       Thu Jan 01 01:15:42 2015 +0000
@@ -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 @@
                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",



Home | Main Index | Thread Index | Old Index