diff options
| author | Rosen Penev <rosenp@gmail.com> | 2026-04-24 18:30:20 -0700 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2026-04-27 13:52:24 +0200 |
| commit | 43cdec04ec14dda936f33f135c2fa4eebf94b738 (patch) | |
| tree | a23f785abf2c7604a9f90e5d26d235d6fc6a3cf4 | |
| parent | a440c17869ecd71da0f295b62868fc742d09a8ba (diff) | |
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>
| -rw-r--r-- | sound/pci/ctxfi/ctmixer.c | 27 | ||||
| -rw-r--r-- | sound/pci/ctxfi/ctmixer.h | 4 |
2 files changed, 7 insertions, 24 deletions
diff --git a/sound/pci/ctxfi/ctmixer.c b/sound/pci/ctxfi/ctmixer.c index e3ee76bd8482..50ab69aca2fa 100644 --- a/sound/pci/ctxfi/ctmixer.c +++ b/sound/pci/ctxfi/ctmixer.c @@ -965,35 +965,20 @@ error1: 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; diff --git a/sound/pci/ctxfi/ctmixer.h b/sound/pci/ctxfi/ctmixer.h index e812f6c93b41..dd23d227aeb5 100644 --- a/sound/pci/ctxfi/ctmixer.h +++ b/sound/pci/ctxfi/ctmixer.h @@ -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, |
