Skip to content

Commit 6ecea20

Browse files
nehebAndi Shyti
authored andcommitted
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
1 parent 5dd75da commit 6ecea20

1 file changed

Lines changed: 4 additions & 13 deletions

File tree

drivers/i2c/i2c-atr.c

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,17 @@ struct i2c_atr_alias_pair {
4949
* @shared: Indicates if this alias pool is shared by multiple channels
5050
*
5151
* @lock: Lock protecting @aliases and @use_mask
52-
* @aliases: Array of aliases, must hold exactly @size elements
5352
* @use_mask: Mask of used aliases
53+
* @aliases: Array of aliases, must hold exactly @size elements
5454
*/
5555
struct i2c_atr_alias_pool {
5656
size_t size;
5757
bool shared;
5858

5959
/* Protects aliases and use_mask */
6060
spinlock_t lock;
61-
u16 *aliases;
6261
unsigned long *use_mask;
62+
u16 aliases[] __counted_by(size);
6363
};
6464

6565
/**
@@ -137,22 +137,16 @@ static struct i2c_atr_alias_pool *i2c_atr_alloc_alias_pool(size_t num_aliases, b
137137
struct i2c_atr_alias_pool *alias_pool;
138138
int ret;
139139

140-
alias_pool = kzalloc_obj(*alias_pool);
140+
alias_pool = kzalloc_flex(*alias_pool, aliases, num_aliases);
141141
if (!alias_pool)
142142
return ERR_PTR(-ENOMEM);
143143

144144
alias_pool->size = num_aliases;
145145

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-
152146
alias_pool->use_mask = bitmap_zalloc(num_aliases, GFP_KERNEL);
153147
if (!alias_pool->use_mask) {
154148
ret = -ENOMEM;
155-
goto err_free_aliases;
149+
goto err_free_alias_pool;
156150
}
157151

158152
alias_pool->shared = shared;
@@ -161,8 +155,6 @@ static struct i2c_atr_alias_pool *i2c_atr_alloc_alias_pool(size_t num_aliases, b
161155

162156
return alias_pool;
163157

164-
err_free_aliases:
165-
kfree(alias_pool->aliases);
166158
err_free_alias_pool:
167159
kfree(alias_pool);
168160
return ERR_PTR(ret);
@@ -171,7 +163,6 @@ static struct i2c_atr_alias_pool *i2c_atr_alloc_alias_pool(size_t num_aliases, b
171163
static void i2c_atr_free_alias_pool(struct i2c_atr_alias_pool *alias_pool)
172164
{
173165
bitmap_free(alias_pool->use_mask);
174-
kfree(alias_pool->aliases);
175166
kfree(alias_pool);
176167
}
177168

0 commit comments

Comments
 (0)