kselftest: factor out list manipulation to a helper
authorJakub Kicinski <kuba@kernel.org>
Tue, 28 Apr 2020 01:03:47 +0000 (18:03 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 28 Apr 2020 20:30:43 +0000 (13:30 -0700)
Kees suggest to factor out the list append code to a macro,
since following commits need it, which leads to code duplication.

Suggested-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Acked-by: Kees Cook <keescook@chromium.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/kselftest_harness.h

index 2bb8c81..77f7548 100644 (file)
        } \
 } while (0); OPTIONAL_HANDLER(_assert)
 
+/* List helpers */
+#define __LIST_APPEND(head, item) \
+{ \
+       /* Circular linked list where only prev is circular. */ \
+       if (head == NULL) { \
+               head = item; \
+               item->next = NULL; \
+               item->prev = item; \
+               return; \
+       } \
+       if (__constructor_order == _CONSTRUCTOR_ORDER_FORWARD) { \
+               item->next = NULL; \
+               item->prev = head->prev; \
+               item->prev->next = item; \
+               head->prev = item; \
+       } else { \
+               item->next = head; \
+               item->next->prev = item; \
+               item->prev = item; \
+               head = item; \
+       } \
+}
+
 /* Contains all the information for test execution and status checking. */
 struct __test_metadata {
        const char *name;
@@ -667,24 +690,7 @@ static int __constructor_order;
 static inline void __register_test(struct __test_metadata *t)
 {
        __test_count++;
-       /* Circular linked list where only prev is circular. */
-       if (__test_list == NULL) {
-               __test_list = t;
-               t->next = NULL;
-               t->prev = t;
-               return;
-       }
-       if (__constructor_order == _CONSTRUCTOR_ORDER_FORWARD) {
-               t->next = NULL;
-               t->prev = __test_list->prev;
-               t->prev->next = t;
-               __test_list->prev = t;
-       } else {
-               t->next = __test_list;
-               t->next->prev = t;
-               t->prev = t;
-               __test_list = t;
-       }
+       __LIST_APPEND(__test_list, t);
 }
 
 static inline int __bail(int for_realz, bool no_print, __u8 step)