lib-xarray-introduce-a-new-helper-xas_get_order.patch removed from -mm tree
The quilt patch titled
Subject: lib/xarray: introduce a new helper xas_get_order
has been removed from the -mm tree. Its filename was
lib-xarray-introduce-a-new-helper-xas_get_order.patch
This patch was dropped because it was merged into the mm-stable branch of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
------------------------------------------------------
From: Kairui Song <[email protected]>
Subject: lib/xarray: introduce a new helper xas_get_order
Date: Tue, 16 Apr 2024 01:18:55 +0800
It can be used after xas_load to check the order of loaded entries. Compared to xa_get_order, it saves an XA_STATE and avoid a rewalk.
Added new test for xas_get_order, to make the test work, we have to export xas_get_order with EXPORT_SYMBOL_GPL.
Also fix a sparse warning by checking the slot value with xa_entry instead of accessing it directly, as suggested by Matthew Wilcox.
---
include/linux/xarray.h | 6 ++++ lib/test_xarray.c | 34 +++++++++++++++++++++++++++ lib/xarray.c | 49 ++++++++++++++++++++++++--------------- 3 files changed, 71 insertions(+), 18 deletions(-)
include/linux/xarray.h renamed from include/linux/xarray.h~lib-xarray-introduce-a-new-helper-xas_get_order +6 -0
@@ -1548,6 +1548,7 @@ void xas_create_range(struct xa_state *)#ifdef CONFIG_XARRAY_MULTI int xa_get_order (struct xarray *,unsigned long index); +int xas_get_order (struct xa_state *xas);void xas_split (struct xa_state *,void *entry,unsigned int order);void xas_split_alloc (struct xa_state *,void *entry,unsigned int order,gfp_t );#else
@@ -1555,6 +1556,11 @@ static inline int xa_get_order(struct xa {return 0 ; } + +static inline int xas_get_order (struct xa_state *xas) +{ +return 0 ; +}static inline void xas_split (struct xa_state *xas,void *entry,unsigned int order)
lib/test_xarray.c renamed from lib/test_xarray.c~lib-xarray-introduce-a-new-helper-xas_get_order +34 -0
@@ -1984,6 +1984,39 @@ static noinline void check_get_order(str } } +static noinline void check_xas_get_order(struct xarray *xa) +{ +XA_STATE (xas, xa,0 ); + +unsigned int max_order =IS_ENABLED (CONFIG_XARRAY_MULTI ) ?20 :1 ; +unsigned int order; +unsigned long i, j; + +for (order =0 ; order < max_order; order++) { +for (i =0 ; i <10 ; i++) { +xas_set_order (&xas, i << order, order); +do { +xas_lock (&xas); +xas_store (&xas,xa_mk_value (i)); +xas_unlock (&xas); + }while (xas_nomem (&xas,GFP_KERNEL )); + +for (j = i << order; j < (i +1 ) << order; j++) { +xas_set_order (&xas, j,0 ); +rcu_read_lock (); +xas_load (&xas); +XA_BUG_ON (xa,xas_get_order (&xas) != order); +rcu_read_unlock (); + } + +xas_lock (&xas); +xas_set_order (&xas, i << order, order); +xas_store (&xas,NULL ); +xas_unlock (&xas); + } + } +} + static noinline void check_destroy(struct xarray *xa) {unsigned long index;
@@ -2035,6 +2068,7 @@ static int xarray_checks(void)check_multi_store (&array);check_multi_store_advanced (&array);check_get_order (&array); +check_xas_get_order (&array);check_xa_alloc ();check_find (&array);check_find_entry (&array);
lib/xarray.c renamed from lib/xarray.c~lib-xarray-introduce-a-new-helper-xas_get_order +31 -18
70 lines not on this page · raw message
_
Patches currently in -mm which might be from [email protected] are