]> Git Repo - J-linux.git/blobdiff - lib/bitmap.c
sysctl: delete unused define SYSCTL_PERM_EMPTY_DIR
[J-linux.git] / lib / bitmap.c
index babed4dcb4679627778e6a0b1c09f9167b842788..09522af227f17efdf12e55763cc278acf87d5ba7 100644 (file)
@@ -8,7 +8,6 @@
 #include <linux/bitops.h>
 #include <linux/ctype.h>
 #include <linux/device.h>
-#include <linux/errno.h>
 #include <linux/export.h>
 #include <linux/slab.h>
 
@@ -708,145 +707,6 @@ void bitmap_fold(unsigned long *dst, const unsigned long *orig,
 }
 #endif /* CONFIG_NUMA */
 
-/*
- * Common code for bitmap_*_region() routines.
- *     bitmap: array of unsigned longs corresponding to the bitmap
- *     pos: the beginning of the region
- *     order: region size (log base 2 of number of bits)
- *     reg_op: operation(s) to perform on that region of bitmap
- *
- * Can set, verify and/or release a region of bits in a bitmap,
- * depending on which combination of REG_OP_* flag bits is set.
- *
- * A region of a bitmap is a sequence of bits in the bitmap, of
- * some size '1 << order' (a power of two), aligned to that same
- * '1 << order' power of two.
- *
- * Return: 1 if REG_OP_ISFREE succeeds (region is all zero bits).
- *        0 in all other cases and reg_ops.
- */
-
-enum {
-       REG_OP_ISFREE,          /* true if region is all zero bits */
-       REG_OP_ALLOC,           /* set all bits in region */
-       REG_OP_RELEASE,         /* clear all bits in region */
-};
-
-static int __reg_op(unsigned long *bitmap, unsigned int pos, int order, int reg_op)
-{
-       int nbits_reg;          /* number of bits in region */
-       int index;              /* index first long of region in bitmap */
-       int offset;             /* bit offset region in bitmap[index] */
-       int nlongs_reg;         /* num longs spanned by region in bitmap */
-       int nbitsinlong;        /* num bits of region in each spanned long */
-       unsigned long mask;     /* bitmask for one long of region */
-       int i;                  /* scans bitmap by longs */
-       int ret = 0;            /* return value */
-
-       /*
-        * Either nlongs_reg == 1 (for small orders that fit in one long)
-        * or (offset == 0 && mask == ~0UL) (for larger multiword orders.)
-        */
-       nbits_reg = 1 << order;
-       index = pos / BITS_PER_LONG;
-       offset = pos - (index * BITS_PER_LONG);
-       nlongs_reg = BITS_TO_LONGS(nbits_reg);
-       nbitsinlong = min(nbits_reg,  BITS_PER_LONG);
-
-       /*
-        * Can't do "mask = (1UL << nbitsinlong) - 1", as that
-        * overflows if nbitsinlong == BITS_PER_LONG.
-        */
-       mask = (1UL << (nbitsinlong - 1));
-       mask += mask - 1;
-       mask <<= offset;
-
-       switch (reg_op) {
-       case REG_OP_ISFREE:
-               for (i = 0; i < nlongs_reg; i++) {
-                       if (bitmap[index + i] & mask)
-                               goto done;
-               }
-               ret = 1;        /* all bits in region free (zero) */
-               break;
-
-       case REG_OP_ALLOC:
-               for (i = 0; i < nlongs_reg; i++)
-                       bitmap[index + i] |= mask;
-               break;
-
-       case REG_OP_RELEASE:
-               for (i = 0; i < nlongs_reg; i++)
-                       bitmap[index + i] &= ~mask;
-               break;
-       }
-done:
-       return ret;
-}
-
-/**
- * bitmap_find_free_region - find a contiguous aligned mem region
- *     @bitmap: array of unsigned longs corresponding to the bitmap
- *     @bits: number of bits in the bitmap
- *     @order: region size (log base 2 of number of bits) to find
- *
- * Find a region of free (zero) bits in a @bitmap of @bits bits and
- * allocate them (set them to one).  Only consider regions of length
- * a power (@order) of two, aligned to that power of two, which
- * makes the search algorithm much faster.
- *
- * Return: the bit offset in bitmap of the allocated region,
- * or -errno on failure.
- */
-int bitmap_find_free_region(unsigned long *bitmap, unsigned int bits, int order)
-{
-       unsigned int pos, end;          /* scans bitmap by regions of size order */
-
-       for (pos = 0; (end = pos + BIT(order)) <= bits; pos = end) {
-               if (!bitmap_allocate_region(bitmap, pos, order))
-                       return pos;
-       }
-       return -ENOMEM;
-}
-EXPORT_SYMBOL(bitmap_find_free_region);
-
-/**
- * bitmap_release_region - release allocated bitmap region
- *     @bitmap: array of unsigned longs corresponding to the bitmap
- *     @pos: beginning of bit region to release
- *     @order: region size (log base 2 of number of bits) to release
- *
- * This is the complement to __bitmap_find_free_region() and releases
- * the found region (by clearing it in the bitmap).
- */
-void bitmap_release_region(unsigned long *bitmap, unsigned int pos, int order)
-{
-       bitmap_clear(bitmap, pos, BIT(order));
-}
-EXPORT_SYMBOL(bitmap_release_region);
-
-/**
- * bitmap_allocate_region - allocate bitmap region
- *     @bitmap: array of unsigned longs corresponding to the bitmap
- *     @pos: beginning of bit region to allocate
- *     @order: region size (log base 2 of number of bits) to allocate
- *
- * Allocate (set bits in) a specified region of a bitmap.
- *
- * Return: 0 on success, or %-EBUSY if specified region wasn't
- * free (not all bits were zero).
- */
-int bitmap_allocate_region(unsigned long *bitmap, unsigned int pos, int order)
-{
-       unsigned int len = BIT(order);
-
-       if (!__reg_op(bitmap, pos, order, REG_OP_ISFREE))
-               return -EBUSY;
-       bitmap_set(bitmap, pos, len);
-       return 0;
-}
-EXPORT_SYMBOL(bitmap_allocate_region);
-
 unsigned long *bitmap_alloc(unsigned int nbits, gfp_t flags)
 {
        return kmalloc_array(BITS_TO_LONGS(nbits), sizeof(unsigned long),
This page took 0.025107 seconds and 4 git commands to generate.