summaryrefslogtreecommitdiff
path: root/sys/dev/audio
diff options
context:
space:
mode:
authormartin <martin@NetBSD.org>2020-01-02 09:18:15 +0000
committermartin <martin@NetBSD.org>2020-01-02 09:18:15 +0000
commitbfbfea64de07a426fc0daa1bce2f23afca9b96ec (patch)
tree0a1810c23b24e141b8c7bbab3d992b1d1a7f791d /sys/dev/audio
parent326b1995678e3a361e196113be8e32ff9102c84c (diff)
Pull up following revision(s) (requested by isaki in ticket #593):
sys/dev/audio/audio.c: revision 1.34 sys/dev/audio/audio.c: revision 1.35 Use M_WAITOK instead of M_NOWAIT. These allocations don't require NOWAIT constraints. Will fix PR kern/54796. - Improve and simplify around audio_realloc().
Diffstat (limited to 'sys/dev/audio')
-rw-r--r--sys/dev/audio/audio.c90
1 files changed, 16 insertions, 74 deletions
diff --git a/sys/dev/audio/audio.c b/sys/dev/audio/audio.c
index b380cc65b7d..3f0cf2f8d57 100644
--- a/sys/dev/audio/audio.c
+++ b/sys/dev/audio/audio.c
@@ -1,4 +1,4 @@
-/* $NetBSD: audio.c,v 1.28.2.4 2019/11/19 12:58:29 martin Exp $ */
+/* $NetBSD: audio.c,v 1.28.2.5 2020/01/02 09:18:15 martin Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -142,7 +142,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: audio.c,v 1.28.2.4 2019/11/19 12:58:29 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: audio.c,v 1.28.2.5 2020/01/02 09:18:15 martin Exp $");
#ifdef _KERNEL_OPT
#include "audio.h"
@@ -3061,30 +3061,6 @@ audioctl_open(dev_t dev, struct audio_softc *sc, int flags, int ifmt,
}
/*
- * Reallocate 'memblock' with specified 'bytes' if 'bytes' > 0.
- * Or free 'memblock' and return NULL if 'byte' is zero.
- */
-static void *
-audio_realloc(void *memblock, size_t bytes)
-{
-
- if (memblock != NULL) {
- if (bytes != 0) {
- return kern_realloc(memblock, bytes, M_NOWAIT);
- } else {
- kern_free(memblock);
- return NULL;
- }
- } else {
- if (bytes != 0) {
- return kern_malloc(bytes, M_NOWAIT);
- } else {
- return NULL;
- }
- }
-}
-
-/*
* Free 'mem' if available, and initialize the pointer.
* For this reason, this is implemented as macro.
*/
@@ -3096,6 +3072,20 @@ audio_realloc(void *memblock, size_t bytes)
} while (0)
/*
+ * (Re)allocate 'memblock' with specified 'bytes'.
+ * bytes must not be 0.
+ * This function never returns NULL.
+ */
+static void *
+audio_realloc(void *memblock, size_t bytes)
+{
+
+ KASSERT(bytes != 0);
+ audio_free(memblock);
+ return kern_malloc(bytes, M_WAITOK);
+}
+
+/*
* (Re)allocate usrbuf with 'newbufsize' bytes.
* Use this function for usrbuf because only usrbuf can be mmapped.
* If successful, it updates track->usrbuf.mem, track->usrbuf.capacity and
@@ -3660,7 +3650,6 @@ abort:
static int
audio_track_init_codec(audio_track_t *track, audio_ring_t **last_dstp)
{
- struct audio_softc *sc;
audio_ring_t *last_dst;
audio_ring_t *srcbuf;
audio_format2_t *srcfmt;
@@ -3671,7 +3660,6 @@ audio_track_init_codec(audio_track_t *track, audio_ring_t **last_dstp)
KASSERT(track);
- sc = track->mixer->sc;
last_dst = *last_dstp;
dstfmt = &last_dst->fmt;
srcfmt = &track->inputfmt;
@@ -3700,12 +3688,6 @@ audio_track_init_codec(audio_track_t *track, audio_ring_t **last_dstp)
srcbuf->capacity = frame_per_block(track->mixer, &srcbuf->fmt);
len = auring_bytelen(srcbuf);
srcbuf->mem = audio_realloc(srcbuf->mem, len);
- if (srcbuf->mem == NULL) {
- device_printf(sc->sc_dev, "%s: malloc(%d) failed\n",
- __func__, len);
- error = ENOMEM;
- goto abort;
- }
arg = &track->codec.arg;
arg->srcfmt = &srcbuf->fmt;
@@ -3731,7 +3713,6 @@ abort:
static int
audio_track_init_chvol(audio_track_t *track, audio_ring_t **last_dstp)
{
- struct audio_softc *sc;
audio_ring_t *last_dst;
audio_ring_t *srcbuf;
audio_format2_t *srcfmt;
@@ -3742,7 +3723,6 @@ audio_track_init_chvol(audio_track_t *track, audio_ring_t **last_dstp)
KASSERT(track);
- sc = track->mixer->sc;
last_dst = *last_dstp;
dstfmt = &last_dst->fmt;
srcfmt = &track->inputfmt;
@@ -3770,12 +3750,6 @@ audio_track_init_chvol(audio_track_t *track, audio_ring_t **last_dstp)
srcbuf->capacity = frame_per_block(track->mixer, &srcbuf->fmt);
len = auring_bytelen(srcbuf);
srcbuf->mem = audio_realloc(srcbuf->mem, len);
- if (srcbuf->mem == NULL) {
- device_printf(sc->sc_dev, "%s: malloc(%d) failed\n",
- __func__, len);
- error = ENOMEM;
- goto abort;
- }
arg = &track->chvol.arg;
arg->srcfmt = &srcbuf->fmt;
@@ -3786,7 +3760,6 @@ audio_track_init_chvol(audio_track_t *track, audio_ring_t **last_dstp)
return 0;
}
-abort:
track->chvol.filter = NULL;
audio_free(srcbuf->mem);
return error;
@@ -3801,7 +3774,6 @@ abort:
static int
audio_track_init_chmix(audio_track_t *track, audio_ring_t **last_dstp)
{
- struct audio_softc *sc;
audio_ring_t *last_dst;
audio_ring_t *srcbuf;
audio_format2_t *srcfmt;
@@ -3814,7 +3786,6 @@ audio_track_init_chmix(audio_track_t *track, audio_ring_t **last_dstp)
KASSERT(track);
- sc = track->mixer->sc;
last_dst = *last_dstp;
dstfmt = &last_dst->fmt;
srcfmt = &track->inputfmt;
@@ -3845,12 +3816,6 @@ audio_track_init_chmix(audio_track_t *track, audio_ring_t **last_dstp)
srcbuf->capacity = frame_per_block(track->mixer, &srcbuf->fmt);
len = auring_bytelen(srcbuf);
srcbuf->mem = audio_realloc(srcbuf->mem, len);
- if (srcbuf->mem == NULL) {
- device_printf(sc->sc_dev, "%s: malloc(%d) failed\n",
- __func__, len);
- error = ENOMEM;
- goto abort;
- }
arg = &track->chmix.arg;
arg->srcfmt = &srcbuf->fmt;
@@ -3861,7 +3826,6 @@ audio_track_init_chmix(audio_track_t *track, audio_ring_t **last_dstp)
return 0;
}
-abort:
track->chmix.filter = NULL;
audio_free(srcbuf->mem);
return error;
@@ -3876,7 +3840,6 @@ abort:
static int
audio_track_init_freq(audio_track_t *track, audio_ring_t **last_dstp)
{
- struct audio_softc *sc;
audio_ring_t *last_dst;
audio_ring_t *srcbuf;
audio_format2_t *srcfmt;
@@ -3891,7 +3854,6 @@ audio_track_init_freq(audio_track_t *track, audio_ring_t **last_dstp)
KASSERT(track);
- sc = track->mixer->sc;
last_dst = *last_dstp;
dstfmt = &last_dst->fmt;
srcfmt = &track->inputfmt;
@@ -3930,12 +3892,6 @@ audio_track_init_freq(audio_track_t *track, audio_ring_t **last_dstp)
srcbuf->capacity = frame_per_block(track->mixer, &srcbuf->fmt);
len = auring_bytelen(srcbuf);
srcbuf->mem = audio_realloc(srcbuf->mem, len);
- if (srcbuf->mem == NULL) {
- device_printf(sc->sc_dev, "%s: malloc(%d) failed\n",
- __func__, len);
- error = ENOMEM;
- goto abort;
- }
arg = &track->freq.arg;
arg->srcfmt = &srcbuf->fmt;
@@ -3946,7 +3902,6 @@ audio_track_init_freq(audio_track_t *track, audio_ring_t **last_dstp)
return 0;
}
-abort:
track->freq.filter = NULL;
audio_free(srcbuf->mem);
return error;
@@ -4128,12 +4083,6 @@ audio_track_set_format(audio_track_t *track, audio_format2_t *usrfmt)
frame_per_block(track->mixer, &track->input->fmt);
len = auring_bytelen(track->input);
track->input->mem = audio_realloc(track->input->mem, len);
- if (track->input->mem == NULL) {
- device_printf(sc->sc_dev, "malloc input(%d) failed\n",
- len);
- error = ENOMEM;
- goto error;
- }
}
/*
@@ -4728,13 +4677,6 @@ audio_mixer_init(struct audio_softc *sc, int mode,
len = mixer->frames_per_block * mixer->mixfmt.channels *
mixer->mixfmt.stride / NBBY;
mixer->mixsample = audio_realloc(mixer->mixsample, len);
- if (mixer->mixsample == NULL) {
- device_printf(sc->sc_dev,
- "%s: malloc mixsample(%d) failed\n",
- __func__, len);
- error = ENOMEM;
- goto abort;
- }
} else {
/* No mixing buffer for recording */
}