Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * lib/bitmap.c
0004  * Helper functions for bitmap.h.
0005  */
0006 
0007 #include <linux/bitmap.h>
0008 #include <linux/bitops.h>
0009 #include <linux/bug.h>
0010 #include <linux/ctype.h>
0011 #include <linux/device.h>
0012 #include <linux/errno.h>
0013 #include <linux/export.h>
0014 #include <linux/kernel.h>
0015 #include <linux/mm.h>
0016 #include <linux/slab.h>
0017 #include <linux/string.h>
0018 #include <linux/thread_info.h>
0019 #include <linux/uaccess.h>
0020 
0021 #include <asm/page.h>
0022 
0023 #include "kstrtox.h"
0024 
0025 /**
0026  * DOC: bitmap introduction
0027  *
0028  * bitmaps provide an array of bits, implemented using an
0029  * array of unsigned longs.  The number of valid bits in a
0030  * given bitmap does _not_ need to be an exact multiple of
0031  * BITS_PER_LONG.
0032  *
0033  * The possible unused bits in the last, partially used word
0034  * of a bitmap are 'don't care'.  The implementation makes
0035  * no particular effort to keep them zero.  It ensures that
0036  * their value will not affect the results of any operation.
0037  * The bitmap operations that return Boolean (bitmap_empty,
0038  * for example) or scalar (bitmap_weight, for example) results
0039  * carefully filter out these unused bits from impacting their
0040  * results.
0041  *
0042  * The byte ordering of bitmaps is more natural on little
0043  * endian architectures.  See the big-endian headers
0044  * include/asm-ppc64/bitops.h and include/asm-s390/bitops.h
0045  * for the best explanations of this ordering.
0046  */
0047 
0048 bool __bitmap_equal(const unsigned long *bitmap1,
0049             const unsigned long *bitmap2, unsigned int bits)
0050 {
0051     unsigned int k, lim = bits/BITS_PER_LONG;
0052     for (k = 0; k < lim; ++k)
0053         if (bitmap1[k] != bitmap2[k])
0054             return false;
0055 
0056     if (bits % BITS_PER_LONG)
0057         if ((bitmap1[k] ^ bitmap2[k]) & BITMAP_LAST_WORD_MASK(bits))
0058             return false;
0059 
0060     return true;
0061 }
0062 EXPORT_SYMBOL(__bitmap_equal);
0063 
0064 bool __bitmap_or_equal(const unsigned long *bitmap1,
0065                const unsigned long *bitmap2,
0066                const unsigned long *bitmap3,
0067                unsigned int bits)
0068 {
0069     unsigned int k, lim = bits / BITS_PER_LONG;
0070     unsigned long tmp;
0071 
0072     for (k = 0; k < lim; ++k) {
0073         if ((bitmap1[k] | bitmap2[k]) != bitmap3[k])
0074             return false;
0075     }
0076 
0077     if (!(bits % BITS_PER_LONG))
0078         return true;
0079 
0080     tmp = (bitmap1[k] | bitmap2[k]) ^ bitmap3[k];
0081     return (tmp & BITMAP_LAST_WORD_MASK(bits)) == 0;
0082 }
0083 
0084 void __bitmap_complement(unsigned long *dst, const unsigned long *src, unsigned int bits)
0085 {
0086     unsigned int k, lim = BITS_TO_LONGS(bits);
0087     for (k = 0; k < lim; ++k)
0088         dst[k] = ~src[k];
0089 }
0090 EXPORT_SYMBOL(__bitmap_complement);
0091 
0092 /**
0093  * __bitmap_shift_right - logical right shift of the bits in a bitmap
0094  *   @dst : destination bitmap
0095  *   @src : source bitmap
0096  *   @shift : shift by this many bits
0097  *   @nbits : bitmap size, in bits
0098  *
0099  * Shifting right (dividing) means moving bits in the MS -> LS bit
0100  * direction.  Zeros are fed into the vacated MS positions and the
0101  * LS bits shifted off the bottom are lost.
0102  */
0103 void __bitmap_shift_right(unsigned long *dst, const unsigned long *src,
0104             unsigned shift, unsigned nbits)
0105 {
0106     unsigned k, lim = BITS_TO_LONGS(nbits);
0107     unsigned off = shift/BITS_PER_LONG, rem = shift % BITS_PER_LONG;
0108     unsigned long mask = BITMAP_LAST_WORD_MASK(nbits);
0109     for (k = 0; off + k < lim; ++k) {
0110         unsigned long upper, lower;
0111 
0112         /*
0113          * If shift is not word aligned, take lower rem bits of
0114          * word above and make them the top rem bits of result.
0115          */
0116         if (!rem || off + k + 1 >= lim)
0117             upper = 0;
0118         else {
0119             upper = src[off + k + 1];
0120             if (off + k + 1 == lim - 1)
0121                 upper &= mask;
0122             upper <<= (BITS_PER_LONG - rem);
0123         }
0124         lower = src[off + k];
0125         if (off + k == lim - 1)
0126             lower &= mask;
0127         lower >>= rem;
0128         dst[k] = lower | upper;
0129     }
0130     if (off)
0131         memset(&dst[lim - off], 0, off*sizeof(unsigned long));
0132 }
0133 EXPORT_SYMBOL(__bitmap_shift_right);
0134 
0135 
0136 /**
0137  * __bitmap_shift_left - logical left shift of the bits in a bitmap
0138  *   @dst : destination bitmap
0139  *   @src : source bitmap
0140  *   @shift : shift by this many bits
0141  *   @nbits : bitmap size, in bits
0142  *
0143  * Shifting left (multiplying) means moving bits in the LS -> MS
0144  * direction.  Zeros are fed into the vacated LS bit positions
0145  * and those MS bits shifted off the top are lost.
0146  */
0147 
0148 void __bitmap_shift_left(unsigned long *dst, const unsigned long *src,
0149             unsigned int shift, unsigned int nbits)
0150 {
0151     int k;
0152     unsigned int lim = BITS_TO_LONGS(nbits);
0153     unsigned int off = shift/BITS_PER_LONG, rem = shift % BITS_PER_LONG;
0154     for (k = lim - off - 1; k >= 0; --k) {
0155         unsigned long upper, lower;
0156 
0157         /*
0158          * If shift is not word aligned, take upper rem bits of
0159          * word below and make them the bottom rem bits of result.
0160          */
0161         if (rem && k > 0)
0162             lower = src[k - 1] >> (BITS_PER_LONG - rem);
0163         else
0164             lower = 0;
0165         upper = src[k] << rem;
0166         dst[k + off] = lower | upper;
0167     }
0168     if (off)
0169         memset(dst, 0, off*sizeof(unsigned long));
0170 }
0171 EXPORT_SYMBOL(__bitmap_shift_left);
0172 
0173 /**
0174  * bitmap_cut() - remove bit region from bitmap and right shift remaining bits
0175  * @dst: destination bitmap, might overlap with src
0176  * @src: source bitmap
0177  * @first: start bit of region to be removed
0178  * @cut: number of bits to remove
0179  * @nbits: bitmap size, in bits
0180  *
0181  * Set the n-th bit of @dst iff the n-th bit of @src is set and
0182  * n is less than @first, or the m-th bit of @src is set for any
0183  * m such that @first <= n < nbits, and m = n + @cut.
0184  *
0185  * In pictures, example for a big-endian 32-bit architecture:
0186  *
0187  * The @src bitmap is::
0188  *
0189  *   31                                   63
0190  *   |                                    |
0191  *   10000000 11000001 11110010 00010101  10000000 11000001 01110010 00010101
0192  *                   |  |              |                                    |
0193  *                  16  14             0                                   32
0194  *
0195  * if @cut is 3, and @first is 14, bits 14-16 in @src are cut and @dst is::
0196  *
0197  *   31                                   63
0198  *   |                                    |
0199  *   10110000 00011000 00110010 00010101  00010000 00011000 00101110 01000010
0200  *                      |              |                                    |
0201  *                      14 (bit 17     0                                   32
0202  *                          from @src)
0203  *
0204  * Note that @dst and @src might overlap partially or entirely.
0205  *
0206  * This is implemented in the obvious way, with a shift and carry
0207  * step for each moved bit. Optimisation is left as an exercise
0208  * for the compiler.
0209  */
0210 void bitmap_cut(unsigned long *dst, const unsigned long *src,
0211         unsigned int first, unsigned int cut, unsigned int nbits)
0212 {
0213     unsigned int len = BITS_TO_LONGS(nbits);
0214     unsigned long keep = 0, carry;
0215     int i;
0216 
0217     if (first % BITS_PER_LONG) {
0218         keep = src[first / BITS_PER_LONG] &
0219                (~0UL >> (BITS_PER_LONG - first % BITS_PER_LONG));
0220     }
0221 
0222     memmove(dst, src, len * sizeof(*dst));
0223 
0224     while (cut--) {
0225         for (i = first / BITS_PER_LONG; i < len; i++) {
0226             if (i < len - 1)
0227                 carry = dst[i + 1] & 1UL;
0228             else
0229                 carry = 0;
0230 
0231             dst[i] = (dst[i] >> 1) | (carry << (BITS_PER_LONG - 1));
0232         }
0233     }
0234 
0235     dst[first / BITS_PER_LONG] &= ~0UL << (first % BITS_PER_LONG);
0236     dst[first / BITS_PER_LONG] |= keep;
0237 }
0238 EXPORT_SYMBOL(bitmap_cut);
0239 
0240 bool __bitmap_and(unsigned long *dst, const unsigned long *bitmap1,
0241                 const unsigned long *bitmap2, unsigned int bits)
0242 {
0243     unsigned int k;
0244     unsigned int lim = bits/BITS_PER_LONG;
0245     unsigned long result = 0;
0246 
0247     for (k = 0; k < lim; k++)
0248         result |= (dst[k] = bitmap1[k] & bitmap2[k]);
0249     if (bits % BITS_PER_LONG)
0250         result |= (dst[k] = bitmap1[k] & bitmap2[k] &
0251                BITMAP_LAST_WORD_MASK(bits));
0252     return result != 0;
0253 }
0254 EXPORT_SYMBOL(__bitmap_and);
0255 
0256 void __bitmap_or(unsigned long *dst, const unsigned long *bitmap1,
0257                 const unsigned long *bitmap2, unsigned int bits)
0258 {
0259     unsigned int k;
0260     unsigned int nr = BITS_TO_LONGS(bits);
0261 
0262     for (k = 0; k < nr; k++)
0263         dst[k] = bitmap1[k] | bitmap2[k];
0264 }
0265 EXPORT_SYMBOL(__bitmap_or);
0266 
0267 void __bitmap_xor(unsigned long *dst, const unsigned long *bitmap1,
0268                 const unsigned long *bitmap2, unsigned int bits)
0269 {
0270     unsigned int k;
0271     unsigned int nr = BITS_TO_LONGS(bits);
0272 
0273     for (k = 0; k < nr; k++)
0274         dst[k] = bitmap1[k] ^ bitmap2[k];
0275 }
0276 EXPORT_SYMBOL(__bitmap_xor);
0277 
0278 bool __bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1,
0279                 const unsigned long *bitmap2, unsigned int bits)
0280 {
0281     unsigned int k;
0282     unsigned int lim = bits/BITS_PER_LONG;
0283     unsigned long result = 0;
0284 
0285     for (k = 0; k < lim; k++)
0286         result |= (dst[k] = bitmap1[k] & ~bitmap2[k]);
0287     if (bits % BITS_PER_LONG)
0288         result |= (dst[k] = bitmap1[k] & ~bitmap2[k] &
0289                BITMAP_LAST_WORD_MASK(bits));
0290     return result != 0;
0291 }
0292 EXPORT_SYMBOL(__bitmap_andnot);
0293 
0294 void __bitmap_replace(unsigned long *dst,
0295               const unsigned long *old, const unsigned long *new,
0296               const unsigned long *mask, unsigned int nbits)
0297 {
0298     unsigned int k;
0299     unsigned int nr = BITS_TO_LONGS(nbits);
0300 
0301     for (k = 0; k < nr; k++)
0302         dst[k] = (old[k] & ~mask[k]) | (new[k] & mask[k]);
0303 }
0304 EXPORT_SYMBOL(__bitmap_replace);
0305 
0306 bool __bitmap_intersects(const unsigned long *bitmap1,
0307              const unsigned long *bitmap2, unsigned int bits)
0308 {
0309     unsigned int k, lim = bits/BITS_PER_LONG;
0310     for (k = 0; k < lim; ++k)
0311         if (bitmap1[k] & bitmap2[k])
0312             return true;
0313 
0314     if (bits % BITS_PER_LONG)
0315         if ((bitmap1[k] & bitmap2[k]) & BITMAP_LAST_WORD_MASK(bits))
0316             return true;
0317     return false;
0318 }
0319 EXPORT_SYMBOL(__bitmap_intersects);
0320 
0321 bool __bitmap_subset(const unsigned long *bitmap1,
0322              const unsigned long *bitmap2, unsigned int bits)
0323 {
0324     unsigned int k, lim = bits/BITS_PER_LONG;
0325     for (k = 0; k < lim; ++k)
0326         if (bitmap1[k] & ~bitmap2[k])
0327             return false;
0328 
0329     if (bits % BITS_PER_LONG)
0330         if ((bitmap1[k] & ~bitmap2[k]) & BITMAP_LAST_WORD_MASK(bits))
0331             return false;
0332     return true;
0333 }
0334 EXPORT_SYMBOL(__bitmap_subset);
0335 
0336 unsigned int __bitmap_weight(const unsigned long *bitmap, unsigned int bits)
0337 {
0338     unsigned int k, lim = bits/BITS_PER_LONG, w = 0;
0339 
0340     for (k = 0; k < lim; k++)
0341         w += hweight_long(bitmap[k]);
0342 
0343     if (bits % BITS_PER_LONG)
0344         w += hweight_long(bitmap[k] & BITMAP_LAST_WORD_MASK(bits));
0345 
0346     return w;
0347 }
0348 EXPORT_SYMBOL(__bitmap_weight);
0349 
0350 void __bitmap_set(unsigned long *map, unsigned int start, int len)
0351 {
0352     unsigned long *p = map + BIT_WORD(start);
0353     const unsigned int size = start + len;
0354     int bits_to_set = BITS_PER_LONG - (start % BITS_PER_LONG);
0355     unsigned long mask_to_set = BITMAP_FIRST_WORD_MASK(start);
0356 
0357     while (len - bits_to_set >= 0) {
0358         *p |= mask_to_set;
0359         len -= bits_to_set;
0360         bits_to_set = BITS_PER_LONG;
0361         mask_to_set = ~0UL;
0362         p++;
0363     }
0364     if (len) {
0365         mask_to_set &= BITMAP_LAST_WORD_MASK(size);
0366         *p |= mask_to_set;
0367     }
0368 }
0369 EXPORT_SYMBOL(__bitmap_set);
0370 
0371 void __bitmap_clear(unsigned long *map, unsigned int start, int len)
0372 {
0373     unsigned long *p = map + BIT_WORD(start);
0374     const unsigned int size = start + len;
0375     int bits_to_clear = BITS_PER_LONG - (start % BITS_PER_LONG);
0376     unsigned long mask_to_clear = BITMAP_FIRST_WORD_MASK(start);
0377 
0378     while (len - bits_to_clear >= 0) {
0379         *p &= ~mask_to_clear;
0380         len -= bits_to_clear;
0381         bits_to_clear = BITS_PER_LONG;
0382         mask_to_clear = ~0UL;
0383         p++;
0384     }
0385     if (len) {
0386         mask_to_clear &= BITMAP_LAST_WORD_MASK(size);
0387         *p &= ~mask_to_clear;
0388     }
0389 }
0390 EXPORT_SYMBOL(__bitmap_clear);
0391 
0392 /**
0393  * bitmap_find_next_zero_area_off - find a contiguous aligned zero area
0394  * @map: The address to base the search on
0395  * @size: The bitmap size in bits
0396  * @start: The bitnumber to start searching at
0397  * @nr: The number of zeroed bits we're looking for
0398  * @align_mask: Alignment mask for zero area
0399  * @align_offset: Alignment offset for zero area.
0400  *
0401  * The @align_mask should be one less than a power of 2; the effect is that
0402  * the bit offset of all zero areas this function finds plus @align_offset
0403  * is multiple of that power of 2.
0404  */
0405 unsigned long bitmap_find_next_zero_area_off(unsigned long *map,
0406                          unsigned long size,
0407                          unsigned long start,
0408                          unsigned int nr,
0409                          unsigned long align_mask,
0410                          unsigned long align_offset)
0411 {
0412     unsigned long index, end, i;
0413 again:
0414     index = find_next_zero_bit(map, size, start);
0415 
0416     /* Align allocation */
0417     index = __ALIGN_MASK(index + align_offset, align_mask) - align_offset;
0418 
0419     end = index + nr;
0420     if (end > size)
0421         return end;
0422     i = find_next_bit(map, end, index);
0423     if (i < end) {
0424         start = i + 1;
0425         goto again;
0426     }
0427     return index;
0428 }
0429 EXPORT_SYMBOL(bitmap_find_next_zero_area_off);
0430 
0431 /*
0432  * Bitmap printing & parsing functions: first version by Nadia Yvette Chambers,
0433  * second version by Paul Jackson, third by Joe Korty.
0434  */
0435 
0436 /**
0437  * bitmap_parse_user - convert an ASCII hex string in a user buffer into a bitmap
0438  *
0439  * @ubuf: pointer to user buffer containing string.
0440  * @ulen: buffer size in bytes.  If string is smaller than this
0441  *    then it must be terminated with a \0.
0442  * @maskp: pointer to bitmap array that will contain result.
0443  * @nmaskbits: size of bitmap, in bits.
0444  */
0445 int bitmap_parse_user(const char __user *ubuf,
0446             unsigned int ulen, unsigned long *maskp,
0447             int nmaskbits)
0448 {
0449     char *buf;
0450     int ret;
0451 
0452     buf = memdup_user_nul(ubuf, ulen);
0453     if (IS_ERR(buf))
0454         return PTR_ERR(buf);
0455 
0456     ret = bitmap_parse(buf, UINT_MAX, maskp, nmaskbits);
0457 
0458     kfree(buf);
0459     return ret;
0460 }
0461 EXPORT_SYMBOL(bitmap_parse_user);
0462 
0463 /**
0464  * bitmap_print_to_pagebuf - convert bitmap to list or hex format ASCII string
0465  * @list: indicates whether the bitmap must be list
0466  * @buf: page aligned buffer into which string is placed
0467  * @maskp: pointer to bitmap to convert
0468  * @nmaskbits: size of bitmap, in bits
0469  *
0470  * Output format is a comma-separated list of decimal numbers and
0471  * ranges if list is specified or hex digits grouped into comma-separated
0472  * sets of 8 digits/set. Returns the number of characters written to buf.
0473  *
0474  * It is assumed that @buf is a pointer into a PAGE_SIZE, page-aligned
0475  * area and that sufficient storage remains at @buf to accommodate the
0476  * bitmap_print_to_pagebuf() output. Returns the number of characters
0477  * actually printed to @buf, excluding terminating '\0'.
0478  */
0479 int bitmap_print_to_pagebuf(bool list, char *buf, const unsigned long *maskp,
0480                 int nmaskbits)
0481 {
0482     ptrdiff_t len = PAGE_SIZE - offset_in_page(buf);
0483 
0484     return list ? scnprintf(buf, len, "%*pbl\n", nmaskbits, maskp) :
0485               scnprintf(buf, len, "%*pb\n", nmaskbits, maskp);
0486 }
0487 EXPORT_SYMBOL(bitmap_print_to_pagebuf);
0488 
0489 /**
0490  * bitmap_print_to_buf  - convert bitmap to list or hex format ASCII string
0491  * @list: indicates whether the bitmap must be list
0492  *      true:  print in decimal list format
0493  *      false: print in hexadecimal bitmask format
0494  * @buf: buffer into which string is placed
0495  * @maskp: pointer to bitmap to convert
0496  * @nmaskbits: size of bitmap, in bits
0497  * @off: in the string from which we are copying, We copy to @buf
0498  * @count: the maximum number of bytes to print
0499  */
0500 static int bitmap_print_to_buf(bool list, char *buf, const unsigned long *maskp,
0501         int nmaskbits, loff_t off, size_t count)
0502 {
0503     const char *fmt = list ? "%*pbl\n" : "%*pb\n";
0504     ssize_t size;
0505     void *data;
0506 
0507     data = kasprintf(GFP_KERNEL, fmt, nmaskbits, maskp);
0508     if (!data)
0509         return -ENOMEM;
0510 
0511     size = memory_read_from_buffer(buf, count, &off, data, strlen(data) + 1);
0512     kfree(data);
0513 
0514     return size;
0515 }
0516 
0517 /**
0518  * bitmap_print_bitmask_to_buf  - convert bitmap to hex bitmask format ASCII string
0519  * @buf: buffer into which string is placed
0520  * @maskp: pointer to bitmap to convert
0521  * @nmaskbits: size of bitmap, in bits
0522  * @off: in the string from which we are copying, We copy to @buf
0523  * @count: the maximum number of bytes to print
0524  *
0525  * The bitmap_print_to_pagebuf() is used indirectly via its cpumap wrapper
0526  * cpumap_print_to_pagebuf() or directly by drivers to export hexadecimal
0527  * bitmask and decimal list to userspace by sysfs ABI.
0528  * Drivers might be using a normal attribute for this kind of ABIs. A
0529  * normal attribute typically has show entry as below::
0530  *
0531  *   static ssize_t example_attribute_show(struct device *dev,
0532  *      struct device_attribute *attr, char *buf)
0533  *   {
0534  *  ...
0535  *  return bitmap_print_to_pagebuf(true, buf, &mask, nr_trig_max);
0536  *   }
0537  *
0538  * show entry of attribute has no offset and count parameters and this
0539  * means the file is limited to one page only.
0540  * bitmap_print_to_pagebuf() API works terribly well for this kind of
0541  * normal attribute with buf parameter and without offset, count::
0542  *
0543  *   bitmap_print_to_pagebuf(bool list, char *buf, const unsigned long *maskp,
0544  *             int nmaskbits)
0545  *   {
0546  *   }
0547  *
0548  * The problem is once we have a large bitmap, we have a chance to get a
0549  * bitmask or list more than one page. Especially for list, it could be
0550  * as complex as 0,3,5,7,9,... We have no simple way to know it exact size.
0551  * It turns out bin_attribute is a way to break this limit. bin_attribute
0552  * has show entry as below::
0553  *
0554  *   static ssize_t
0555  *   example_bin_attribute_show(struct file *filp, struct kobject *kobj,
0556  *      struct bin_attribute *attr, char *buf,
0557  *      loff_t offset, size_t count)
0558  *   {
0559  *  ...
0560  *   }
0561  *
0562  * With the new offset and count parameters, this makes sysfs ABI be able
0563  * to support file size more than one page. For example, offset could be
0564  * >= 4096.
0565  * bitmap_print_bitmask_to_buf(), bitmap_print_list_to_buf() wit their
0566  * cpumap wrapper cpumap_print_bitmask_to_buf(), cpumap_print_list_to_buf()
0567  * make those drivers be able to support large bitmask and list after they
0568  * move to use bin_attribute. In result, we have to pass the corresponding
0569  * parameters such as off, count from bin_attribute show entry to this API.
0570  *
0571  * The role of cpumap_print_bitmask_to_buf() and cpumap_print_list_to_buf()
0572  * is similar with cpumap_print_to_pagebuf(),  the difference is that
0573  * bitmap_print_to_pagebuf() mainly serves sysfs attribute with the assumption
0574  * the destination buffer is exactly one page and won't be more than one page.
0575  * cpumap_print_bitmask_to_buf() and cpumap_print_list_to_buf(), on the other
0576  * hand, mainly serves bin_attribute which doesn't work with exact one page,
0577  * and it can break the size limit of converted decimal list and hexadecimal
0578  * bitmask.
0579  *
0580  * WARNING!
0581  *
0582  * This function is not a replacement for sprintf() or bitmap_print_to_pagebuf().
0583  * It is intended to workaround sysfs limitations discussed above and should be
0584  * used carefully in general case for the following reasons:
0585  *
0586  *  - Time complexity is O(nbits^2/count), comparing to O(nbits) for snprintf().
0587  *  - Memory complexity is O(nbits), comparing to O(1) for snprintf().
0588  *  - @off and @count are NOT offset and number of bits to print.
0589  *  - If printing part of bitmap as list, the resulting string is not a correct
0590  *    list representation of bitmap. Particularly, some bits within or out of
0591  *    related interval may be erroneously set or unset. The format of the string
0592  *    may be broken, so bitmap_parselist-like parser may fail parsing it.
0593  *  - If printing the whole bitmap as list by parts, user must ensure the order
0594  *    of calls of the function such that the offset is incremented linearly.
0595  *  - If printing the whole bitmap as list by parts, user must keep bitmap
0596  *    unchanged between the very first and very last call. Otherwise concatenated
0597  *    result may be incorrect, and format may be broken.
0598  *
0599  * Returns the number of characters actually printed to @buf
0600  */
0601 int bitmap_print_bitmask_to_buf(char *buf, const unsigned long *maskp,
0602                 int nmaskbits, loff_t off, size_t count)
0603 {
0604     return bitmap_print_to_buf(false, buf, maskp, nmaskbits, off, count);
0605 }
0606 EXPORT_SYMBOL(bitmap_print_bitmask_to_buf);
0607 
0608 /**
0609  * bitmap_print_list_to_buf  - convert bitmap to decimal list format ASCII string
0610  * @buf: buffer into which string is placed
0611  * @maskp: pointer to bitmap to convert
0612  * @nmaskbits: size of bitmap, in bits
0613  * @off: in the string from which we are copying, We copy to @buf
0614  * @count: the maximum number of bytes to print
0615  *
0616  * Everything is same with the above bitmap_print_bitmask_to_buf() except
0617  * the print format.
0618  */
0619 int bitmap_print_list_to_buf(char *buf, const unsigned long *maskp,
0620                  int nmaskbits, loff_t off, size_t count)
0621 {
0622     return bitmap_print_to_buf(true, buf, maskp, nmaskbits, off, count);
0623 }
0624 EXPORT_SYMBOL(bitmap_print_list_to_buf);
0625 
0626 /*
0627  * Region 9-38:4/10 describes the following bitmap structure:
0628  * 0       9  12    18          38       N
0629  * .........****......****......****..................
0630  *      ^  ^     ^           ^       ^
0631  *      start  off   group_len         end   nbits
0632  */
0633 struct region {
0634     unsigned int start;
0635     unsigned int off;
0636     unsigned int group_len;
0637     unsigned int end;
0638     unsigned int nbits;
0639 };
0640 
0641 static void bitmap_set_region(const struct region *r, unsigned long *bitmap)
0642 {
0643     unsigned int start;
0644 
0645     for (start = r->start; start <= r->end; start += r->group_len)
0646         bitmap_set(bitmap, start, min(r->end - start + 1, r->off));
0647 }
0648 
0649 static int bitmap_check_region(const struct region *r)
0650 {
0651     if (r->start > r->end || r->group_len == 0 || r->off > r->group_len)
0652         return -EINVAL;
0653 
0654     if (r->end >= r->nbits)
0655         return -ERANGE;
0656 
0657     return 0;
0658 }
0659 
0660 static const char *bitmap_getnum(const char *str, unsigned int *num,
0661                  unsigned int lastbit)
0662 {
0663     unsigned long long n;
0664     unsigned int len;
0665 
0666     if (str[0] == 'N') {
0667         *num = lastbit;
0668         return str + 1;
0669     }
0670 
0671     len = _parse_integer(str, 10, &n);
0672     if (!len)
0673         return ERR_PTR(-EINVAL);
0674     if (len & KSTRTOX_OVERFLOW || n != (unsigned int)n)
0675         return ERR_PTR(-EOVERFLOW);
0676 
0677     *num = n;
0678     return str + len;
0679 }
0680 
0681 static inline bool end_of_str(char c)
0682 {
0683     return c == '\0' || c == '\n';
0684 }
0685 
0686 static inline bool __end_of_region(char c)
0687 {
0688     return isspace(c) || c == ',';
0689 }
0690 
0691 static inline bool end_of_region(char c)
0692 {
0693     return __end_of_region(c) || end_of_str(c);
0694 }
0695 
0696 /*
0697  * The format allows commas and whitespaces at the beginning
0698  * of the region.
0699  */
0700 static const char *bitmap_find_region(const char *str)
0701 {
0702     while (__end_of_region(*str))
0703         str++;
0704 
0705     return end_of_str(*str) ? NULL : str;
0706 }
0707 
0708 static const char *bitmap_find_region_reverse(const char *start, const char *end)
0709 {
0710     while (start <= end && __end_of_region(*end))
0711         end--;
0712 
0713     return end;
0714 }
0715 
0716 static const char *bitmap_parse_region(const char *str, struct region *r)
0717 {
0718     unsigned int lastbit = r->nbits - 1;
0719 
0720     if (!strncasecmp(str, "all", 3)) {
0721         r->start = 0;
0722         r->end = lastbit;
0723         str += 3;
0724 
0725         goto check_pattern;
0726     }
0727 
0728     str = bitmap_getnum(str, &r->start, lastbit);
0729     if (IS_ERR(str))
0730         return str;
0731 
0732     if (end_of_region(*str))
0733         goto no_end;
0734 
0735     if (*str != '-')
0736         return ERR_PTR(-EINVAL);
0737 
0738     str = bitmap_getnum(str + 1, &r->end, lastbit);
0739     if (IS_ERR(str))
0740         return str;
0741 
0742 check_pattern:
0743     if (end_of_region(*str))
0744         goto no_pattern;
0745 
0746     if (*str != ':')
0747         return ERR_PTR(-EINVAL);
0748 
0749     str = bitmap_getnum(str + 1, &r->off, lastbit);
0750     if (IS_ERR(str))
0751         return str;
0752 
0753     if (*str != '/')
0754         return ERR_PTR(-EINVAL);
0755 
0756     return bitmap_getnum(str + 1, &r->group_len, lastbit);
0757 
0758 no_end:
0759     r->end = r->start;
0760 no_pattern:
0761     r->off = r->end + 1;
0762     r->group_len = r->end + 1;
0763 
0764     return end_of_str(*str) ? NULL : str;
0765 }
0766 
0767 /**
0768  * bitmap_parselist - convert list format ASCII string to bitmap
0769  * @buf: read user string from this buffer; must be terminated
0770  *    with a \0 or \n.
0771  * @maskp: write resulting mask here
0772  * @nmaskbits: number of bits in mask to be written
0773  *
0774  * Input format is a comma-separated list of decimal numbers and
0775  * ranges.  Consecutively set bits are shown as two hyphen-separated
0776  * decimal numbers, the smallest and largest bit numbers set in
0777  * the range.
0778  * Optionally each range can be postfixed to denote that only parts of it
0779  * should be set. The range will divided to groups of specific size.
0780  * From each group will be used only defined amount of bits.
0781  * Syntax: range:used_size/group_size
0782  * Example: 0-1023:2/256 ==> 0,1,256,257,512,513,768,769
0783  * The value 'N' can be used as a dynamically substituted token for the
0784  * maximum allowed value; i.e (nmaskbits - 1).  Keep in mind that it is
0785  * dynamic, so if system changes cause the bitmap width to change, such
0786  * as more cores in a CPU list, then any ranges using N will also change.
0787  *
0788  * Returns: 0 on success, -errno on invalid input strings. Error values:
0789  *
0790  *   - ``-EINVAL``: wrong region format
0791  *   - ``-EINVAL``: invalid character in string
0792  *   - ``-ERANGE``: bit number specified too large for mask
0793  *   - ``-EOVERFLOW``: integer overflow in the input parameters
0794  */
0795 int bitmap_parselist(const char *buf, unsigned long *maskp, int nmaskbits)
0796 {
0797     struct region r;
0798     long ret;
0799 
0800     r.nbits = nmaskbits;
0801     bitmap_zero(maskp, r.nbits);
0802 
0803     while (buf) {
0804         buf = bitmap_find_region(buf);
0805         if (buf == NULL)
0806             return 0;
0807 
0808         buf = bitmap_parse_region(buf, &r);
0809         if (IS_ERR(buf))
0810             return PTR_ERR(buf);
0811 
0812         ret = bitmap_check_region(&r);
0813         if (ret)
0814             return ret;
0815 
0816         bitmap_set_region(&r, maskp);
0817     }
0818 
0819     return 0;
0820 }
0821 EXPORT_SYMBOL(bitmap_parselist);
0822 
0823 
0824 /**
0825  * bitmap_parselist_user() - convert user buffer's list format ASCII
0826  * string to bitmap
0827  *
0828  * @ubuf: pointer to user buffer containing string.
0829  * @ulen: buffer size in bytes.  If string is smaller than this
0830  *    then it must be terminated with a \0.
0831  * @maskp: pointer to bitmap array that will contain result.
0832  * @nmaskbits: size of bitmap, in bits.
0833  *
0834  * Wrapper for bitmap_parselist(), providing it with user buffer.
0835  */
0836 int bitmap_parselist_user(const char __user *ubuf,
0837             unsigned int ulen, unsigned long *maskp,
0838             int nmaskbits)
0839 {
0840     char *buf;
0841     int ret;
0842 
0843     buf = memdup_user_nul(ubuf, ulen);
0844     if (IS_ERR(buf))
0845         return PTR_ERR(buf);
0846 
0847     ret = bitmap_parselist(buf, maskp, nmaskbits);
0848 
0849     kfree(buf);
0850     return ret;
0851 }
0852 EXPORT_SYMBOL(bitmap_parselist_user);
0853 
0854 static const char *bitmap_get_x32_reverse(const char *start,
0855                     const char *end, u32 *num)
0856 {
0857     u32 ret = 0;
0858     int c, i;
0859 
0860     for (i = 0; i < 32; i += 4) {
0861         c = hex_to_bin(*end--);
0862         if (c < 0)
0863             return ERR_PTR(-EINVAL);
0864 
0865         ret |= c << i;
0866 
0867         if (start > end || __end_of_region(*end))
0868             goto out;
0869     }
0870 
0871     if (hex_to_bin(*end--) >= 0)
0872         return ERR_PTR(-EOVERFLOW);
0873 out:
0874     *num = ret;
0875     return end;
0876 }
0877 
0878 /**
0879  * bitmap_parse - convert an ASCII hex string into a bitmap.
0880  * @start: pointer to buffer containing string.
0881  * @buflen: buffer size in bytes.  If string is smaller than this
0882  *    then it must be terminated with a \0 or \n. In that case,
0883  *    UINT_MAX may be provided instead of string length.
0884  * @maskp: pointer to bitmap array that will contain result.
0885  * @nmaskbits: size of bitmap, in bits.
0886  *
0887  * Commas group hex digits into chunks.  Each chunk defines exactly 32
0888  * bits of the resultant bitmask.  No chunk may specify a value larger
0889  * than 32 bits (%-EOVERFLOW), and if a chunk specifies a smaller value
0890  * then leading 0-bits are prepended.  %-EINVAL is returned for illegal
0891  * characters. Grouping such as "1,,5", ",44", "," or "" is allowed.
0892  * Leading, embedded and trailing whitespace accepted.
0893  */
0894 int bitmap_parse(const char *start, unsigned int buflen,
0895         unsigned long *maskp, int nmaskbits)
0896 {
0897     const char *end = strnchrnul(start, buflen, '\n') - 1;
0898     int chunks = BITS_TO_U32(nmaskbits);
0899     u32 *bitmap = (u32 *)maskp;
0900     int unset_bit;
0901     int chunk;
0902 
0903     for (chunk = 0; ; chunk++) {
0904         end = bitmap_find_region_reverse(start, end);
0905         if (start > end)
0906             break;
0907 
0908         if (!chunks--)
0909             return -EOVERFLOW;
0910 
0911 #if defined(CONFIG_64BIT) && defined(__BIG_ENDIAN)
0912         end = bitmap_get_x32_reverse(start, end, &bitmap[chunk ^ 1]);
0913 #else
0914         end = bitmap_get_x32_reverse(start, end, &bitmap[chunk]);
0915 #endif
0916         if (IS_ERR(end))
0917             return PTR_ERR(end);
0918     }
0919 
0920     unset_bit = (BITS_TO_U32(nmaskbits) - chunks) * 32;
0921     if (unset_bit < nmaskbits) {
0922         bitmap_clear(maskp, unset_bit, nmaskbits - unset_bit);
0923         return 0;
0924     }
0925 
0926     if (find_next_bit(maskp, unset_bit, nmaskbits) != unset_bit)
0927         return -EOVERFLOW;
0928 
0929     return 0;
0930 }
0931 EXPORT_SYMBOL(bitmap_parse);
0932 
0933 /**
0934  * bitmap_pos_to_ord - find ordinal of set bit at given position in bitmap
0935  *  @buf: pointer to a bitmap
0936  *  @pos: a bit position in @buf (0 <= @pos < @nbits)
0937  *  @nbits: number of valid bit positions in @buf
0938  *
0939  * Map the bit at position @pos in @buf (of length @nbits) to the
0940  * ordinal of which set bit it is.  If it is not set or if @pos
0941  * is not a valid bit position, map to -1.
0942  *
0943  * If for example, just bits 4 through 7 are set in @buf, then @pos
0944  * values 4 through 7 will get mapped to 0 through 3, respectively,
0945  * and other @pos values will get mapped to -1.  When @pos value 7
0946  * gets mapped to (returns) @ord value 3 in this example, that means
0947  * that bit 7 is the 3rd (starting with 0th) set bit in @buf.
0948  *
0949  * The bit positions 0 through @bits are valid positions in @buf.
0950  */
0951 static int bitmap_pos_to_ord(const unsigned long *buf, unsigned int pos, unsigned int nbits)
0952 {
0953     if (pos >= nbits || !test_bit(pos, buf))
0954         return -1;
0955 
0956     return __bitmap_weight(buf, pos);
0957 }
0958 
0959 /**
0960  * bitmap_ord_to_pos - find position of n-th set bit in bitmap
0961  *  @buf: pointer to bitmap
0962  *  @ord: ordinal bit position (n-th set bit, n >= 0)
0963  *  @nbits: number of valid bit positions in @buf
0964  *
0965  * Map the ordinal offset of bit @ord in @buf to its position in @buf.
0966  * Value of @ord should be in range 0 <= @ord < weight(buf). If @ord
0967  * >= weight(buf), returns @nbits.
0968  *
0969  * If for example, just bits 4 through 7 are set in @buf, then @ord
0970  * values 0 through 3 will get mapped to 4 through 7, respectively,
0971  * and all other @ord values returns @nbits.  When @ord value 3
0972  * gets mapped to (returns) @pos value 7 in this example, that means
0973  * that the 3rd set bit (starting with 0th) is at position 7 in @buf.
0974  *
0975  * The bit positions 0 through @nbits-1 are valid positions in @buf.
0976  */
0977 unsigned int bitmap_ord_to_pos(const unsigned long *buf, unsigned int ord, unsigned int nbits)
0978 {
0979     unsigned int pos;
0980 
0981     for (pos = find_first_bit(buf, nbits);
0982          pos < nbits && ord;
0983          pos = find_next_bit(buf, nbits, pos + 1))
0984         ord--;
0985 
0986     return pos;
0987 }
0988 
0989 /**
0990  * bitmap_remap - Apply map defined by a pair of bitmaps to another bitmap
0991  *  @dst: remapped result
0992  *  @src: subset to be remapped
0993  *  @old: defines domain of map
0994  *  @new: defines range of map
0995  *  @nbits: number of bits in each of these bitmaps
0996  *
0997  * Let @old and @new define a mapping of bit positions, such that
0998  * whatever position is held by the n-th set bit in @old is mapped
0999  * to the n-th set bit in @new.  In the more general case, allowing
1000  * for the possibility that the weight 'w' of @new is less than the
1001  * weight of @old, map the position of the n-th set bit in @old to
1002  * the position of the m-th set bit in @new, where m == n % w.
1003  *
1004  * If either of the @old and @new bitmaps are empty, or if @src and
1005  * @dst point to the same location, then this routine copies @src
1006  * to @dst.
1007  *
1008  * The positions of unset bits in @old are mapped to themselves
1009  * (the identify map).
1010  *
1011  * Apply the above specified mapping to @src, placing the result in
1012  * @dst, clearing any bits previously set in @dst.
1013  *
1014  * For example, lets say that @old has bits 4 through 7 set, and
1015  * @new has bits 12 through 15 set.  This defines the mapping of bit
1016  * position 4 to 12, 5 to 13, 6 to 14 and 7 to 15, and of all other
1017  * bit positions unchanged.  So if say @src comes into this routine
1018  * with bits 1, 5 and 7 set, then @dst should leave with bits 1,
1019  * 13 and 15 set.
1020  */
1021 void bitmap_remap(unsigned long *dst, const unsigned long *src,
1022         const unsigned long *old, const unsigned long *new,
1023         unsigned int nbits)
1024 {
1025     unsigned int oldbit, w;
1026 
1027     if (dst == src)     /* following doesn't handle inplace remaps */
1028         return;
1029     bitmap_zero(dst, nbits);
1030 
1031     w = bitmap_weight(new, nbits);
1032     for_each_set_bit(oldbit, src, nbits) {
1033         int n = bitmap_pos_to_ord(old, oldbit, nbits);
1034 
1035         if (n < 0 || w == 0)
1036             set_bit(oldbit, dst);   /* identity map */
1037         else
1038             set_bit(bitmap_ord_to_pos(new, n % w, nbits), dst);
1039     }
1040 }
1041 EXPORT_SYMBOL(bitmap_remap);
1042 
1043 /**
1044  * bitmap_bitremap - Apply map defined by a pair of bitmaps to a single bit
1045  *  @oldbit: bit position to be mapped
1046  *  @old: defines domain of map
1047  *  @new: defines range of map
1048  *  @bits: number of bits in each of these bitmaps
1049  *
1050  * Let @old and @new define a mapping of bit positions, such that
1051  * whatever position is held by the n-th set bit in @old is mapped
1052  * to the n-th set bit in @new.  In the more general case, allowing
1053  * for the possibility that the weight 'w' of @new is less than the
1054  * weight of @old, map the position of the n-th set bit in @old to
1055  * the position of the m-th set bit in @new, where m == n % w.
1056  *
1057  * The positions of unset bits in @old are mapped to themselves
1058  * (the identify map).
1059  *
1060  * Apply the above specified mapping to bit position @oldbit, returning
1061  * the new bit position.
1062  *
1063  * For example, lets say that @old has bits 4 through 7 set, and
1064  * @new has bits 12 through 15 set.  This defines the mapping of bit
1065  * position 4 to 12, 5 to 13, 6 to 14 and 7 to 15, and of all other
1066  * bit positions unchanged.  So if say @oldbit is 5, then this routine
1067  * returns 13.
1068  */
1069 int bitmap_bitremap(int oldbit, const unsigned long *old,
1070                 const unsigned long *new, int bits)
1071 {
1072     int w = bitmap_weight(new, bits);
1073     int n = bitmap_pos_to_ord(old, oldbit, bits);
1074     if (n < 0 || w == 0)
1075         return oldbit;
1076     else
1077         return bitmap_ord_to_pos(new, n % w, bits);
1078 }
1079 EXPORT_SYMBOL(bitmap_bitremap);
1080 
1081 #ifdef CONFIG_NUMA
1082 /**
1083  * bitmap_onto - translate one bitmap relative to another
1084  *  @dst: resulting translated bitmap
1085  *  @orig: original untranslated bitmap
1086  *  @relmap: bitmap relative to which translated
1087  *  @bits: number of bits in each of these bitmaps
1088  *
1089  * Set the n-th bit of @dst iff there exists some m such that the
1090  * n-th bit of @relmap is set, the m-th bit of @orig is set, and
1091  * the n-th bit of @relmap is also the m-th _set_ bit of @relmap.
1092  * (If you understood the previous sentence the first time your
1093  * read it, you're overqualified for your current job.)
1094  *
1095  * In other words, @orig is mapped onto (surjectively) @dst,
1096  * using the map { <n, m> | the n-th bit of @relmap is the
1097  * m-th set bit of @relmap }.
1098  *
1099  * Any set bits in @orig above bit number W, where W is the
1100  * weight of (number of set bits in) @relmap are mapped nowhere.
1101  * In particular, if for all bits m set in @orig, m >= W, then
1102  * @dst will end up empty.  In situations where the possibility
1103  * of such an empty result is not desired, one way to avoid it is
1104  * to use the bitmap_fold() operator, below, to first fold the
1105  * @orig bitmap over itself so that all its set bits x are in the
1106  * range 0 <= x < W.  The bitmap_fold() operator does this by
1107  * setting the bit (m % W) in @dst, for each bit (m) set in @orig.
1108  *
1109  * Example [1] for bitmap_onto():
1110  *  Let's say @relmap has bits 30-39 set, and @orig has bits
1111  *  1, 3, 5, 7, 9 and 11 set.  Then on return from this routine,
1112  *  @dst will have bits 31, 33, 35, 37 and 39 set.
1113  *
1114  *  When bit 0 is set in @orig, it means turn on the bit in
1115  *  @dst corresponding to whatever is the first bit (if any)
1116  *  that is turned on in @relmap.  Since bit 0 was off in the
1117  *  above example, we leave off that bit (bit 30) in @dst.
1118  *
1119  *  When bit 1 is set in @orig (as in the above example), it
1120  *  means turn on the bit in @dst corresponding to whatever
1121  *  is the second bit that is turned on in @relmap.  The second
1122  *  bit in @relmap that was turned on in the above example was
1123  *  bit 31, so we turned on bit 31 in @dst.
1124  *
1125  *  Similarly, we turned on bits 33, 35, 37 and 39 in @dst,
1126  *  because they were the 4th, 6th, 8th and 10th set bits
1127  *  set in @relmap, and the 4th, 6th, 8th and 10th bits of
1128  *  @orig (i.e. bits 3, 5, 7 and 9) were also set.
1129  *
1130  *  When bit 11 is set in @orig, it means turn on the bit in
1131  *  @dst corresponding to whatever is the twelfth bit that is
1132  *  turned on in @relmap.  In the above example, there were
1133  *  only ten bits turned on in @relmap (30..39), so that bit
1134  *  11 was set in @orig had no affect on @dst.
1135  *
1136  * Example [2] for bitmap_fold() + bitmap_onto():
1137  *  Let's say @relmap has these ten bits set::
1138  *
1139  *      40 41 42 43 45 48 53 61 74 95
1140  *
1141  *  (for the curious, that's 40 plus the first ten terms of the
1142  *  Fibonacci sequence.)
1143  *
1144  *  Further lets say we use the following code, invoking
1145  *  bitmap_fold() then bitmap_onto, as suggested above to
1146  *  avoid the possibility of an empty @dst result::
1147  *
1148  *  unsigned long *tmp; // a temporary bitmap's bits
1149  *
1150  *  bitmap_fold(tmp, orig, bitmap_weight(relmap, bits), bits);
1151  *  bitmap_onto(dst, tmp, relmap, bits);
1152  *
1153  *  Then this table shows what various values of @dst would be, for
1154  *  various @orig's.  I list the zero-based positions of each set bit.
1155  *  The tmp column shows the intermediate result, as computed by
1156  *  using bitmap_fold() to fold the @orig bitmap modulo ten
1157  *  (the weight of @relmap):
1158  *
1159  *      =============== ============== =================
1160  *      @orig           tmp            @dst
1161  *      0                0             40
1162  *      1                1             41
1163  *      9                9             95
1164  *      10               0             40 [#f1]_
1165  *      1 3 5 7          1 3 5 7       41 43 48 61
1166  *      0 1 2 3 4        0 1 2 3 4     40 41 42 43 45
1167  *      0 9 18 27        0 9 8 7       40 61 74 95
1168  *      0 10 20 30       0             40
1169  *      0 11 22 33       0 1 2 3       40 41 42 43
1170  *      0 12 24 36       0 2 4 6       40 42 45 53
1171  *      78 102 211       1 2 8         41 42 74 [#f1]_
1172  *      =============== ============== =================
1173  *
1174  * .. [#f1]
1175  *
1176  *     For these marked lines, if we hadn't first done bitmap_fold()
1177  *     into tmp, then the @dst result would have been empty.
1178  *
1179  * If either of @orig or @relmap is empty (no set bits), then @dst
1180  * will be returned empty.
1181  *
1182  * If (as explained above) the only set bits in @orig are in positions
1183  * m where m >= W, (where W is the weight of @relmap) then @dst will
1184  * once again be returned empty.
1185  *
1186  * All bits in @dst not set by the above rule are cleared.
1187  */
1188 void bitmap_onto(unsigned long *dst, const unsigned long *orig,
1189             const unsigned long *relmap, unsigned int bits)
1190 {
1191     unsigned int n, m;  /* same meaning as in above comment */
1192 
1193     if (dst == orig)    /* following doesn't handle inplace mappings */
1194         return;
1195     bitmap_zero(dst, bits);
1196 
1197     /*
1198      * The following code is a more efficient, but less
1199      * obvious, equivalent to the loop:
1200      *  for (m = 0; m < bitmap_weight(relmap, bits); m++) {
1201      *      n = bitmap_ord_to_pos(orig, m, bits);
1202      *      if (test_bit(m, orig))
1203      *          set_bit(n, dst);
1204      *  }
1205      */
1206 
1207     m = 0;
1208     for_each_set_bit(n, relmap, bits) {
1209         /* m == bitmap_pos_to_ord(relmap, n, bits) */
1210         if (test_bit(m, orig))
1211             set_bit(n, dst);
1212         m++;
1213     }
1214 }
1215 
1216 /**
1217  * bitmap_fold - fold larger bitmap into smaller, modulo specified size
1218  *  @dst: resulting smaller bitmap
1219  *  @orig: original larger bitmap
1220  *  @sz: specified size
1221  *  @nbits: number of bits in each of these bitmaps
1222  *
1223  * For each bit oldbit in @orig, set bit oldbit mod @sz in @dst.
1224  * Clear all other bits in @dst.  See further the comment and
1225  * Example [2] for bitmap_onto() for why and how to use this.
1226  */
1227 void bitmap_fold(unsigned long *dst, const unsigned long *orig,
1228             unsigned int sz, unsigned int nbits)
1229 {
1230     unsigned int oldbit;
1231 
1232     if (dst == orig)    /* following doesn't handle inplace mappings */
1233         return;
1234     bitmap_zero(dst, nbits);
1235 
1236     for_each_set_bit(oldbit, orig, nbits)
1237         set_bit(oldbit % sz, dst);
1238 }
1239 #endif /* CONFIG_NUMA */
1240 
1241 /*
1242  * Common code for bitmap_*_region() routines.
1243  *  bitmap: array of unsigned longs corresponding to the bitmap
1244  *  pos: the beginning of the region
1245  *  order: region size (log base 2 of number of bits)
1246  *  reg_op: operation(s) to perform on that region of bitmap
1247  *
1248  * Can set, verify and/or release a region of bits in a bitmap,
1249  * depending on which combination of REG_OP_* flag bits is set.
1250  *
1251  * A region of a bitmap is a sequence of bits in the bitmap, of
1252  * some size '1 << order' (a power of two), aligned to that same
1253  * '1 << order' power of two.
1254  *
1255  * Returns 1 if REG_OP_ISFREE succeeds (region is all zero bits).
1256  * Returns 0 in all other cases and reg_ops.
1257  */
1258 
1259 enum {
1260     REG_OP_ISFREE,      /* true if region is all zero bits */
1261     REG_OP_ALLOC,       /* set all bits in region */
1262     REG_OP_RELEASE,     /* clear all bits in region */
1263 };
1264 
1265 static int __reg_op(unsigned long *bitmap, unsigned int pos, int order, int reg_op)
1266 {
1267     int nbits_reg;      /* number of bits in region */
1268     int index;      /* index first long of region in bitmap */
1269     int offset;     /* bit offset region in bitmap[index] */
1270     int nlongs_reg;     /* num longs spanned by region in bitmap */
1271     int nbitsinlong;    /* num bits of region in each spanned long */
1272     unsigned long mask; /* bitmask for one long of region */
1273     int i;          /* scans bitmap by longs */
1274     int ret = 0;        /* return value */
1275 
1276     /*
1277      * Either nlongs_reg == 1 (for small orders that fit in one long)
1278      * or (offset == 0 && mask == ~0UL) (for larger multiword orders.)
1279      */
1280     nbits_reg = 1 << order;
1281     index = pos / BITS_PER_LONG;
1282     offset = pos - (index * BITS_PER_LONG);
1283     nlongs_reg = BITS_TO_LONGS(nbits_reg);
1284     nbitsinlong = min(nbits_reg,  BITS_PER_LONG);
1285 
1286     /*
1287      * Can't do "mask = (1UL << nbitsinlong) - 1", as that
1288      * overflows if nbitsinlong == BITS_PER_LONG.
1289      */
1290     mask = (1UL << (nbitsinlong - 1));
1291     mask += mask - 1;
1292     mask <<= offset;
1293 
1294     switch (reg_op) {
1295     case REG_OP_ISFREE:
1296         for (i = 0; i < nlongs_reg; i++) {
1297             if (bitmap[index + i] & mask)
1298                 goto done;
1299         }
1300         ret = 1;    /* all bits in region free (zero) */
1301         break;
1302 
1303     case REG_OP_ALLOC:
1304         for (i = 0; i < nlongs_reg; i++)
1305             bitmap[index + i] |= mask;
1306         break;
1307 
1308     case REG_OP_RELEASE:
1309         for (i = 0; i < nlongs_reg; i++)
1310             bitmap[index + i] &= ~mask;
1311         break;
1312     }
1313 done:
1314     return ret;
1315 }
1316 
1317 /**
1318  * bitmap_find_free_region - find a contiguous aligned mem region
1319  *  @bitmap: array of unsigned longs corresponding to the bitmap
1320  *  @bits: number of bits in the bitmap
1321  *  @order: region size (log base 2 of number of bits) to find
1322  *
1323  * Find a region of free (zero) bits in a @bitmap of @bits bits and
1324  * allocate them (set them to one).  Only consider regions of length
1325  * a power (@order) of two, aligned to that power of two, which
1326  * makes the search algorithm much faster.
1327  *
1328  * Return the bit offset in bitmap of the allocated region,
1329  * or -errno on failure.
1330  */
1331 int bitmap_find_free_region(unsigned long *bitmap, unsigned int bits, int order)
1332 {
1333     unsigned int pos, end;      /* scans bitmap by regions of size order */
1334 
1335     for (pos = 0 ; (end = pos + (1U << order)) <= bits; pos = end) {
1336         if (!__reg_op(bitmap, pos, order, REG_OP_ISFREE))
1337             continue;
1338         __reg_op(bitmap, pos, order, REG_OP_ALLOC);
1339         return pos;
1340     }
1341     return -ENOMEM;
1342 }
1343 EXPORT_SYMBOL(bitmap_find_free_region);
1344 
1345 /**
1346  * bitmap_release_region - release allocated bitmap region
1347  *  @bitmap: array of unsigned longs corresponding to the bitmap
1348  *  @pos: beginning of bit region to release
1349  *  @order: region size (log base 2 of number of bits) to release
1350  *
1351  * This is the complement to __bitmap_find_free_region() and releases
1352  * the found region (by clearing it in the bitmap).
1353  *
1354  * No return value.
1355  */
1356 void bitmap_release_region(unsigned long *bitmap, unsigned int pos, int order)
1357 {
1358     __reg_op(bitmap, pos, order, REG_OP_RELEASE);
1359 }
1360 EXPORT_SYMBOL(bitmap_release_region);
1361 
1362 /**
1363  * bitmap_allocate_region - allocate bitmap region
1364  *  @bitmap: array of unsigned longs corresponding to the bitmap
1365  *  @pos: beginning of bit region to allocate
1366  *  @order: region size (log base 2 of number of bits) to allocate
1367  *
1368  * Allocate (set bits in) a specified region of a bitmap.
1369  *
1370  * Return 0 on success, or %-EBUSY if specified region wasn't
1371  * free (not all bits were zero).
1372  */
1373 int bitmap_allocate_region(unsigned long *bitmap, unsigned int pos, int order)
1374 {
1375     if (!__reg_op(bitmap, pos, order, REG_OP_ISFREE))
1376         return -EBUSY;
1377     return __reg_op(bitmap, pos, order, REG_OP_ALLOC);
1378 }
1379 EXPORT_SYMBOL(bitmap_allocate_region);
1380 
1381 /**
1382  * bitmap_copy_le - copy a bitmap, putting the bits into little-endian order.
1383  * @dst:   destination buffer
1384  * @src:   bitmap to copy
1385  * @nbits: number of bits in the bitmap
1386  *
1387  * Require nbits % BITS_PER_LONG == 0.
1388  */
1389 #ifdef __BIG_ENDIAN
1390 void bitmap_copy_le(unsigned long *dst, const unsigned long *src, unsigned int nbits)
1391 {
1392     unsigned int i;
1393 
1394     for (i = 0; i < nbits/BITS_PER_LONG; i++) {
1395         if (BITS_PER_LONG == 64)
1396             dst[i] = cpu_to_le64(src[i]);
1397         else
1398             dst[i] = cpu_to_le32(src[i]);
1399     }
1400 }
1401 EXPORT_SYMBOL(bitmap_copy_le);
1402 #endif
1403 
1404 unsigned long *bitmap_alloc(unsigned int nbits, gfp_t flags)
1405 {
1406     return kmalloc_array(BITS_TO_LONGS(nbits), sizeof(unsigned long),
1407                  flags);
1408 }
1409 EXPORT_SYMBOL(bitmap_alloc);
1410 
1411 unsigned long *bitmap_zalloc(unsigned int nbits, gfp_t flags)
1412 {
1413     return bitmap_alloc(nbits, flags | __GFP_ZERO);
1414 }
1415 EXPORT_SYMBOL(bitmap_zalloc);
1416 
1417 unsigned long *bitmap_alloc_node(unsigned int nbits, gfp_t flags, int node)
1418 {
1419     return kmalloc_array_node(BITS_TO_LONGS(nbits), sizeof(unsigned long),
1420                   flags, node);
1421 }
1422 EXPORT_SYMBOL(bitmap_alloc_node);
1423 
1424 unsigned long *bitmap_zalloc_node(unsigned int nbits, gfp_t flags, int node)
1425 {
1426     return bitmap_alloc_node(nbits, flags | __GFP_ZERO, node);
1427 }
1428 EXPORT_SYMBOL(bitmap_zalloc_node);
1429 
1430 void bitmap_free(const unsigned long *bitmap)
1431 {
1432     kfree(bitmap);
1433 }
1434 EXPORT_SYMBOL(bitmap_free);
1435 
1436 static void devm_bitmap_free(void *data)
1437 {
1438     unsigned long *bitmap = data;
1439 
1440     bitmap_free(bitmap);
1441 }
1442 
1443 unsigned long *devm_bitmap_alloc(struct device *dev,
1444                  unsigned int nbits, gfp_t flags)
1445 {
1446     unsigned long *bitmap;
1447     int ret;
1448 
1449     bitmap = bitmap_alloc(nbits, flags);
1450     if (!bitmap)
1451         return NULL;
1452 
1453     ret = devm_add_action_or_reset(dev, devm_bitmap_free, bitmap);
1454     if (ret)
1455         return NULL;
1456 
1457     return bitmap;
1458 }
1459 EXPORT_SYMBOL_GPL(devm_bitmap_alloc);
1460 
1461 unsigned long *devm_bitmap_zalloc(struct device *dev,
1462                   unsigned int nbits, gfp_t flags)
1463 {
1464     return devm_bitmap_alloc(dev, nbits, flags | __GFP_ZERO);
1465 }
1466 EXPORT_SYMBOL_GPL(devm_bitmap_zalloc);
1467 
1468 #if BITS_PER_LONG == 64
1469 /**
1470  * bitmap_from_arr32 - copy the contents of u32 array of bits to bitmap
1471  *  @bitmap: array of unsigned longs, the destination bitmap
1472  *  @buf: array of u32 (in host byte order), the source bitmap
1473  *  @nbits: number of bits in @bitmap
1474  */
1475 void bitmap_from_arr32(unsigned long *bitmap, const u32 *buf, unsigned int nbits)
1476 {
1477     unsigned int i, halfwords;
1478 
1479     halfwords = DIV_ROUND_UP(nbits, 32);
1480     for (i = 0; i < halfwords; i++) {
1481         bitmap[i/2] = (unsigned long) buf[i];
1482         if (++i < halfwords)
1483             bitmap[i/2] |= ((unsigned long) buf[i]) << 32;
1484     }
1485 
1486     /* Clear tail bits in last word beyond nbits. */
1487     if (nbits % BITS_PER_LONG)
1488         bitmap[(halfwords - 1) / 2] &= BITMAP_LAST_WORD_MASK(nbits);
1489 }
1490 EXPORT_SYMBOL(bitmap_from_arr32);
1491 
1492 /**
1493  * bitmap_to_arr32 - copy the contents of bitmap to a u32 array of bits
1494  *  @buf: array of u32 (in host byte order), the dest bitmap
1495  *  @bitmap: array of unsigned longs, the source bitmap
1496  *  @nbits: number of bits in @bitmap
1497  */
1498 void bitmap_to_arr32(u32 *buf, const unsigned long *bitmap, unsigned int nbits)
1499 {
1500     unsigned int i, halfwords;
1501 
1502     halfwords = DIV_ROUND_UP(nbits, 32);
1503     for (i = 0; i < halfwords; i++) {
1504         buf[i] = (u32) (bitmap[i/2] & UINT_MAX);
1505         if (++i < halfwords)
1506             buf[i] = (u32) (bitmap[i/2] >> 32);
1507     }
1508 
1509     /* Clear tail bits in last element of array beyond nbits. */
1510     if (nbits % BITS_PER_LONG)
1511         buf[halfwords - 1] &= (u32) (UINT_MAX >> ((-nbits) & 31));
1512 }
1513 EXPORT_SYMBOL(bitmap_to_arr32);
1514 #endif
1515 
1516 #if (BITS_PER_LONG == 32) && defined(__BIG_ENDIAN)
1517 /**
1518  * bitmap_from_arr64 - copy the contents of u64 array of bits to bitmap
1519  *  @bitmap: array of unsigned longs, the destination bitmap
1520  *  @buf: array of u64 (in host byte order), the source bitmap
1521  *  @nbits: number of bits in @bitmap
1522  */
1523 void bitmap_from_arr64(unsigned long *bitmap, const u64 *buf, unsigned int nbits)
1524 {
1525     int n;
1526 
1527     for (n = nbits; n > 0; n -= 64) {
1528         u64 val = *buf++;
1529 
1530         *bitmap++ = val;
1531         if (n > 32)
1532             *bitmap++ = val >> 32;
1533     }
1534 
1535     /*
1536      * Clear tail bits in the last word beyond nbits.
1537      *
1538      * Negative index is OK because here we point to the word next
1539      * to the last word of the bitmap, except for nbits == 0, which
1540      * is tested implicitly.
1541      */
1542     if (nbits % BITS_PER_LONG)
1543         bitmap[-1] &= BITMAP_LAST_WORD_MASK(nbits);
1544 }
1545 EXPORT_SYMBOL(bitmap_from_arr64);
1546 
1547 /**
1548  * bitmap_to_arr64 - copy the contents of bitmap to a u64 array of bits
1549  *  @buf: array of u64 (in host byte order), the dest bitmap
1550  *  @bitmap: array of unsigned longs, the source bitmap
1551  *  @nbits: number of bits in @bitmap
1552  */
1553 void bitmap_to_arr64(u64 *buf, const unsigned long *bitmap, unsigned int nbits)
1554 {
1555     const unsigned long *end = bitmap + BITS_TO_LONGS(nbits);
1556 
1557     while (bitmap < end) {
1558         *buf = *bitmap++;
1559         if (bitmap < end)
1560             *buf |= (u64)(*bitmap++) << 32;
1561         buf++;
1562     }
1563 
1564     /* Clear tail bits in the last element of array beyond nbits. */
1565     if (nbits % 64)
1566         buf[-1] &= GENMASK_ULL((nbits - 1) % 64, 0);
1567 }
1568 EXPORT_SYMBOL(bitmap_to_arr64);
1569 #endif