mlx4_core: Clean up buddy bitmap allocation
- Use kcalloc() / vzalloc() instead of an extra bitmap_zero(). - Add __GFP_NOWARN to kcalloc() since we'll try vzalloc() if it fails. Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
@@ -121,7 +121,7 @@ static int mlx4_buddy_init(struct mlx4_buddy *buddy, int max_order)
|
|||||||
buddy->max_order = max_order;
|
buddy->max_order = max_order;
|
||||||
spin_lock_init(&buddy->lock);
|
spin_lock_init(&buddy->lock);
|
||||||
|
|
||||||
buddy->bits = kzalloc((buddy->max_order + 1) * sizeof (long *),
|
buddy->bits = kcalloc(buddy->max_order + 1, sizeof (long *),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
buddy->num_free = kcalloc((buddy->max_order + 1), sizeof *buddy->num_free,
|
buddy->num_free = kcalloc((buddy->max_order + 1), sizeof *buddy->num_free,
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
@@ -130,13 +130,12 @@ static int mlx4_buddy_init(struct mlx4_buddy *buddy, int max_order)
|
|||||||
|
|
||||||
for (i = 0; i <= buddy->max_order; ++i) {
|
for (i = 0; i <= buddy->max_order; ++i) {
|
||||||
s = BITS_TO_LONGS(1 << (buddy->max_order - i));
|
s = BITS_TO_LONGS(1 << (buddy->max_order - i));
|
||||||
buddy->bits[i] = kmalloc(s * sizeof (long), GFP_KERNEL);
|
buddy->bits[i] = kcalloc(s, sizeof (long), GFP_KERNEL | __GFP_NOWARN);
|
||||||
if (!buddy->bits[i]) {
|
if (!buddy->bits[i]) {
|
||||||
buddy->bits[i] = vmalloc(s * sizeof(long));
|
buddy->bits[i] = vzalloc(s * sizeof(long));
|
||||||
if (!buddy->bits[i])
|
if (!buddy->bits[i])
|
||||||
goto err_out_free;
|
goto err_out_free;
|
||||||
}
|
}
|
||||||
bitmap_zero(buddy->bits[i], 1 << (buddy->max_order - i));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
set_bit(0, buddy->bits[buddy->max_order]);
|
set_bit(0, buddy->bits[buddy->max_order]);
|
||||||
|
Reference in New Issue
Block a user