Commit a7e83318 authored by Jerry Zhou's avatar Jerry Zhou Committed by Linus Torvalds

mm: fix negative left shift count when PAGE_SHIFT > 20

When PAGE_SHIFT > 20, the result of "20 - PAGE_SHIFT" is negative. The
previous calculating here will generate an unexpected result. In
addition, if PAGE_SIZE >= 1MB, The memory size of "numentries" was
already integral multiple of 1MB.
Signed-off-by: default avatarJerry Zhou <uulinux@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 3dbb95f7
...@@ -5745,9 +5745,10 @@ void *__init alloc_large_system_hash(const char *tablename, ...@@ -5745,9 +5745,10 @@ void *__init alloc_large_system_hash(const char *tablename,
if (!numentries) { if (!numentries) {
/* round applicable memory size up to nearest megabyte */ /* round applicable memory size up to nearest megabyte */
numentries = nr_kernel_pages; numentries = nr_kernel_pages;
numentries += (1UL << (20 - PAGE_SHIFT)) - 1;
numentries >>= 20 - PAGE_SHIFT; /* It isn't necessary when PAGE_SIZE >= 1MB */
numentries <<= 20 - PAGE_SHIFT; if (PAGE_SHIFT < 20)
numentries = round_up(numentries, (1<<20)/PAGE_SIZE);
/* limit to 1 bucket per 2^scale bytes of low memory */ /* limit to 1 bucket per 2^scale bytes of low memory */
if (scale > PAGE_SHIFT) if (scale > PAGE_SHIFT)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment