aboutsummaryrefslogtreecommitdiffstats
path: root/lib/test_xarray.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/test_xarray.c')
-rw-r--r--lib/test_xarray.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/test_xarray.c b/lib/test_xarray.c
index b711030fbc32..fb472258b639 100644
--- a/lib/test_xarray.c
+++ b/lib/test_xarray.c
@@ -198,6 +198,25 @@ static noinline void check_xa_shrink(struct xarray *xa)
198 XA_BUG_ON(xa, !xa_empty(xa)); 198 XA_BUG_ON(xa, !xa_empty(xa));
199} 199}
200 200
201static noinline void check_cmpxchg(struct xarray *xa)
202{
203 void *FIVE = xa_mk_value(5);
204 void *SIX = xa_mk_value(6);
205 void *LOTS = xa_mk_value(12345678);
206
207 XA_BUG_ON(xa, !xa_empty(xa));
208 XA_BUG_ON(xa, xa_store_index(xa, 12345678, GFP_KERNEL) != NULL);
209 XA_BUG_ON(xa, xa_insert(xa, 12345678, xa, GFP_KERNEL) != -EEXIST);
210 XA_BUG_ON(xa, xa_cmpxchg(xa, 12345678, SIX, FIVE, GFP_KERNEL) != LOTS);
211 XA_BUG_ON(xa, xa_cmpxchg(xa, 12345678, LOTS, FIVE, GFP_KERNEL) != LOTS);
212 XA_BUG_ON(xa, xa_cmpxchg(xa, 12345678, FIVE, LOTS, GFP_KERNEL) != FIVE);
213 XA_BUG_ON(xa, xa_cmpxchg(xa, 5, FIVE, NULL, GFP_KERNEL) != NULL);
214 XA_BUG_ON(xa, xa_cmpxchg(xa, 5, NULL, FIVE, GFP_KERNEL) != NULL);
215 xa_erase_index(xa, 12345678);
216 xa_erase_index(xa, 5);
217 XA_BUG_ON(xa, !xa_empty(xa));
218}
219
201static noinline void check_multi_store(struct xarray *xa) 220static noinline void check_multi_store(struct xarray *xa)
202{ 221{
203#ifdef CONFIG_XARRAY_MULTI 222#ifdef CONFIG_XARRAY_MULTI
@@ -274,6 +293,7 @@ static int xarray_checks(void)
274 check_xa_load(&array); 293 check_xa_load(&array);
275 check_xa_mark(&array); 294 check_xa_mark(&array);
276 check_xa_shrink(&array); 295 check_xa_shrink(&array);
296 check_cmpxchg(&array);
277 check_multi_store(&array); 297 check_multi_store(&array);
278 298
279 printk("XArray: %u of %u tests passed\n", tests_passed, tests_run); 299 printk("XArray: %u of %u tests passed\n", tests_passed, tests_run);