LCOV - code coverage report
Current view: top level - include/asm-generic - getorder.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 3 0.0 %
Date: 2014-02-18 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : #ifndef __ASM_GENERIC_GETORDER_H
       2                 :            : #define __ASM_GENERIC_GETORDER_H
       3                 :            : 
       4                 :            : #ifndef __ASSEMBLY__
       5                 :            : 
       6                 :            : #include <linux/compiler.h>
       7                 :            : #include <linux/log2.h>
       8                 :            : 
       9                 :            : /*
      10                 :            :  * Runtime evaluation of get_order()
      11                 :            :  */
      12                 :            : static inline __attribute_const__
      13                 :            : int __get_order(unsigned long size)
      14                 :            : {
      15                 :            :         int order;
      16                 :            : 
      17                 :          0 :         size--;
      18                 :          0 :         size >>= PAGE_SHIFT;
      19                 :            : #if BITS_PER_LONG == 32
      20                 :          0 :         order = fls(size);
      21                 :            : #else
      22                 :            :         order = fls64(size);
      23                 :            : #endif
      24                 :            :         return order;
      25                 :            : }
      26                 :            : 
      27                 :            : /**
      28                 :            :  * get_order - Determine the allocation order of a memory size
      29                 :            :  * @size: The size for which to get the order
      30                 :            :  *
      31                 :            :  * Determine the allocation order of a particular sized block of memory.  This
      32                 :            :  * is on a logarithmic scale, where:
      33                 :            :  *
      34                 :            :  *      0 -> 2^0 * PAGE_SIZE and below
      35                 :            :  *      1 -> 2^1 * PAGE_SIZE to 2^0 * PAGE_SIZE + 1
      36                 :            :  *      2 -> 2^2 * PAGE_SIZE to 2^1 * PAGE_SIZE + 1
      37                 :            :  *      3 -> 2^3 * PAGE_SIZE to 2^2 * PAGE_SIZE + 1
      38                 :            :  *      4 -> 2^4 * PAGE_SIZE to 2^3 * PAGE_SIZE + 1
      39                 :            :  *      ...
      40                 :            :  *
      41                 :            :  * The order returned is used to find the smallest allocation granule required
      42                 :            :  * to hold an object of the specified size.
      43                 :            :  *
      44                 :            :  * The result is undefined if the size is 0.
      45                 :            :  *
      46                 :            :  * This function may be used to initialise variables with compile time
      47                 :            :  * evaluations of constants.
      48                 :            :  */
      49                 :            : #define get_order(n)                                            \
      50                 :            : (                                                               \
      51                 :            :         __builtin_constant_p(n) ? (                             \
      52                 :            :                 ((n) == 0UL) ? BITS_PER_LONG - PAGE_SHIFT :     \
      53                 :            :                 (((n) < (1UL << PAGE_SHIFT)) ? 0 :             \
      54                 :            :                  ilog2((n) - 1) - PAGE_SHIFT + 1)               \
      55                 :            :         ) :                                                     \
      56                 :            :         __get_order(n)                                          \
      57                 :            : )
      58                 :            : 
      59                 :            : #endif  /* __ASSEMBLY__ */
      60                 :            : 
      61                 :            : #endif  /* __ASM_GENERIC_GETORDER_H */

Generated by: LCOV version 1.9