diff options
| author | martin <martin@NetBSD.org> | 2020-01-02 09:18:15 +0000 |
|---|---|---|
| committer | martin <martin@NetBSD.org> | 2020-01-02 09:18:15 +0000 |
| commit | bfbfea64de07a426fc0daa1bce2f23afca9b96ec (patch) | |
| tree | 0a1810c23b24e141b8c7bbab3d992b1d1a7f791d /sys/dev/audio | |
| parent | 326b1995678e3a361e196113be8e32ff9102c84c (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.c | 90 |
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 */ } |
