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