Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[platform/kernel/linux-rpi.git] / lib / test_maple_tree.c
index 0674aeb..0695916 100644 (file)
@@ -2166,7 +2166,7 @@ static noinline void __init next_prev_test(struct maple_tree *mt)
        MT_BUG_ON(mt, val != NULL);
        MT_BUG_ON(mt, mas.index != 0);
        MT_BUG_ON(mt, mas.last != 5);
-       MT_BUG_ON(mt, mas.node != MAS_NONE);
+       MT_BUG_ON(mt, mas.node != MAS_UNDERFLOW);
 
        mas.index = 0;
        mas.last = 5;
@@ -2917,6 +2917,7 @@ static noinline void __init check_empty_area_fill(struct maple_tree *mt)
  *             exists  MAS_NONE        active          range
  *             exists  active          active          range
  *             DNE     active          active          set to last range
+ *             ERANGE  active          MAS_OVERFLOW    last range
  *
  * Function    ENTRY   Start           Result          index & last
  * mas_prev()
@@ -2945,6 +2946,7 @@ static noinline void __init check_empty_area_fill(struct maple_tree *mt)
  *             any     MAS_ROOT        MAS_NONE        0
  *             exists  active          active          range
  *             DNE     active          active          last range
+ *             ERANGE  active          MAS_UNDERFLOW   last range
  *
  * Function    ENTRY   Start           Result          index & last
  * mas_find()
@@ -2955,7 +2957,7 @@ static noinline void __init check_empty_area_fill(struct maple_tree *mt)
  *             DNE     MAS_START       MAS_NONE        0
  *             DNE     MAS_PAUSE       MAS_NONE        0
  *             DNE     MAS_ROOT        MAS_NONE        0
- *             DNE     MAS_NONE        MAS_NONE        0
+ *             DNE     MAS_NONE        MAS_NONE        1
  *                             if index ==  0
  *             exists  MAS_START       MAS_ROOT        0
  *             exists  MAS_PAUSE       MAS_ROOT        0
@@ -2967,7 +2969,7 @@ static noinline void __init check_empty_area_fill(struct maple_tree *mt)
  *             DNE     MAS_START       active          set to max
  *             exists  MAS_PAUSE       active          range
  *             DNE     MAS_PAUSE       active          set to max
- *             exists  MAS_NONE        active          range
+ *             exists  MAS_NONE        active          range (start at last)
  *             exists  active          active          range
  *             DNE     active          active          last range (max < last)
  *
@@ -2992,7 +2994,7 @@ static noinline void __init check_empty_area_fill(struct maple_tree *mt)
  *             DNE     MAS_START       active          set to min
  *             exists  MAS_PAUSE       active          range
  *             DNE     MAS_PAUSE       active          set to min
- *             exists  MAS_NONE        active          range
+ *             exists  MAS_NONE        active          range (start at index)
  *             exists  active          active          range
  *             DNE     active          active          last range (min > index)
  *
@@ -3039,10 +3041,10 @@ static noinline void __init check_state_handling(struct maple_tree *mt)
        mtree_store_range(mt, 0, 0, ptr, GFP_KERNEL);
 
        mas_lock(&mas);
-       /* prev: Start -> none */
+       /* prev: Start -> underflow*/
        entry = mas_prev(&mas, 0);
        MT_BUG_ON(mt, entry != NULL);
-       MT_BUG_ON(mt, mas.node != MAS_NONE);
+       MT_BUG_ON(mt, mas.node != MAS_UNDERFLOW);
 
        /* prev: Start -> root */
        mas_set(&mas, 10);
@@ -3069,7 +3071,7 @@ static noinline void __init check_state_handling(struct maple_tree *mt)
        MT_BUG_ON(mt, entry != NULL);
        MT_BUG_ON(mt, mas.node != MAS_NONE);
 
-       /* next: start -> none */
+       /* next: start -> none*/
        mas_set(&mas, 10);
        entry = mas_next(&mas, ULONG_MAX);
        MT_BUG_ON(mt, mas.index != 1);
@@ -3268,25 +3270,46 @@ static noinline void __init check_state_handling(struct maple_tree *mt)
        MT_BUG_ON(mt, mas.last != 0x2500);
        MT_BUG_ON(mt, !mas_active(mas));
 
-       /* next:active -> active out of range*/
+       /* next:active -> active beyond data */
        entry = mas_next(&mas, 0x2999);
        MT_BUG_ON(mt, entry != NULL);
        MT_BUG_ON(mt, mas.index != 0x2501);
        MT_BUG_ON(mt, mas.last != 0x2fff);
        MT_BUG_ON(mt, !mas_active(mas));
 
-       /* Continue after out of range*/
+       /* Continue after last range ends after max */
        entry = mas_next(&mas, ULONG_MAX);
        MT_BUG_ON(mt, entry != ptr3);
        MT_BUG_ON(mt, mas.index != 0x3000);
        MT_BUG_ON(mt, mas.last != 0x3500);
        MT_BUG_ON(mt, !mas_active(mas));
 
-       /* next:active -> active out of range*/
+       /* next:active -> active continued */
+       entry = mas_next(&mas, ULONG_MAX);
+       MT_BUG_ON(mt, entry != NULL);
+       MT_BUG_ON(mt, mas.index != 0x3501);
+       MT_BUG_ON(mt, mas.last != ULONG_MAX);
+       MT_BUG_ON(mt, !mas_active(mas));
+
+       /* next:active -> overflow  */
        entry = mas_next(&mas, ULONG_MAX);
        MT_BUG_ON(mt, entry != NULL);
        MT_BUG_ON(mt, mas.index != 0x3501);
        MT_BUG_ON(mt, mas.last != ULONG_MAX);
+       MT_BUG_ON(mt, mas.node != MAS_OVERFLOW);
+
+       /* next:overflow -> overflow  */
+       entry = mas_next(&mas, ULONG_MAX);
+       MT_BUG_ON(mt, entry != NULL);
+       MT_BUG_ON(mt, mas.index != 0x3501);
+       MT_BUG_ON(mt, mas.last != ULONG_MAX);
+       MT_BUG_ON(mt, mas.node != MAS_OVERFLOW);
+
+       /* prev:overflow -> active  */
+       entry = mas_prev(&mas, 0);
+       MT_BUG_ON(mt, entry != ptr3);
+       MT_BUG_ON(mt, mas.index != 0x3000);
+       MT_BUG_ON(mt, mas.last != 0x3500);
        MT_BUG_ON(mt, !mas_active(mas));
 
        /* next: none -> active, skip value at location */
@@ -3307,11 +3330,46 @@ static noinline void __init check_state_handling(struct maple_tree *mt)
        MT_BUG_ON(mt, mas.last != 0x1500);
        MT_BUG_ON(mt, !mas_active(mas));
 
-       /* prev:active -> active out of range*/
+       /* prev:active -> active spanning end range */
+       entry = mas_prev(&mas, 0x0100);
+       MT_BUG_ON(mt, entry != NULL);
+       MT_BUG_ON(mt, mas.index != 0);
+       MT_BUG_ON(mt, mas.last != 0x0FFF);
+       MT_BUG_ON(mt, !mas_active(mas));
+
+       /* prev:active -> underflow */
+       entry = mas_prev(&mas, 0);
+       MT_BUG_ON(mt, entry != NULL);
+       MT_BUG_ON(mt, mas.index != 0);
+       MT_BUG_ON(mt, mas.last != 0x0FFF);
+       MT_BUG_ON(mt, mas.node != MAS_UNDERFLOW);
+
+       /* prev:underflow -> underflow */
        entry = mas_prev(&mas, 0);
        MT_BUG_ON(mt, entry != NULL);
        MT_BUG_ON(mt, mas.index != 0);
        MT_BUG_ON(mt, mas.last != 0x0FFF);
+       MT_BUG_ON(mt, mas.node != MAS_UNDERFLOW);
+
+       /* next:underflow -> active */
+       entry = mas_next(&mas, ULONG_MAX);
+       MT_BUG_ON(mt, entry != ptr);
+       MT_BUG_ON(mt, mas.index != 0x1000);
+       MT_BUG_ON(mt, mas.last != 0x1500);
+       MT_BUG_ON(mt, !mas_active(mas));
+
+       /* prev:first value -> underflow */
+       entry = mas_prev(&mas, 0x1000);
+       MT_BUG_ON(mt, entry != NULL);
+       MT_BUG_ON(mt, mas.index != 0x1000);
+       MT_BUG_ON(mt, mas.last != 0x1500);
+       MT_BUG_ON(mt, mas.node != MAS_UNDERFLOW);
+
+       /* find:underflow -> first value */
+       entry = mas_find(&mas, ULONG_MAX);
+       MT_BUG_ON(mt, entry != ptr);
+       MT_BUG_ON(mt, mas.index != 0x1000);
+       MT_BUG_ON(mt, mas.last != 0x1500);
        MT_BUG_ON(mt, !mas_active(mas));
 
        /* prev: pause ->active */
@@ -3325,14 +3383,14 @@ static noinline void __init check_state_handling(struct maple_tree *mt)
        MT_BUG_ON(mt, mas.last != 0x2500);
        MT_BUG_ON(mt, !mas_active(mas));
 
-       /* prev:active -> active out of range*/
+       /* prev:active -> active spanning min */
        entry = mas_prev(&mas, 0x1600);
        MT_BUG_ON(mt, entry != NULL);
        MT_BUG_ON(mt, mas.index != 0x1501);
        MT_BUG_ON(mt, mas.last != 0x1FFF);
        MT_BUG_ON(mt, !mas_active(mas));
 
-       /* prev: active ->active, continue*/
+       /* prev: active ->active, continue */
        entry = mas_prev(&mas, 0);
        MT_BUG_ON(mt, entry != ptr);
        MT_BUG_ON(mt, mas.index != 0x1000);
@@ -3379,7 +3437,7 @@ static noinline void __init check_state_handling(struct maple_tree *mt)
        MT_BUG_ON(mt, mas.last != 0x2FFF);
        MT_BUG_ON(mt, !mas_active(mas));
 
-       /* find: none ->active */
+       /* find: overflow ->active */
        entry = mas_find(&mas, 0x5000);
        MT_BUG_ON(mt, entry != ptr3);
        MT_BUG_ON(mt, mas.index != 0x3000);
@@ -3778,7 +3836,6 @@ static int __init maple_tree_seed(void)
        check_empty_area_fill(&tree);
        mtree_destroy(&tree);
 
-
        mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
        check_state_handling(&tree);
        mtree_destroy(&tree);