Fix kfifo_alloc() and kfifo_init() to alloc at least the requested number of elements. Since the kfifo operates on power of 2 the request size will be rounded up to the next power of two.
Unified · Split
| @@ -42,8 +42,7 @@ int __kfifo_alloc(struct __kfifo *fifo, unsigned int size, · 41 unmodified lines | ||
| 42 | 42 | * round down to the next power of 2, since our 'let the indices |
| 43 | 43 | * wrap' technique works only in this case. |
| 44 | 44 | */ |
| 45 | − if (!is_power_of_2(size)) | |
| 46 | − size = rounddown_pow_of_two(size); | |
| 45 | + size = roundup_pow_of_two(size); | |
| 47 | 46 | |
| 48 | 47 | fifo->in = 0; |
| 49 | 48 | fifo->out = 0; |
| @@ -83,8 +82,7 @@ int __kfifo_init(struct __kfifo *fifo, void *buffer, · 33 unmodified lines | ||
| 83 | 82 | { |
| 84 | 83 | size /= esize; |
| 85 | 84 | |
| 86 | − if (!is_power_of_2(size)) | |
| 87 | − size = rounddown_pow_of_two(size); | |
| 85 | + size = roundup_pow_of_two(size); | |
| 88 | 86 | |
| 89 | 87 | fifo->in = 0; |
| 90 | 88 | fifo->out = 0; |