Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -5745,9 +5745,10 @@ void *__init alloc_large_system_hash(const char *tablename,
	if (!numentries) {
		/* round applicable memory size up to nearest megabyte */
		numentries = nr_kernel_pages;
		numentries += (1UL << (20 - PAGE_SHIFT)) - 1;
		numentries >>= 20 - PAGE_SHIFT;
		numentries <<= 20 - PAGE_SHIFT;

		/* It isn't necessary when PAGE_SIZE >= 1MB */
		if (PAGE_SHIFT < 20)
			numentries = round_up(numentries, (1<<20)/PAGE_SIZE);

		/* limit to 1 bucket per 2^scale bytes of low memory */
		if (scale > PAGE_SHIFT)