Commit 9e9671ce authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'linux-kselftest-5.3-rc4' of...

Merge tag 'linux-kselftest-5.3-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest

Pull kselftest fixes from Shuah Khan:
 "A fix to the Kselftest framework to save and restore errno and a fix
  to livepatch to push and pop dynamic debug config"

* tag 'linux-kselftest-5.3-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest:
  selftests/livepatch: push and pop dynamic debug config
  kselftest: save-and-restore errno to allow for %m formatting
parents e21a712a fbb01c52
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#ifndef __KSELFTEST_H #ifndef __KSELFTEST_H
#define __KSELFTEST_H #define __KSELFTEST_H
#include <errno.h>
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include <stdarg.h> #include <stdarg.h>
...@@ -81,58 +82,68 @@ static inline void ksft_print_cnts(void) ...@@ -81,58 +82,68 @@ static inline void ksft_print_cnts(void)
static inline void ksft_print_msg(const char *msg, ...) static inline void ksft_print_msg(const char *msg, ...)
{ {
int saved_errno = errno;
va_list args; va_list args;
va_start(args, msg); va_start(args, msg);
printf("# "); printf("# ");
errno = saved_errno;
vprintf(msg, args); vprintf(msg, args);
va_end(args); va_end(args);
} }
static inline void ksft_test_result_pass(const char *msg, ...) static inline void ksft_test_result_pass(const char *msg, ...)
{ {
int saved_errno = errno;
va_list args; va_list args;
ksft_cnt.ksft_pass++; ksft_cnt.ksft_pass++;
va_start(args, msg); va_start(args, msg);
printf("ok %d ", ksft_test_num()); printf("ok %d ", ksft_test_num());
errno = saved_errno;
vprintf(msg, args); vprintf(msg, args);
va_end(args); va_end(args);
} }
static inline void ksft_test_result_fail(const char *msg, ...) static inline void ksft_test_result_fail(const char *msg, ...)
{ {
int saved_errno = errno;
va_list args; va_list args;
ksft_cnt.ksft_fail++; ksft_cnt.ksft_fail++;
va_start(args, msg); va_start(args, msg);
printf("not ok %d ", ksft_test_num()); printf("not ok %d ", ksft_test_num());
errno = saved_errno;
vprintf(msg, args); vprintf(msg, args);
va_end(args); va_end(args);
} }
static inline void ksft_test_result_skip(const char *msg, ...) static inline void ksft_test_result_skip(const char *msg, ...)
{ {
int saved_errno = errno;
va_list args; va_list args;
ksft_cnt.ksft_xskip++; ksft_cnt.ksft_xskip++;
va_start(args, msg); va_start(args, msg);
printf("not ok %d # SKIP ", ksft_test_num()); printf("not ok %d # SKIP ", ksft_test_num());
errno = saved_errno;
vprintf(msg, args); vprintf(msg, args);
va_end(args); va_end(args);
} }
static inline void ksft_test_result_error(const char *msg, ...) static inline void ksft_test_result_error(const char *msg, ...)
{ {
int saved_errno = errno;
va_list args; va_list args;
ksft_cnt.ksft_error++; ksft_cnt.ksft_error++;
va_start(args, msg); va_start(args, msg);
printf("not ok %d # error ", ksft_test_num()); printf("not ok %d # error ", ksft_test_num());
errno = saved_errno;
vprintf(msg, args); vprintf(msg, args);
va_end(args); va_end(args);
} }
...@@ -152,10 +163,12 @@ static inline int ksft_exit_fail(void) ...@@ -152,10 +163,12 @@ static inline int ksft_exit_fail(void)
static inline int ksft_exit_fail_msg(const char *msg, ...) static inline int ksft_exit_fail_msg(const char *msg, ...)
{ {
int saved_errno = errno;
va_list args; va_list args;
va_start(args, msg); va_start(args, msg);
printf("Bail out! "); printf("Bail out! ");
errno = saved_errno;
vprintf(msg, args); vprintf(msg, args);
va_end(args); va_end(args);
...@@ -178,10 +191,12 @@ static inline int ksft_exit_xpass(void) ...@@ -178,10 +191,12 @@ static inline int ksft_exit_xpass(void)
static inline int ksft_exit_skip(const char *msg, ...) static inline int ksft_exit_skip(const char *msg, ...)
{ {
if (msg) { if (msg) {
int saved_errno = errno;
va_list args; va_list args;
va_start(args, msg); va_start(args, msg);
printf("not ok %d # SKIP ", 1 + ksft_test_num()); printf("not ok %d # SKIP ", 1 + ksft_test_num());
errno = saved_errno;
vprintf(msg, args); vprintf(msg, args);
va_end(args); va_end(args);
} else { } else {
......
...@@ -29,13 +29,27 @@ function die() { ...@@ -29,13 +29,27 @@ function die() {
exit 1 exit 1
} }
# set_dynamic_debug() - setup kernel dynamic debug function push_dynamic_debug() {
# TODO - push and pop this config? DYNAMIC_DEBUG=$(grep '^kernel/livepatch' /sys/kernel/debug/dynamic_debug/control | \
awk -F'[: ]' '{print "file " $1 " line " $2 " " $4}')
}
function pop_dynamic_debug() {
if [[ -n "$DYNAMIC_DEBUG" ]]; then
echo -n "$DYNAMIC_DEBUG" > /sys/kernel/debug/dynamic_debug/control
fi
}
# set_dynamic_debug() - save the current dynamic debug config and tweak
# it for the self-tests. Set a script exit trap
# that restores the original config.
function set_dynamic_debug() { function set_dynamic_debug() {
cat << EOF > /sys/kernel/debug/dynamic_debug/control push_dynamic_debug
file kernel/livepatch/* +p trap pop_dynamic_debug EXIT INT TERM HUP
func klp_try_switch_task -p cat <<-EOF > /sys/kernel/debug/dynamic_debug/control
EOF file kernel/livepatch/* +p
func klp_try_switch_task -p
EOF
} }
# loop_until(cmd) - loop a command until it is successful or $MAX_RETRIES, # loop_until(cmd) - loop a command until it is successful or $MAX_RETRIES,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment