Index: src/sys/dev/audio.c
===================================================================
RCS file: /cvsroot/src/sys/dev/Attic/audio.c,v
retrieving revision 1.357.2.13
diff -u -r1.357.2.13 audio.c
--- src/sys/dev/audio.c	7 Jun 2018 18:24:16 -0000	1.357.2.13
+++ src/sys/dev/audio.c	18 Sep 2019 20:18:48 -0000
@@ -2260,6 +2260,10 @@
 			goto bad;
 	}
 
+	if (sc->sc_usemixer && audio_can_capture(sc))
+		audio_init_ringbuffer(sc, &vc->sc_mrr, AUMODE_PLAY);
+	if (sc->sc_usemixer && audio_can_playback(sc))
+		audio_init_ringbuffer(sc, &vc->sc_mpr, AUMODE_PLAY);
 	if (!sc->sc_usemixer || sc->sc_opens + sc->sc_recopens == 0) {
 		sc->sc_credentials = kauth_cred_get();
 		kauth_cred_hold(sc->sc_credentials);
@@ -3799,6 +3803,8 @@
 		inp = cb->s.inp;
 		cb->stamp += blksize;
 		if (cb->mmapped) {
+			cb->s.inp = audio_stream_add_inp(&cb->s, cb->s.inp,
+			    blksize);
 			DPRINTF(("audio_pint: vc=%p mmapped outp=%p cc=%d "
 				 "inp=%p\n", vc, cb->s.outp, blksize,
 				  cb->s.inp));
@@ -5697,12 +5703,14 @@
 adj_done:								\
 				orig[m] = result;			\
 			}						\
+			orig = &orig[m];				\
+			tomix = &tomix[m];				\
 									\
-			if (&orig[m] >=					\
+			if (orig >=					\
 			    (type *)sc->sc_mixring.sc_mpr.s.end)	\
 				orig =					\
 				 (type *)sc->sc_mixring.sc_mpr.s.start;	\
-			if (&tomix[m] >= (type *)cb->s.end)		\
+			if (tomix >= (type *)cb->s.end)			\
 				tomix = (type *)cb->s.start;		\
 									\
 			resid -= cc;					\
