kselftest: factor out list manipulation to a helper

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>
This commit is contained in:
Jakub Kicinski 2020-04-27 18:03:47 -07:00 committed by David S. Miller
parent 3e455b7d1a
commit 1a89595c22
1 changed files with 24 additions and 18 deletions

View File

@ -631,6 +631,29 @@
} \
} 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)