55#include <linux/gfp.h>
66#include <linux/kmemleak.h>
77
8- #define GENRADIX_ARY (PAGE_SIZE / sizeof(struct genradix_node *))
8+ #define GENRADIX_ARY (GENRADIX_NODE_SIZE / sizeof(struct genradix_node *))
99#define GENRADIX_ARY_SHIFT ilog2(GENRADIX_ARY)
1010
1111struct genradix_node {
@@ -14,13 +14,13 @@ struct genradix_node {
1414 struct genradix_node * children [GENRADIX_ARY ];
1515
1616 /* Leaf: */
17- u8 data [PAGE_SIZE ];
17+ u8 data [GENRADIX_NODE_SIZE ];
1818 };
1919};
2020
2121static inline int genradix_depth_shift (unsigned depth )
2222{
23- return PAGE_SHIFT + GENRADIX_ARY_SHIFT * depth ;
23+ return GENRADIX_NODE_SHIFT + GENRADIX_ARY_SHIFT * depth ;
2424}
2525
2626/*
@@ -33,7 +33,7 @@ static inline size_t genradix_depth_size(unsigned depth)
3333
3434/* depth that's needed for a genradix that can address up to ULONG_MAX: */
3535#define GENRADIX_MAX_DEPTH \
36- DIV_ROUND_UP(BITS_PER_LONG - PAGE_SHIFT , GENRADIX_ARY_SHIFT)
36+ DIV_ROUND_UP(BITS_PER_LONG - GENRADIX_NODE_SHIFT , GENRADIX_ARY_SHIFT)
3737
3838#define GENRADIX_DEPTH_MASK \
3939 ((unsigned long) (roundup_pow_of_two(GENRADIX_MAX_DEPTH + 1) - 1))
@@ -79,23 +79,12 @@ EXPORT_SYMBOL(__genradix_ptr);
7979
8080static inline struct genradix_node * genradix_alloc_node (gfp_t gfp_mask )
8181{
82- struct genradix_node * node ;
83-
84- node = (struct genradix_node * )__get_free_page (gfp_mask |__GFP_ZERO );
85-
86- /*
87- * We're using pages (not slab allocations) directly for kernel data
88- * structures, so we need to explicitly inform kmemleak of them in order
89- * to avoid false positive memory leak reports.
90- */
91- kmemleak_alloc (node , PAGE_SIZE , 1 , gfp_mask );
92- return node ;
82+ return kzalloc (GENRADIX_NODE_SIZE , gfp_mask );
9383}
9484
9585static inline void genradix_free_node (struct genradix_node * node )
9686{
97- kmemleak_free (node );
98- free_page ((unsigned long )node );
87+ kfree (node );
9988}
10089
10190/*
@@ -200,7 +189,7 @@ void *__genradix_iter_peek(struct genradix_iter *iter,
200189 i ++ ;
201190 iter -> offset = round_down (iter -> offset + objs_per_ptr ,
202191 objs_per_ptr );
203- iter -> pos = (iter -> offset >> PAGE_SHIFT ) *
192+ iter -> pos = (iter -> offset >> GENRADIX_NODE_SHIFT ) *
204193 objs_per_page ;
205194 if (i == GENRADIX_ARY )
206195 goto restart ;
@@ -209,7 +198,7 @@ void *__genradix_iter_peek(struct genradix_iter *iter,
209198 n = n -> children [i ];
210199 }
211200
212- return & n -> data [iter -> offset & (PAGE_SIZE - 1 )];
201+ return & n -> data [iter -> offset & (GENRADIX_NODE_SIZE - 1 )];
213202}
214203EXPORT_SYMBOL (__genradix_iter_peek );
215204
@@ -235,7 +224,7 @@ void *__genradix_iter_peek_prev(struct genradix_iter *iter,
235224
236225 if (ilog2 (iter -> offset ) >= genradix_depth_shift (level )) {
237226 iter -> offset = genradix_depth_size (level );
238- iter -> pos = (iter -> offset >> PAGE_SHIFT ) * objs_per_page ;
227+ iter -> pos = (iter -> offset >> GENRADIX_NODE_SHIFT ) * objs_per_page ;
239228
240229 iter -> offset -= obj_size_plus_page_remainder ;
241230 iter -> pos -- ;
@@ -251,7 +240,7 @@ void *__genradix_iter_peek_prev(struct genradix_iter *iter,
251240 size_t objs_per_ptr = genradix_depth_size (level );
252241
253242 iter -> offset = round_down (iter -> offset , objs_per_ptr );
254- iter -> pos = (iter -> offset >> PAGE_SHIFT ) * objs_per_page ;
243+ iter -> pos = (iter -> offset >> GENRADIX_NODE_SHIFT ) * objs_per_page ;
255244
256245 if (!iter -> offset )
257246 return NULL ;
@@ -267,7 +256,7 @@ void *__genradix_iter_peek_prev(struct genradix_iter *iter,
267256 n = n -> children [i ];
268257 }
269258
270- return & n -> data [iter -> offset & (PAGE_SIZE - 1 )];
259+ return & n -> data [iter -> offset & (GENRADIX_NODE_SIZE - 1 )];
271260}
272261EXPORT_SYMBOL (__genradix_iter_peek_prev );
273262
@@ -289,7 +278,7 @@ int __genradix_prealloc(struct __genradix *radix, size_t size,
289278{
290279 size_t offset ;
291280
292- for (offset = 0 ; offset < size ; offset += PAGE_SIZE )
281+ for (offset = 0 ; offset < size ; offset += GENRADIX_NODE_SIZE )
293282 if (!__genradix_ptr_alloc (radix , offset , gfp_mask ))
294283 return - ENOMEM ;
295284
0 commit comments