On Wed, Apr 28, 2021 at 8:36 AM Liam Howlett <liam.howlett@xxxxxxxxxx> wrote: > I know you have v2 for the first part of this patchset, I'm just going over the whole thing... There should be some description here of what the new struct member and new function are for. Ideally you would also split it in two because it introduces two seemingly independent additions: non_kernel and kmem_cache_get_alloc. > Signed-off-by: Liam R. Howlett <Liam.Howlett@xxxxxxxxxx> > Signed-off-by: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx> > --- > tools/testing/radix-tree/linux.c | 16 +++++++++++++++- > tools/testing/radix-tree/linux/kernel.h | 1 + > 2 files changed, 16 insertions(+), 1 deletion(-) > > diff --git a/tools/testing/radix-tree/linux.c b/tools/testing/radix-tree/linux.c > index 2d9c59df60de..93f7de81fbe8 100644 > --- a/tools/testing/radix-tree/linux.c > +++ b/tools/testing/radix-tree/linux.c > @@ -24,15 +24,28 @@ struct kmem_cache { > 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; > +} > + > +unsigned long kmem_cache_get_alloc(struct kmem_cache *cachep) > +{ > + return cachep->size * nr_allocated; IIUC nr_allocated is incremented/decremented every time memory is allocated/freed from *any* kmem_cache. Each kmem_cache has its own size. So, nr_allocated counts allocated objects of potentially different sizes. If that is so then I'm unclear what the result of this multiplication would represent. > +} > 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; > @@ -116,5 +129,6 @@ kmem_cache_create(const char *name, unsigned int size, unsigned int align, > ret->nr_objs = 0; > ret->objs = NULL; > ret->ctor = ctor; > + ret->non_kernel = 0; > return ret; > } > diff --git a/tools/testing/radix-tree/linux/kernel.h b/tools/testing/radix-tree/linux/kernel.h > index 39867fd80c8f..c5c9d05f29da 100644 > --- a/tools/testing/radix-tree/linux/kernel.h > +++ b/tools/testing/radix-tree/linux/kernel.h > @@ -14,6 +14,7 @@ > #include "../../../include/linux/kconfig.h" > > #define printk printf > +#define pr_err printk > #define pr_info printk > #define pr_debug printk > #define pr_cont printk > -- > 2.30.2