aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristos Margiolis <christos@FreeBSD.org>2025-11-11 12:06:14 +0000
committerChristos Margiolis <christos@FreeBSD.org>2025-11-11 12:06:14 +0000
commitc24ca02c4c85d0b691a6100fd3006b1f23061858 (patch)
treec3de601e945ce46d48c8c95bdd8e14fb3d8c742e
parent441a411853e48719d4aa6a36bba0a4c4cbca3a4f (diff)
sound: Retire feedertab_entry
Have an SLIST of feeder_class directly. This way we simplify the code, and also avoid the additional malloc()/free() for each entry. Sponsored by: The FreeBSD Foundation MFC after: 1 week Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D53554
-rw-r--r--sys/dev/sound/pcm/feeder.c37
-rw-r--r--sys/dev/sound/pcm/feeder.h1
2 files changed, 10 insertions, 28 deletions
diff --git a/sys/dev/sound/pcm/feeder.c b/sys/dev/sound/pcm/feeder.c
index e818ed4a1a5d..6f7b225af3b9 100644
--- a/sys/dev/sound/pcm/feeder.c
+++ b/sys/dev/sound/pcm/feeder.c
@@ -41,53 +41,34 @@
static MALLOC_DEFINE(M_FEEDER, "feeder", "pcm feeder");
-struct feedertab_entry {
- SLIST_ENTRY(feedertab_entry) link;
- struct feeder_class *feederclass;
-};
-static SLIST_HEAD(, feedertab_entry) feedertab;
-
-/*****************************************************************************/
+static SLIST_HEAD(, feeder_class) feedertab;
static void
feeder_register_root(void *p)
{
struct feeder_class *fc = p;
- struct feedertab_entry *fte;
KASSERT(fc->desc.type == FEEDER_ROOT,
("first feeder not root: %s", fc->name));
SLIST_INIT(&feedertab);
- fte = malloc(sizeof(*fte), M_FEEDER, M_WAITOK | M_ZERO);
- fte->feederclass = fc;
- SLIST_INSERT_HEAD(&feedertab, fte, link);
+ SLIST_INSERT_HEAD(&feedertab, fc, link);
}
void
feeder_register(void *p)
{
struct feeder_class *fc = p;
- struct feedertab_entry *fte;
KASSERT(fc->desc.type != 0, ("feeder '%s' has no descriptor", fc->name));
- fte = malloc(sizeof(*fte), M_FEEDER, M_WAITOK | M_ZERO);
- fte->feederclass = fc;
- SLIST_INSERT_HEAD(&feedertab, fte, link);
+ SLIST_INSERT_HEAD(&feedertab, fc, link);
}
static void
-feeder_unregisterall(void *p)
+feeder_unregisterall(void *p __unused)
{
- struct feedertab_entry *fte, *next;
-
- next = SLIST_FIRST(&feedertab);
- while (next != NULL) {
- fte = next;
- next = SLIST_NEXT(fte, link);
- free(fte, M_FEEDER);
- }
+ SLIST_INIT(&feedertab);
}
static void
@@ -135,11 +116,11 @@ feeder_create(struct feeder_class *fc, struct pcm_feederdesc *desc)
struct feeder_class *
feeder_getclass(u_int32_t type)
{
- struct feedertab_entry *fte;
+ struct feeder_class *fc;
- SLIST_FOREACH(fte, &feedertab, link) {
- if (fte->feederclass->desc.type == type)
- return (fte->feederclass);
+ SLIST_FOREACH(fc, &feedertab, link) {
+ if (fc->desc.type == type)
+ return (fc);
}
return (NULL);
}
diff --git a/sys/dev/sound/pcm/feeder.h b/sys/dev/sound/pcm/feeder.h
index e883083f7504..5ac92bf13735 100644
--- a/sys/dev/sound/pcm/feeder.h
+++ b/sys/dev/sound/pcm/feeder.h
@@ -36,6 +36,7 @@ struct feeder_class {
KOBJ_CLASS_FIELDS;
struct pcm_feederdesc desc;
void *data;
+ SLIST_ENTRY(feeder_class) link;
};
struct pcm_feeder {