linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 2/4] radix tree test suite: Add __must_be_array() support
  2021-05-12 18:48 [PATCH 1/4] radix tree test suite: Add support for fallthrough attribute Liam Howlett
@ 2021-05-12 18:48 ` Liam Howlett
  2021-05-12 21:46   ` Matthew Wilcox
  2021-05-12 18:48 ` [PATCH 3/4] radix tree test suite: Add kmem_cache enhancements and pr_err Liam Howlett
  2021-05-12 18:48 ` [PATCH 4/4] radix tree test suite: Add support for slab bulk APIs Liam Howlett
  2 siblings, 1 reply; 6+ messages in thread
From: Liam Howlett @ 2021-05-12 18:48 UTC (permalink / raw)
  To: linux-fsdevel, linux-kernel, Matthew Wilcox; +Cc: Liam Howlett

Copy __must_be_array() define from include/linux/compiler.h for use in
the radix tree test suite userspace compiles.

Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
---
 tools/testing/radix-tree/linux/kernel.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/testing/radix-tree/linux/kernel.h b/tools/testing/radix-tree/linux/kernel.h
index c400a27e544a..2c3771fff2c0 100644
--- a/tools/testing/radix-tree/linux/kernel.h
+++ b/tools/testing/radix-tree/linux/kernel.h
@@ -30,4 +30,6 @@
 # define fallthrough                    do {} while (0)  /* fallthrough */
 #endif /* __has_attribute */
 
+#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
+
 #endif /* _KERNEL_H */
-- 
2.30.2

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 1/4] radix tree test suite: Add support for fallthrough attribute
@ 2021-05-12 18:48 Liam Howlett
  2021-05-12 18:48 ` [PATCH 2/4] radix tree test suite: Add __must_be_array() support Liam Howlett
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Liam Howlett @ 2021-05-12 18:48 UTC (permalink / raw)
  To: linux-fsdevel, linux-kernel, Matthew Wilcox; +Cc: Liam Howlett

Add support for fallthrough on case statements.  Note this does *NOT*
check for missing fallthrough, but does allow compiling of code with
fallthrough in case statements.

Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
---
 tools/testing/radix-tree/linux/kernel.h | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/tools/testing/radix-tree/linux/kernel.h b/tools/testing/radix-tree/linux/kernel.h
index 39867fd80c8f..c400a27e544a 100644
--- a/tools/testing/radix-tree/linux/kernel.h
+++ b/tools/testing/radix-tree/linux/kernel.h
@@ -23,4 +23,11 @@
 #define __must_hold(x)
 
 #define EXPORT_PER_CPU_SYMBOL_GPL(x)
+
+#if __has_attribute(__fallthrough__)
+# define fallthrough                    __attribute__((__fallthrough__))
+#else
+# define fallthrough                    do {} while (0)  /* fallthrough */
+#endif /* __has_attribute */
+
 #endif /* _KERNEL_H */
-- 
2.30.2

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/4] radix tree test suite: Add kmem_cache enhancements and pr_err
  2021-05-12 18:48 [PATCH 1/4] radix tree test suite: Add support for fallthrough attribute Liam Howlett
  2021-05-12 18:48 ` [PATCH 2/4] radix tree test suite: Add __must_be_array() support Liam Howlett
@ 2021-05-12 18:48 ` Liam Howlett
  2021-05-12 18:48 ` [PATCH 4/4] radix tree test suite: Add support for slab bulk APIs Liam Howlett
  2 siblings, 0 replies; 6+ messages in thread
From: Liam Howlett @ 2021-05-12 18:48 UTC (permalink / raw)
  To: linux-fsdevel, linux-kernel, Matthew Wilcox; +Cc: Liam Howlett

Add kmem_cache_set_non_kernel(), a mechanism to allow a certain number
of kmem_cache_alloc requests to succeed even when GFP_KERNEL is not set
in the flags.

Add kmem_cache_get_alloc() to see the size of the allocated kmem_cache.

Add a define of pr_err to printk.

Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 tools/testing/radix-tree/linux.c        | 20 ++++++++++++++++++--
 tools/testing/radix-tree/linux/kernel.h |  1 +
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/tools/testing/radix-tree/linux.c b/tools/testing/radix-tree/linux.c
index 2d9c59df60de..7225b5c46bb6 100644
--- a/tools/testing/radix-tree/linux.c
+++ b/tools/testing/radix-tree/linux.c
@@ -24,14 +24,29 @@ 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;
+}
+
 void *kmem_cache_alloc(struct kmem_cache *cachep, int gfp)
 {
 	void *p;
 
-	if (!(gfp & __GFP_DIRECT_RECLAIM))
-		return NULL;
+	if (!(gfp & __GFP_DIRECT_RECLAIM)) {
+		if (!cachep->non_kernel)
+			return NULL;
+
+		cachep->non_kernel--;
+	}
 
 	pthread_mutex_lock(&cachep->lock);
 	if (cachep->nr_objs) {
@@ -116,5 +131,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 2c3771fff2c0..e44603a181da 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

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 4/4] radix tree test suite: Add support for slab bulk APIs
  2021-05-12 18:48 [PATCH 1/4] radix tree test suite: Add support for fallthrough attribute Liam Howlett
  2021-05-12 18:48 ` [PATCH 2/4] radix tree test suite: Add __must_be_array() support Liam Howlett
  2021-05-12 18:48 ` [PATCH 3/4] radix tree test suite: Add kmem_cache enhancements and pr_err Liam Howlett
@ 2021-05-12 18:48 ` Liam Howlett
  2 siblings, 0 replies; 6+ messages in thread
From: Liam Howlett @ 2021-05-12 18:48 UTC (permalink / raw)
  To: linux-fsdevel, linux-kernel, Matthew Wilcox; +Cc: Liam Howlett

Add support for kmem_cache_free_bulk() and kmem_cache_alloc_bulk() to
the radix tree test suite.

Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
---
 tools/testing/radix-tree/linux.c      | 61 +++++++++++++++++++++++++++
 tools/testing/radix-tree/linux/slab.h |  3 ++
 2 files changed, 64 insertions(+)

diff --git a/tools/testing/radix-tree/linux.c b/tools/testing/radix-tree/linux.c
index 7225b5c46bb6..726407f934d3 100644
--- a/tools/testing/radix-tree/linux.c
+++ b/tools/testing/radix-tree/linux.c
@@ -93,6 +93,67 @@ void kmem_cache_free(struct kmem_cache *cachep, void *objp)
 	pthread_mutex_unlock(&cachep->lock);
 }
 
+void kmem_cache_free_bulk(struct kmem_cache *cachep, size_t size, void **list)
+{
+	if (kmalloc_verbose)
+		printk("Bulk free %p[0-%lu]\n", list, size - 1);
+
+	for (int i = 0; i < size; i++)
+		kmem_cache_free(cachep, list[i]);
+}
+
+int kmem_cache_alloc_bulk(struct kmem_cache *cachep, gfp_t gfp, size_t size,
+			  void **p)
+{
+	size_t i;
+
+	if (kmalloc_verbose)
+		printk("Bulk alloc %lu\n", size);
+
+	if (!(gfp & __GFP_DIRECT_RECLAIM)) {
+		if (cachep->non_kernel < size)
+			return 0;
+
+		cachep->non_kernel -= size;
+	}
+
+	pthread_mutex_lock(&cachep->lock);
+	if (cachep->nr_objs >= size) {
+		struct radix_tree_node *node = cachep->objs;
+
+		for (i = 0; i < size; i++) {
+			cachep->nr_objs--;
+			cachep->objs = node->parent;
+			p[i] = cachep->objs;
+		}
+		pthread_mutex_unlock(&cachep->lock);
+		node->parent = NULL;
+	} else {
+		pthread_mutex_unlock(&cachep->lock);
+		for (i = 0; i < size; i++) {
+			if (cachep->align) {
+				posix_memalign(&p[i], cachep->align,
+					       cachep->size * size);
+			} else {
+				p[i] = malloc(cachep->size * size);
+			}
+			if (cachep->ctor)
+				cachep->ctor(p[i]);
+			else if (gfp & __GFP_ZERO)
+				memset(p[i], 0, cachep->size);
+		}
+	}
+
+	for (i = 0; i < size; i++) {
+		uatomic_inc(&nr_allocated);
+		uatomic_inc(&nr_tallocated);
+		if (kmalloc_verbose)
+			printf("Allocating %p from slab\n", p[i]);
+	}
+
+	return size;
+}
+
 void *kmalloc(size_t size, gfp_t gfp)
 {
 	void *ret;
diff --git a/tools/testing/radix-tree/linux/slab.h b/tools/testing/radix-tree/linux/slab.h
index 2958830ce4d7..de3befdf14df 100644
--- a/tools/testing/radix-tree/linux/slab.h
+++ b/tools/testing/radix-tree/linux/slab.h
@@ -24,4 +24,7 @@ struct kmem_cache *kmem_cache_create(const char *name, unsigned int size,
 			unsigned int align, unsigned int flags,
 			void (*ctor)(void *));
 
+void kmem_cache_free_bulk(struct kmem_cache *cachep, size_t, void **);
+int kmem_cache_alloc_bulk(struct kmem_cache *cachep, gfp_t, size_t, void **);
+
 #endif		/* SLAB_H */
-- 
2.30.2

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 2/4] radix tree test suite: Add __must_be_array() support
  2021-05-12 18:48 ` [PATCH 2/4] radix tree test suite: Add __must_be_array() support Liam Howlett
@ 2021-05-12 21:46   ` Matthew Wilcox
  2021-05-12 22:13     ` Liam Howlett
  0 siblings, 1 reply; 6+ messages in thread
From: Matthew Wilcox @ 2021-05-12 21:46 UTC (permalink / raw)
  To: Liam Howlett; +Cc: linux-fsdevel, linux-kernel

On Wed, May 12, 2021 at 06:48:52PM +0000, Liam Howlett wrote:
> Copy __must_be_array() define from include/linux/compiler.h for use in
> the radix tree test suite userspace compiles.

We needed this earlier, but see commit
7487de534dcbe143e6f41da751dd3ffcf93b00ee

I bet if you revert this commit, it'll still build fine.

Also, I bet patch 1/4 is the same -- I see a definition of
fallthrough in tools/include/linux/compiler-gcc.h

> Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
> ---
>  tools/testing/radix-tree/linux/kernel.h | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/tools/testing/radix-tree/linux/kernel.h b/tools/testing/radix-tree/linux/kernel.h
> index c400a27e544a..2c3771fff2c0 100644
> --- a/tools/testing/radix-tree/linux/kernel.h
> +++ b/tools/testing/radix-tree/linux/kernel.h
> @@ -30,4 +30,6 @@
>  # define fallthrough                    do {} while (0)  /* fallthrough */
>  #endif /* __has_attribute */
>  
> +#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
> +
>  #endif /* _KERNEL_H */
> -- 
> 2.30.2

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 2/4] radix tree test suite: Add __must_be_array() support
  2021-05-12 21:46   ` Matthew Wilcox
@ 2021-05-12 22:13     ` Liam Howlett
  0 siblings, 0 replies; 6+ messages in thread
From: Liam Howlett @ 2021-05-12 22:13 UTC (permalink / raw)
  To: Matthew Wilcox; +Cc: linux-fsdevel, linux-kernel

* Matthew Wilcox <willy@infradead.org> [210512 17:48]:
> On Wed, May 12, 2021 at 06:48:52PM +0000, Liam Howlett wrote:
> > Copy __must_be_array() define from include/linux/compiler.h for use in
> > the radix tree test suite userspace compiles.
> 
> We needed this earlier, but see commit
> 7487de534dcbe143e6f41da751dd3ffcf93b00ee
> 
> I bet if you revert this commit, it'll still build fine.
> 
> Also, I bet patch 1/4 is the same -- I see a definition of
> fallthrough in tools/include/linux/compiler-gcc.h

You are correct.  Please disregard patch 1 and 2.

Thanks,
Liam

> 
> > Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
> > ---
> >  tools/testing/radix-tree/linux/kernel.h | 2 ++
> >  1 file changed, 2 insertions(+)
> > 
> > diff --git a/tools/testing/radix-tree/linux/kernel.h b/tools/testing/radix-tree/linux/kernel.h
> > index c400a27e544a..2c3771fff2c0 100644
> > --- a/tools/testing/radix-tree/linux/kernel.h
> > +++ b/tools/testing/radix-tree/linux/kernel.h
> > @@ -30,4 +30,6 @@
> >  # define fallthrough                    do {} while (0)  /* fallthrough */
> >  #endif /* __has_attribute */
> >  
> > +#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
> > +
> >  #endif /* _KERNEL_H */
> > -- 
> > 2.30.2

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-05-12 22:27 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-12 18:48 [PATCH 1/4] radix tree test suite: Add support for fallthrough attribute Liam Howlett
2021-05-12 18:48 ` [PATCH 2/4] radix tree test suite: Add __must_be_array() support Liam Howlett
2021-05-12 21:46   ` Matthew Wilcox
2021-05-12 22:13     ` Liam Howlett
2021-05-12 18:48 ` [PATCH 3/4] radix tree test suite: Add kmem_cache enhancements and pr_err Liam Howlett
2021-05-12 18:48 ` [PATCH 4/4] radix tree test suite: Add support for slab bulk APIs Liam Howlett

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).