Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

i2c: atr: use kzalloc_flex

Convert kzalloc_obj + kcalloc to kzalloc_flex to save an allocation.

Add __counted_by to get extra runtime analysis.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
Link: https://lore.kernel.org/r/20260327030310.8502-1-rosenp@gmail.com

authored by

Rosen Penev and committed by
Andi Shyti
6ecea208 5dd75dac

+4 -13
+4 -13
drivers/i2c/i2c-atr.c
··· 49 49 * @shared: Indicates if this alias pool is shared by multiple channels 50 50 * 51 51 * @lock: Lock protecting @aliases and @use_mask 52 - * @aliases: Array of aliases, must hold exactly @size elements 53 52 * @use_mask: Mask of used aliases 53 + * @aliases: Array of aliases, must hold exactly @size elements 54 54 */ 55 55 struct i2c_atr_alias_pool { 56 56 size_t size; ··· 58 58 59 59 /* Protects aliases and use_mask */ 60 60 spinlock_t lock; 61 - u16 *aliases; 62 61 unsigned long *use_mask; 62 + u16 aliases[] __counted_by(size); 63 63 }; 64 64 65 65 /** ··· 137 137 struct i2c_atr_alias_pool *alias_pool; 138 138 int ret; 139 139 140 - alias_pool = kzalloc_obj(*alias_pool); 140 + alias_pool = kzalloc_flex(*alias_pool, aliases, num_aliases); 141 141 if (!alias_pool) 142 142 return ERR_PTR(-ENOMEM); 143 143 144 144 alias_pool->size = num_aliases; 145 145 146 - alias_pool->aliases = kcalloc(num_aliases, sizeof(*alias_pool->aliases), GFP_KERNEL); 147 - if (!alias_pool->aliases) { 148 - ret = -ENOMEM; 149 - goto err_free_alias_pool; 150 - } 151 - 152 146 alias_pool->use_mask = bitmap_zalloc(num_aliases, GFP_KERNEL); 153 147 if (!alias_pool->use_mask) { 154 148 ret = -ENOMEM; 155 - goto err_free_aliases; 149 + goto err_free_alias_pool; 156 150 } 157 151 158 152 alias_pool->shared = shared; ··· 155 161 156 162 return alias_pool; 157 163 158 - err_free_aliases: 159 - kfree(alias_pool->aliases); 160 164 err_free_alias_pool: 161 165 kfree(alias_pool); 162 166 return ERR_PTR(ret); ··· 163 171 static void i2c_atr_free_alias_pool(struct i2c_atr_alias_pool *alias_pool) 164 172 { 165 173 bitmap_free(alias_pool->use_mask); 166 - kfree(alias_pool->aliases); 167 174 kfree(alias_pool); 168 175 } 169 176