History

mm/cma_debug: correct size input to bitmap function

In CMA, 1 bit in bitmap means 1 << order_per_bits pages so size of bitmap is cma->count >> order_per_bits rather than just cma->count. This patch fixes it.

Joonsoo Kim committed 11 years ago

Commit d56e84b1 parent 2292c0b1 file · +4 −3Browse files

Unified · Split

mm/cma_debug.c+4−3
@@ -39,7 +39,7 @@ static int cma_used_get(void *data, u64 *val) · 38 unmodified lines
39 39
40 mutex_lock(&cma->lock);40 mutex_lock(&cma->lock);
41 /* pages counter is smaller than sizeof(int) */41 /* pages counter is smaller than sizeof(int) */
42 used = bitmap_weight(cma->bitmap, (int)cma->count);42 used = bitmap_weight(cma->bitmap, (int)cma_bitmap_maxno(cma));
43 mutex_unlock(&cma->lock);43 mutex_unlock(&cma->lock);
44 *val = (u64)used << cma->order_per_bit;44 *val = (u64)used << cma->order_per_bit;
45 45
@@ -52,13 +52,14 @@ static int cma_maxchunk_get(void *data, u64 *val) · 6 unmodified lines
52 struct cma *cma = data;52 struct cma *cma = data;
53 unsigned long maxchunk = 0;53 unsigned long maxchunk = 0;
54 unsigned long start, end = 0;54 unsigned long start, end = 0;
55 unsigned long bitmap_maxno = cma_bitmap_maxno(cma);
55 56
56 mutex_lock(&cma->lock);57 mutex_lock(&cma->lock);
57 for (;;) {58 for (;;) {
58 start = find_next_zero_bit(cma->bitmap, cma->count, end);59 start = find_next_zero_bit(cma->bitmap, bitmap_maxno, end);
59 if (start >= cma->count)60 if (start >= cma->count)
60 break;61 break;
61 end = find_next_bit(cma->bitmap, cma->count, start);62 end = find_next_bit(cma->bitmap, bitmap_maxno, start);
62 maxchunk = max(end - start, maxchunk);63 maxchunk = max(end - start, maxchunk);
63 }64 }
64 mutex_unlock(&cma->lock);65 mutex_unlock(&cma->lock);