Module Name: src Committed By: nat Date: Sun May 14 10:08:49 UTC 2017
Modified Files: src/sys/dev: audio.c Log Message: Restore the use of sc_intr_lock as it was in rev 1.334. The ring buffer pages are now wired so the use of the interrupt lock won't cause panics. Ok riastradh@. To generate a diff of this commit: cvs rdiff -u -r1.344 -r1.345 src/sys/dev/audio.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/dev/audio.c diff -u src/sys/dev/audio.c:1.344 src/sys/dev/audio.c:1.345 --- src/sys/dev/audio.c:1.344 Sun May 14 10:01:34 2017 +++ src/sys/dev/audio.c Sun May 14 10:08:49 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: audio.c,v 1.344 2017/05/14 10:01:34 nat Exp $ */ +/* $NetBSD: audio.c,v 1.345 2017/05/14 10:08:49 nat Exp $ */ /*- * Copyright (c) 2016 Nathanial Sloss <nathanialsl...@yahoo.com.au> @@ -148,7 +148,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: audio.c,v 1.344 2017/05/14 10:01:34 nat Exp $"); +__KERNEL_RCSID(0, "$NetBSD: audio.c,v 1.345 2017/05/14 10:08:49 nat Exp $"); #include "audio.h" #if NAUDIO > 0 @@ -3858,22 +3858,20 @@ audio_mix(void *v) cc = blksize - (inp - cb->s.start) % blksize; if (sc->sc_writeme == false) { DPRINTFN(3, ("MIX RING EMPTY - INSERT SILENCE\n")); - mutex_exit(sc->sc_intr_lock); audio_fill_silence(&vc->sc_mpr.s.param, inp, cc); - mutex_enter(sc->sc_intr_lock); sc->sc_pr.drops += cc; } else cc = blksize; cb->s.inp = audio_stream_add_inp(&cb->s, cb->s.inp, cc); cc = blksize; cc1 = sc->sc_pr.s.end - sc->sc_pr.s.inp; - mutex_exit(sc->sc_intr_lock); if (cc1 < cc) { audio_fill_silence(&vc->sc_mpr.s.param, sc->sc_pr.s.inp, cc1); cc -= cc1; audio_fill_silence(&vc->sc_mpr.s.param, sc->sc_pr.s.start, cc); } else audio_fill_silence(&vc->sc_mpr.s.param, sc->sc_pr.s.inp, cc); + mutex_exit(sc->sc_intr_lock); kpreempt_disable(); if (sc->schedule_wih == true) @@ -3957,12 +3955,14 @@ audio_upmix(void *v) cc = blksize; if (cb->s.inp + blksize > cb->s.end) cc = cb->s.end - cb->s.inp; + mutex_enter(sc->sc_intr_lock); memcpy(cb->s.inp, sc->sc_rr.s.start, cc); if (cc < blksize && cc != 0) { cc1 = cc; cc = blksize - cc; memcpy(cb->s.start, sc->sc_rr.s.start + cc1, cc); } + mutex_exit(sc->sc_intr_lock); cc = blksize; recswvol_func(sc, cb, blksize, vc);