Peter Zijlstra wrote:
quoted
quoted
+/*
+ * Calculate the upper bound of pages requires to sequentially allocate @bytes
+ * from kmalloc in an unspecified number of allocations of nonuniform size.
+ */
+unsigned kmalloc_estimate_variable(gfp_t flags, size_t bytes)
+{
+ int i;
+ unsigned long pages;
+
+ /*
+ * multiply by two, in order to account the worst case slack space
+ * due to the power-of-two allocation sizes.
+ */
+ pages = DIV_ROUND_UP(2 * bytes, PAGE_SIZE);
For bytes > PAGE_SIZE this doesn't look right (for SLUB). We do page
allocator pass-through which means that we'll be grabbing high order
pages which can be bigger than what 'pages' is here.
Satisfying allocations from a bucket distribution with power-of-two
(which page alloc order satisfies) has a worst case slack space of:
S(x) = 2^n - (2^(n-1)) - 1, n = ceil(log2(x))
This can be seen for the cases where x = 2^i + 1.
The needed bytes for a kmalloc allocation with size > PAGE_SIZE is
get_order(size) << PAGE_SHIFT bytes.
See kmalloc_large().