/*---------------------------------------------------------------------------*/
 
-static size_t bitmap_size(unsigned long nr_bits)
-{
-       return BITS_TO_LONGS(nr_bits) * sizeof(long);
-}
-
 static int __dirty_map_init(struct dirty_map *dmap, unsigned long nr_words,
                            unsigned long nr_regions)
 {
 
 
 static inline unsigned long idset_bitmap_size(int num_ssid, int num_id)
 {
-       return BITS_TO_LONGS(num_ssid * num_id) * sizeof(unsigned long);
+       return bitmap_size(size_mul(num_ssid, num_id));
 }
 
 static struct idset *idset_new(int num_ssid, int num_id)
 
 #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) & (BITS_PER_LONG - 1)))
 #define BITMAP_LAST_WORD_MASK(nbits) (~0UL >> (-(nbits) & (BITS_PER_LONG - 1)))
 
+#define bitmap_size(nbits)     (ALIGN(nbits, BITS_PER_LONG) / BITS_PER_BYTE)
+
 static inline void bitmap_zero(unsigned long *dst, unsigned int nbits)
 {
-       unsigned int len = BITS_TO_LONGS(nbits) * sizeof(unsigned long);
+       unsigned int len = bitmap_size(nbits);
 
        if (small_const_nbits(nbits))
                *dst = 0;
 
 static inline void bitmap_fill(unsigned long *dst, unsigned int nbits)
 {
-       unsigned int len = BITS_TO_LONGS(nbits) * sizeof(unsigned long);
+       unsigned int len = bitmap_size(nbits);
 
        if (small_const_nbits(nbits))
                *dst = ~0UL;
 static inline void bitmap_copy(unsigned long *dst, const unsigned long *src,
                        unsigned int nbits)
 {
-       unsigned int len = BITS_TO_LONGS(nbits) * sizeof(unsigned long);
+       unsigned int len = bitmap_size(nbits);
 
        if (small_const_nbits(nbits))
                *dst = *src;
 
  */
 static inline unsigned int cpumask_size(void)
 {
-       return BITS_TO_LONGS(large_cpumask_bits) * sizeof(long);
+       return bitmap_size(large_cpumask_bits);
 }
 
 /*
 
 #include <linux/prime_numbers.h>
 #include <linux/slab.h>
 
-#define bitmap_size(nbits) (BITS_TO_LONGS(nbits) * sizeof(unsigned long))
-
 struct primes {
        struct rcu_head rcu;
        unsigned long last, sz;
 
 #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) & (BITS_PER_LONG - 1)))
 #define BITMAP_LAST_WORD_MASK(nbits) (~0UL >> (-(nbits) & (BITS_PER_LONG - 1)))
 
+#define bitmap_size(nbits)     (ALIGN(nbits, BITS_PER_LONG) / BITS_PER_BYTE)
+
 static inline void bitmap_zero(unsigned long *dst, unsigned int nbits)
 {
        if (small_const_nbits(nbits))
                *dst = 0UL;
        else {
-               int len = BITS_TO_LONGS(nbits) * sizeof(unsigned long);
-               memset(dst, 0, len);
+               memset(dst, 0, bitmap_size(nbits));
        }
 }
 
  */
 static inline unsigned long *bitmap_zalloc(int nbits)
 {
-       return calloc(1, BITS_TO_LONGS(nbits) * sizeof(unsigned long));
+       return calloc(1, bitmap_size(nbits));
 }
 
 /*