summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgreen <green@FreeBSD.org>2003-02-23 20:49:45 +0000
committergreen <green@FreeBSD.org>2003-02-23 20:49:45 +0000
commit339a4ba4db5f924375d3e3cf55122ce5ab144a75 (patch)
tree1ebdc932a8e7f692bce8444099b720f0a06094a3
parentd0bb7e7afbce5e386b13a63719dfab9f5aaa39a1 (diff)
downloadFreeBSD-src-339a4ba4db5f924375d3e3cf55122ce5ab144a75.zip
FreeBSD-src-339a4ba4db5f924375d3e3cf55122ce5ab144a75.tar.gz
It seems that sound(4)'s feeder routines don't need to allocate memory
without waiting, since they are called from a system-call context only. This appears to fix all sorts of problems with open("/dev/dsp", O_WRONLY) randomly returning ENXIO. Found by: cognet
-rw-r--r--sys/dev/sound/pcm/feeder.c2
-rw-r--r--sys/dev/sound/pcm/feeder_fmt.c12
-rw-r--r--sys/dev/sound/pcm/feeder_rate.c5
3 files changed, 8 insertions, 11 deletions
diff --git a/sys/dev/sound/pcm/feeder.c b/sys/dev/sound/pcm/feeder.c
index 91bdb66..8519574 100644
--- a/sys/dev/sound/pcm/feeder.c
+++ b/sys/dev/sound/pcm/feeder.c
@@ -137,7 +137,7 @@ feeder_create(struct feeder_class *fc, struct pcm_feederdesc *desc)
struct pcm_feeder *f;
int err;
- f = (struct pcm_feeder *)kobj_create((kobj_class_t)fc, M_FEEDER, M_NOWAIT | M_ZERO);
+ f = (struct pcm_feeder *)kobj_create((kobj_class_t)fc, M_FEEDER, M_WAITOK | M_ZERO);
if (f == NULL)
return NULL;
diff --git a/sys/dev/sound/pcm/feeder_fmt.c b/sys/dev/sound/pcm/feeder_fmt.c
index b4fa4f3..72de901 100644
--- a/sys/dev/sound/pcm/feeder_fmt.c
+++ b/sys/dev/sound/pcm/feeder_fmt.c
@@ -209,8 +209,8 @@ FEEDER_DECLARE(feeder_8to16le, 0, NULL);
static int
feed_16to8_init(struct pcm_feeder *f)
{
- f->data = malloc(FEEDBUFSZ, M_FMTFEEDER, M_NOWAIT | M_ZERO);
- return (f->data)? 0 : ENOMEM;
+ f->data = malloc(FEEDBUFSZ, M_FMTFEEDER, M_WAITOK | M_ZERO);
+ return 0;
}
static int
@@ -318,8 +318,8 @@ FEEDER_DECLARE(feeder_monotostereo16, 0, NULL);
static int
feed_stereotomono8_init(struct pcm_feeder *f)
{
- f->data = malloc(FEEDBUFSZ, M_FMTFEEDER, M_NOWAIT | M_ZERO);
- return (f->data)? 0 : ENOMEM;
+ f->data = malloc(FEEDBUFSZ, M_FMTFEEDER, M_WAITOK | M_ZERO);
+ return 0;
}
static int
@@ -363,8 +363,8 @@ FEEDER_DECLARE(feeder_stereotomono8, 1, NULL);
static int
feed_stereotomono16_init(struct pcm_feeder *f)
{
- f->data = malloc(FEEDBUFSZ, M_FMTFEEDER, M_NOWAIT | M_ZERO);
- return (f->data)? 0 : ENOMEM;
+ f->data = malloc(FEEDBUFSZ, M_FMTFEEDER, M_WAITOK | M_ZERO);
+ return 0;
}
static int
diff --git a/sys/dev/sound/pcm/feeder_rate.c b/sys/dev/sound/pcm/feeder_rate.c
index 92454c9..4dfff2e 100644
--- a/sys/dev/sound/pcm/feeder_rate.c
+++ b/sys/dev/sound/pcm/feeder_rate.c
@@ -249,10 +249,7 @@ feed_rate_init(struct pcm_feeder *f)
{
struct feed_rate_info *info;
- info = malloc(sizeof(*info), M_RATEFEEDER, M_NOWAIT | M_ZERO);
- if (info == NULL)
- return ENOMEM;
-
+ info = malloc(sizeof(*info), M_RATEFEEDER, M_WAITOK | M_ZERO);
info->src = DSP_DEFAULT_SPEED;
info->dst = DSP_DEFAULT_SPEED;
info->channels = 2;
OpenPOWER on IntegriCloud