git: 2acd16ce68be - stable/15 - sound: Retire feedertab_entry

From: Christos Margiolis <christos_at_FreeBSD.org>
Date: Tue, 18 Nov 2025 00:52:06 UTC
The branch stable/15 has been updated by christos:

URL: https://cgit.FreeBSD.org/src/commit/?id=2acd16ce68be04755508d63c05d3eb15a5916c6f

commit 2acd16ce68be04755508d63c05d3eb15a5916c6f
Author:     Christos Margiolis <christos@FreeBSD.org>
AuthorDate: 2025-11-11 12:06:14 +0000
Commit:     Christos Margiolis <christos@FreeBSD.org>
CommitDate: 2025-11-18 00:51:23 +0000

    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
    
    (cherry picked from commit c24ca02c4c85d0b691a6100fd3006b1f23061858)
---
 sys/dev/sound/pcm/feeder.c | 37 +++++++++----------------------------
 sys/dev/sound/pcm/feeder.h |  1 +
 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 {