sparc/srmmu: clear trailing edge of bitmap properly
authorAkinobu Mita <akinobu.mita@gmail.com>
Fri, 29 Mar 2013 03:44:43 +0000 (03:44 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sun, 31 Mar 2013 23:29:12 +0000 (19:29 -0400)
commit54df2db36c93bbb8c757f172d97c577040de6abb
tree201c8a8217ef40e4fc5eeb8e7b3c5f17ad96b29c
parent71196a26d85be2aae2e587dfd3c3190a651133c6
sparc/srmmu: clear trailing edge of bitmap properly

srmmu_nocache_bitmap is cleared by bit_map_init().  But bit_map_init()
attempts to clear by memset(), so it can't clear the trailing edge of
bitmap properly on big-endian architecture if the number of bits is not
a multiple of BITS_PER_LONG.

Actually, the number of bits in srmmu_nocache_bitmap is not always
a multiple of BITS_PER_LONG.  It is calculated as below:

        bitmap_bits = srmmu_nocache_size >> SRMMU_NOCACHE_BITMAP_SHIFT;

srmmu_nocache_size is decided proportionally by the amount of system RAM
and it is rounded to a multiple of PAGE_SIZE.  SRMMU_NOCACHE_BITMAP_SHIFT
is defined as (PAGE_SHIFT - 4).  So it can only be said that bitmap_bits
is a multiple of 16.

This fixes the problem by using bitmap_clear() instead of memset()
in bit_map_init() and this also uses BITS_TO_LONGS() to calculate correct
size at bitmap allocation time.

Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: sparclinux@vger.kernel.org
Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc/lib/bitext.c
arch/sparc/mm/srmmu.c