forked from rubenslte/android_kernel_samsung_msm8226
genalloc: Correct nbytes calculation on long boundary
In existing code we calculate nbytes based on the byte boundary, but genalloc uses bitmap for maintaining the memory allocation aligned to long. So while calculating nbytes we end up getting wrong nbytes. example: lets say nbytes comes to 9 bytes for 70 bits when bytes aligned,but if long aligned we will have 3 long words i.e 12 bytes. This difference may lead to choosing the wrong api for freeing the memory i.e Between kfree() and vfree(). Fix was inspired by an upstream commit eedce141cd2dad8d0cefc5468ef41898949a7031, bringing same fix into the gen_pool_detroy path. Change-Id: I942caf59e25515c780896b328b912604df9e10bf Signed-off-by: Hareesh Gundu <hareeshg@codeaurora.org> Signed-off-by: Sunil Khatri <sunilkh@codeaurora.org>
This commit is contained in:
+1
-1
@@ -247,7 +247,7 @@ void gen_pool_destroy(struct gen_pool *pool)
|
||||
|
||||
end_bit = (chunk->end_addr - chunk->start_addr) >> order;
|
||||
nbytes = sizeof(struct gen_pool_chunk) +
|
||||
(end_bit + BITS_PER_BYTE - 1) / BITS_PER_BYTE;
|
||||
BITS_TO_LONGS(end_bit) * sizeof(long);
|
||||
bit = find_next_bit(chunk->bits, end_bit, 0);
|
||||
BUG_ON(bit < end_bit);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user