The branch main has been updated by christos:

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

commit c24ca02c4c85d0b691a6100fd3006b1f23061858
Author:     Christos Margiolis <[email protected]>
AuthorDate: 2025-11-11 12:06:14 +0000
Commit:     Christos Margiolis <[email protected]>
CommitDate: 2025-11-11 12:06:14 +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
---
 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 {

Reply via email to