Source-Changes-HG archive

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

[src/jmcneill-audiomp3]: src/sys complete the port to audiomp: don't forget ...



details:   https://anonhg.NetBSD.org/src/rev/8dee6bb7f2f3
branches:  jmcneill-audiomp3
changeset: 771340:8dee6bb7f2f3
user:      mrg <mrg%NetBSD.org@localhost>
date:      Sun Nov 20 11:41:53 2011 +0000

description:
complete the port to audiomp:  don't forget to take sc_intr_lock in the
hardware interrupt routines.

diffstat:

 sys/arch/amiga/dev/repulse.c |   9 +++++++--
 sys/dev/ebus/cs4231_ebus.c   |  15 +++++++++------
 sys/dev/sbus/cs4231_sbus.c   |  16 ++++++++++------
 3 files changed, 26 insertions(+), 14 deletions(-)

diffs (160 lines):

diff -r 24167d1f5bb0 -r 8dee6bb7f2f3 sys/arch/amiga/dev/repulse.c
--- a/sys/arch/amiga/dev/repulse.c      Sun Nov 20 11:26:35 2011 +0000
+++ b/sys/arch/amiga/dev/repulse.c      Sun Nov 20 11:41:53 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: repulse.c,v 1.17.4.1 2011/11/20 10:27:36 mrg Exp $ */
+/*     $NetBSD: repulse.c,v 1.17.4.2 2011/11/20 11:43:55 mrg Exp $ */
 
 /*-
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: repulse.c,v 1.17.4.1 2011/11/20 10:27:36 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: repulse.c,v 1.17.4.2 2011/11/20 11:43:55 mrg Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -965,6 +965,9 @@
        foundone = 0;
 
        sc = tag;
+
+       mutex_spin_enter(&sc->sc_intr_lock);
+
        bp = sc->sc_boardp;
        status = bp->rhw_status;
 
@@ -984,5 +987,7 @@
                (*sc->sc_captmore)(sc->sc_captarg);
        }
 
+       mutex_spin_exit(&sc->sc_intr_lock);
+
        return foundone;
 }
diff -r 24167d1f5bb0 -r 8dee6bb7f2f3 sys/dev/ebus/cs4231_ebus.c
--- a/sys/dev/ebus/cs4231_ebus.c        Sun Nov 20 11:26:35 2011 +0000
+++ b/sys/dev/ebus/cs4231_ebus.c        Sun Nov 20 11:41:53 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: cs4231_ebus.c,v 1.34.4.1 2011/11/20 09:40:19 mrg Exp $ */
+/*     $NetBSD: cs4231_ebus.c,v 1.34.4.2 2011/11/20 11:41:53 mrg Exp $ */
 
 /*
  * Copyright (c) 2002 Valeriy E. Ushakov
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cs4231_ebus.c,v 1.34.4.1 2011/11/20 09:40:19 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cs4231_ebus.c,v 1.34.4.2 2011/11/20 11:41:53 mrg Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_sparc_arch.h"
@@ -542,6 +542,8 @@
 
        ebsc = arg;
        sc = &ebsc->sc_cs4231;
+       mutex_spin_enter(&sc->sc_ad1848.sc_intr_lock);
+
        status = ADREAD(&sc->sc_ad1848, AD1848_STATUS);
 
 #ifdef AUDIO_DEBUG
@@ -582,6 +584,7 @@
                ret = 1;
        }
 
+       mutex_spin_exit(&sc->sc_ad1848.sc_intr_lock);
 
        return ret;
 }
@@ -592,10 +595,10 @@
        struct cs4231_softc *sc = cookie;
        struct cs_transfer *t = &sc->sc_playback;
 
-       KERNEL_LOCK(1, NULL);
+       mutex_spin_enter(&sc->sc_ad1848.sc_intr_lock);
        if (t->t_intr != NULL)
                (*t->t_intr)(t->t_arg);
-       KERNEL_UNLOCK_ONE(NULL);
+       mutex_spin_exit(&sc->sc_ad1848.sc_intr_lock);
        return 0;
 }
 
@@ -605,9 +608,9 @@
        struct cs4231_softc *sc = cookie;
        struct cs_transfer *t = &sc->sc_capture;
 
-       KERNEL_LOCK(1, NULL);
+       mutex_spin_enter(&sc->sc_ad1848.sc_intr_lock);
        if (t->t_intr != NULL)
                (*t->t_intr)(t->t_arg);
-       KERNEL_UNLOCK_ONE(NULL);
+       mutex_spin_exit(&sc->sc_ad1848.sc_intr_lock);
        return 0;
 }
diff -r 24167d1f5bb0 -r 8dee6bb7f2f3 sys/dev/sbus/cs4231_sbus.c
--- a/sys/dev/sbus/cs4231_sbus.c        Sun Nov 20 11:26:35 2011 +0000
+++ b/sys/dev/sbus/cs4231_sbus.c        Sun Nov 20 11:41:53 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: cs4231_sbus.c,v 1.48.4.1 2011/11/20 09:40:19 mrg Exp $ */
+/*     $NetBSD: cs4231_sbus.c,v 1.48.4.2 2011/11/20 11:41:53 mrg Exp $ */
 
 /*-
  * Copyright (c) 1998, 1999, 2002, 2007 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cs4231_sbus.c,v 1.48.4.1 2011/11/20 09:40:19 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cs4231_sbus.c,v 1.48.4.2 2011/11/20 11:41:53 mrg Exp $");
 
 #include "audio.h"
 #if NAUDIO > 0
@@ -516,6 +516,8 @@
        if ((csr & APC_INTR_MASK) == 0) /* any interrupt pedning? */
                return 0;
 
+       mutex_spin_enter(&sc->sc_ad1848.sc_intr_lock);
+
        /* write back DMA status to clear interrupt */
        bus_space_write_4(sbsc->sc_bt, sbsc->sc_bh, APC_DMA_CSR, csr);
        ++sc->sc_intrcnt.ev_count;
@@ -596,6 +598,8 @@
                /* evcnt? */
        }
 
+       mutex_spin_exit(&sc->sc_ad1848.sc_intr_lock);
+
        return 1;
 }
 
@@ -605,11 +609,11 @@
        struct cs4231_softc *sc = cookie;
        struct cs_transfer *t;
 
-       KERNEL_LOCK(1, NULL);
+       mutex_spin_enter(&sc->sc_ad1848.sc_intr_lock);
        t = &sc->sc_playback;
        if (t->t_intr != NULL)
                (*t->t_intr)(t->t_arg);
-       KERNEL_UNLOCK_ONE(NULL);
+       mutex_spin_exit(&sc->sc_ad1848.sc_intr_lock);
        return 0;
 }
 
@@ -619,11 +623,11 @@
        struct cs4231_softc *sc = cookie;
        struct cs_transfer *t;
 
-       KERNEL_LOCK(1, NULL);
+       mutex_spin_enter(&sc->sc_ad1848.sc_intr_lock);
        t = &sc->sc_capture;
        if (t->t_intr != NULL)
                (*t->t_intr)(t->t_arg);
-       KERNEL_UNLOCK_ONE(NULL);
+       mutex_spin_exit(&sc->sc_ad1848.sc_intr_lock);
        return 0;
 }
 



Home | Main Index | Thread Index | Old Index