|
|
@@ -7,24 +7,6 @@
|
|
|
#include <linux/compiler.h>
|
|
|
#include <linux/log2.h>
|
|
|
|
|
|
-/*
|
|
|
- * Runtime evaluation of get_order()
|
|
|
- */
|
|
|
-static inline __attribute_const__
|
|
|
-int __get_order(unsigned long size)
|
|
|
-{
|
|
|
- int order;
|
|
|
-
|
|
|
- size--;
|
|
|
- size >>= PAGE_SHIFT;
|
|
|
-#if BITS_PER_LONG == 32
|
|
|
- order = fls(size);
|
|
|
-#else
|
|
|
- order = fls64(size);
|
|
|
-#endif
|
|
|
- return order;
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* get_order - Determine the allocation order of a memory size
|
|
|
* @size: The size for which to get the order
|
|
|
@@ -43,19 +25,27 @@ int __get_order(unsigned long size)
|
|
|
* to hold an object of the specified size.
|
|
|
*
|
|
|
* The result is undefined if the size is 0.
|
|
|
- *
|
|
|
- * This function may be used to initialise variables with compile time
|
|
|
- * evaluations of constants.
|
|
|
*/
|
|
|
-#define get_order(n) \
|
|
|
-( \
|
|
|
- __builtin_constant_p(n) ? ( \
|
|
|
- ((n) == 0UL) ? BITS_PER_LONG - PAGE_SHIFT : \
|
|
|
- (((n) < (1UL << PAGE_SHIFT)) ? 0 : \
|
|
|
- ilog2((n) - 1) - PAGE_SHIFT + 1) \
|
|
|
- ) : \
|
|
|
- __get_order(n) \
|
|
|
-)
|
|
|
+static inline __attribute_const__ int get_order(unsigned long size)
|
|
|
+{
|
|
|
+ if (__builtin_constant_p(size)) {
|
|
|
+ if (!size)
|
|
|
+ return BITS_PER_LONG - PAGE_SHIFT;
|
|
|
+
|
|
|
+ if (size < (1UL << PAGE_SHIFT))
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ return ilog2((size) - 1) - PAGE_SHIFT + 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ size--;
|
|
|
+ size >>= PAGE_SHIFT;
|
|
|
+#if BITS_PER_LONG == 32
|
|
|
+ return fls(size);
|
|
|
+#else
|
|
|
+ return fls64(size);
|
|
|
+#endif
|
|
|
+}
|
|
|
|
|
|
#endif /* __ASSEMBLY__ */
|
|
|
|