]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ALSA: ctxfi: Use flexible array for SRCIMP imappers
authorRosen Penev <rosenp@gmail.com>
Mon, 11 May 2026 23:00:26 +0000 (16:00 -0700)
committerTakashi Iwai <tiwai@suse.de>
Fri, 15 May 2026 06:56:18 +0000 (08:56 +0200)
Store the SRCIMP imapper entries in the SRCIMP resource allocation
instead of allocating a separate array.

This keeps the mapper table tied to the SRCIMP lifetime and removes
the extra allocation and cleanup paths.

Assisted-by: Codex:GPT-5.5
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://patch.msgid.link/20260511230026.28488-1-rosenp@gmail.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/ctxfi/ctsrc.c
sound/pci/ctxfi/ctsrc.h

index 326997bb885df4aa59bee4ace6b1ececf8f24038..46dc1f509234f0ece410ee7e3e6a54605768dd86 100644 (file)
@@ -668,13 +668,6 @@ static int srcimp_rsc_init(struct srcimp *srcimp,
        if (err)
                return err;
 
-       /* Reserve memory for imapper nodes */
-       srcimp->imappers = kzalloc_objs(struct imapper, desc->msr);
-       if (!srcimp->imappers) {
-               err = -ENOMEM;
-               goto error1;
-       }
-
        /* Set srcimp specific operations */
        srcimp->rsc.ops = &srcimp_basic_rsc_ops;
        srcimp->ops = &srcimp_ops;
@@ -683,16 +676,10 @@ static int srcimp_rsc_init(struct srcimp *srcimp,
        srcimp->rsc.ops->master(&srcimp->rsc);
 
        return 0;
-
-error1:
-       rsc_uninit(&srcimp->rsc);
-       return err;
 }
 
 static int srcimp_rsc_uninit(struct srcimp *srcimp)
 {
-       kfree(srcimp->imappers);
-       srcimp->imappers = NULL;
        srcimp->ops = NULL;
        srcimp->mgr = NULL;
        rsc_uninit(&srcimp->rsc);
@@ -711,7 +698,7 @@ static int get_srcimp_rsc(struct srcimp_mgr *mgr,
        *rsrcimp = NULL;
 
        /* Allocate mem for SRCIMP resource */
-       srcimp = kzalloc(sizeof(*srcimp), GFP_KERNEL);
+       srcimp = kzalloc_flex(*srcimp, imappers, desc->msr);
        if (!srcimp)
                return -ENOMEM;
 
index e6366cc6a7ae6aaaca8ae157b86514e7e8759c2d..7ba94adde92085c65b69f85765e39a0362d91cb0 100644 (file)
@@ -103,10 +103,10 @@ struct srcimp_rsc_ops;
 struct srcimp {
        struct rsc rsc;
        unsigned char idx[8];
-       struct imapper *imappers;
        unsigned int mapped; /* A bit-map indicating which conj rsc is mapped */
        struct srcimp_mgr *mgr;
        const struct srcimp_rsc_ops *ops;
+       struct imapper imappers[];
 };
 
 struct srcimp_rsc_ops {