a given number of times.
Set a variable that allows reclaims to occur for a specific count for
testing.
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
else
mt_dump_node(entry, 0, mt_max[mt_node_type(entry)], 0);
}
+void mt_set_non_kernel(unsigned int val)
+{
+ kmem_cache_set_non_kernel(maple_node_cache, val);
+}
#endif
check_load(&tree, set[1], &tree);
check_load(&tree, set[2], ptr);
check_load(&tree, set[3], &tree);
+ mt_set_non_kernel(1);
check_erase(&tree, set[1]);
check_load(&tree, set[1], NULL);
+
return 0;
check_insert(&tree, set[4], ptr); // 1000 < Should split.
check_load(&tree, set[0], ptr);
int nr_objs;
void *objs;
void (*ctor)(void *);
+ unsigned int non_kernel;
};
+void kmem_cache_set_non_kernel(struct kmem_cache *cachep, unsigned int val)
+{
+ cachep->non_kernel = val;
+}
+
void *kmem_cache_alloc(struct kmem_cache *cachep, int gfp)
{
void *p;
- if (!(gfp & __GFP_DIRECT_RECLAIM))
+ if (!(gfp & __GFP_DIRECT_RECLAIM) && !cachep->non_kernel)
return NULL;
+ if (!(gfp & __GFP_DIRECT_RECLAIM))
+ cachep->non_kernel--;
+
pthread_mutex_lock(&cachep->lock);
if (cachep->nr_objs) {
struct radix_tree_node *node = cachep->objs;