1e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/*
2e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * From lib/bitmap.c
3e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Helper functions for bitmap.h.
4e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng *
5e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * This source code is licensed under the GNU General Public License,
6e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng * Version 2.  See the file COPYING for more details.
7e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng */
8e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/* ANDROID_CHANGE_BEGIN */
9e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#if 0
10e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include <linux/bitmap.h>
11e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#else
12e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#include "include/linux/bitmap.h"
13e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#endif
14e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng/* ANDROID_CHANGE_END */
15e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
16e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengint __bitmap_weight(const unsigned long *bitmap, int bits)
17e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng{
18e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	int k, w = 0, lim = bits/BITS_PER_LONG;
19e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
20e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	for (k = 0; k < lim; k++)
21e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		w += hweight_long(bitmap[k]);
22e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
23e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	if (bits % BITS_PER_LONG)
24e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		w += hweight_long(bitmap[k] & BITMAP_LAST_WORD_MASK(bits));
25e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
26e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	return w;
27e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng}
28