mirror of
https://github.com/Qortal/Brooklyn.git
synced 2025-02-07 06:44:18 +00:00
* 0day explit mitigation * Memory corruption prevention * Privilege escalation prevention * Buffer over flow prevention * File System corruption defense * Thread escape prevention This may very well be the most intensive inclusion to BrooklynR. This will not be part of an x86 suite nor it will be released as tool kit. The security core toolkit will remain part of kernel base.
62 lines
1.4 KiB
C
62 lines
1.4 KiB
C
#ifndef __ASM_GENERIC_GETORDER_H
|
|
#define __ASM_GENERIC_GETORDER_H
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
#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
|
|
*
|
|
* Determine the allocation order of a particular sized block of memory. This
|
|
* is on a logarithmic scale, where:
|
|
*
|
|
* 0 -> 2^0 * PAGE_SIZE and below
|
|
* 1 -> 2^1 * PAGE_SIZE to 2^0 * PAGE_SIZE + 1
|
|
* 2 -> 2^2 * PAGE_SIZE to 2^1 * PAGE_SIZE + 1
|
|
* 3 -> 2^3 * PAGE_SIZE to 2^2 * PAGE_SIZE + 1
|
|
* 4 -> 2^4 * PAGE_SIZE to 2^3 * PAGE_SIZE + 1
|
|
* ...
|
|
*
|
|
* The order returned is used to find the smallest allocation granule required
|
|
* 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) \
|
|
)
|
|
|
|
#endif /* __ASSEMBLY__ */
|
|
|
|
#endif /* __ASM_GENERIC_GETORDER_H */
|