ALSA: ctxfi: simplify mixer allocation

Combine 3 allocations into one to simplify memory management.

No need for 3 separate frees now.

Replace void pointers with proper types. No need for void here.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://patch.msgid.link/20260425013020.430496-1-rosenp@gmail.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Rosen Penev 2026-04-24 18:30:20 -07:00 committed by Takashi Iwai
parent a440c17869
commit 43cdec04ec
2 changed files with 7 additions and 24 deletions

View File

@ -965,35 +965,20 @@ static int ct_mixer_get_resources(struct ct_mixer *mixer)
static int ct_mixer_get_mem(struct ct_mixer **rmixer)
{
struct ct_mixer *mixer;
int err;
size_t alloc_size;
*rmixer = NULL;
/* Allocate mem for mixer obj */
mixer = kzalloc_obj(*mixer);
alloc_size = struct_size(mixer, amixers, NUM_CT_AMIXERS * CHN_NUM);
alloc_size += sizeof(*mixer->sums) * NUM_CT_SUMS * CHN_NUM;
mixer = kzalloc(alloc_size, GFP_KERNEL);
if (!mixer)
return -ENOMEM;
mixer->amixers = kcalloc(NUM_CT_AMIXERS * CHN_NUM, sizeof(void *),
GFP_KERNEL);
if (!mixer->amixers) {
err = -ENOMEM;
goto error1;
}
mixer->sums = kcalloc(NUM_CT_SUMS * CHN_NUM, sizeof(void *),
GFP_KERNEL);
if (!mixer->sums) {
err = -ENOMEM;
goto error2;
}
mixer->sums = (struct sum **)(mixer->amixers + (NUM_CT_AMIXERS * CHN_NUM));
*rmixer = mixer;
return 0;
error2:
kfree(mixer->amixers);
error1:
kfree(mixer);
return err;
}
static int ct_mixer_topology_build(struct ct_mixer *mixer)
@ -1228,8 +1213,6 @@ int ct_mixer_destroy(struct ct_mixer *mixer)
}
/* Release mem assigned to mixer object */
kfree(mixer->sums);
kfree(mixer->amixers);
kfree(mixer);
return 0;

View File

@ -41,8 +41,7 @@ enum MIXER_PORT_T {
struct ct_mixer {
struct ct_atc *atc;
void **amixers; /* amixer resources for volume control */
void **sums; /* sum resources for signal collection */
struct sum **sums; /* sum resources for signal collection */
unsigned int switch_state; /* A bit-map to indicate state of switches */
int (*get_output_ports)(struct ct_mixer *mixer, enum MIXER_PORT_T type,
@ -55,6 +54,7 @@ struct ct_mixer {
#ifdef CONFIG_PM_SLEEP
int (*resume)(struct ct_mixer *mixer);
#endif
struct amixer *amixers[]; /* amixer resources for volume control */
};
int ct_alsa_mix_create(struct ct_atc *atc,