On 13.04.22 23:59, Richard Weinberger via Xenomai wrote: > Test case for the following regression: > https://www.xenomai.org/pipermail/xenomai/2022-March/047451.html > > Signed-off-by: Richard Weinberger <rich...@nod.at> > --- > Changes since v1: > - Make sure to restore SA upon failure. > --- > configure.ac | 2 + > testsuite/smokey/Makefile.am | 7 +++ > testsuite/smokey/x86io/Makefile.am | 7 +++ > testsuite/smokey/x86io/x86io.c | 77 ++++++++++++++++++++++++++++++ > 4 files changed, 93 insertions(+) > create mode 100644 testsuite/smokey/x86io/Makefile.am > create mode 100644 testsuite/smokey/x86io/x86io.c > > diff --git a/configure.ac b/configure.ac > index 019453793..62506de69 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -169,6 +169,7 @@ esac > > AC_MSG_RESULT([$target_cpu_arch]) > XENO_TARGET_ARCH=$target_cpu_arch > +AM_CONDITIONAL(XENO_X86,[test x$target_cpu_arch = xx86]) > AC_ENABLE_SHARED > AC_PROG_LIBTOOL > > @@ -1044,6 +1045,7 @@ AC_CONFIG_FILES([ \ > testsuite/smokey/gdb/Makefile \ > testsuite/smokey/y2038/Makefile \ > testsuite/smokey/can/Makefile > + testsuite/smokey/x86io/Makefile > testsuite/clocktest/Makefile \ > testsuite/xeno-test/Makefile \ > utils/Makefile \ > diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am > index 4a9773f58..79dc61e9f 100644 > --- a/testsuite/smokey/Makefile.am > +++ b/testsuite/smokey/Makefile.am > @@ -82,6 +82,10 @@ DIST_SUBDIRS = \ > xddp \ > y2038 > > +if XENO_X86 > +DIST_SUBDIRS += x86io > +endif > + > if XENO_COBALT > if CONFIG_XENO_LIBS_DLOPEN > COBALT_SUBDIRS += dlopen > @@ -89,6 +93,9 @@ endif > if XENO_PSHARED > COBALT_SUBDIRS += memory-pshared > endif > +if XENO_X86 > +COBALT_SUBDIRS += x86io > +endif > wrappers = $(XENO_POSIX_WRAPPERS) > SUBDIRS = $(COBALT_SUBDIRS) > else > diff --git a/testsuite/smokey/x86io/Makefile.am > b/testsuite/smokey/x86io/Makefile.am > new file mode 100644 > index 000000000..d623af042 > --- /dev/null > +++ b/testsuite/smokey/x86io/Makefile.am > @@ -0,0 +1,7 @@ > +noinst_LIBRARIES = libx86io.a > + > +libx86io_a_SOURCES = x86io.c > + > +libx86io_a_CPPFLAGS = \ > + @XENO_USER_CFLAGS@ \ > + -I$(top_srcdir)/include > diff --git a/testsuite/smokey/x86io/x86io.c b/testsuite/smokey/x86io/x86io.c > new file mode 100644 > index 000000000..4db228660 > --- /dev/null > +++ b/testsuite/smokey/x86io/x86io.c > @@ -0,0 +1,77 @@ > +/* > + * Test for a working iopl() after a regression on 5.15: > + * https://www.xenomai.org/pipermail/xenomai/2022-March/047451.html > + * > + * Copyright (C) 2022 sigma star gmbh > + * Author Richard Weinberger <rich...@sigma-star.at> > + * > + * Released under the terms of GPLv2. > + */ > +#include <pthread.h> > +#include <sched.h> > +#include <signal.h> > +#include <smokey/smokey.h> > +#include <string.h> > +#include <sys/io.h> > +#include <unistd.h> > + > +#define PORT (0x378) > + > +static int saw_segv; > + > +static void *tfn(void *d) > +{ > + struct sched_param schedp = {0}; > + int ret; > + > + schedp.sched_priority = 1; > + __Terrno(ret, sched_setscheduler(0, SCHED_FIFO, &schedp)); > + > + (void)inb(PORT); > + > + return (void *)(unsigned long)ret; > +} > + > +static void sgfn(int sig, siginfo_t *si, void *ctx) > +{ > + saw_segv = 1; > +} > + > +smokey_test_plugin(x86io, SMOKEY_NOARGS, "Check x86 port io"); > + > +int run_x86io(struct smokey_test *t, int argc, char *const argv[]) > +{ > + struct sigaction sa, old_sa; > + unsigned long ptret; > + pthread_t pt; > + int ret; > + > + memset(&sa, 0, sizeof(sa)); > + sa.sa_sigaction = sgfn; > + sa.sa_flags = SA_SIGINFO; > + sigemptyset(&sa.sa_mask); > + > + if (!__Terrno(ret, sigaction(SIGSEGV, &sa, &old_sa))) > + goto out; > + > + if (!__Terrno(ret, iopl(3))) > + goto out_restore; > + > + if (!__T(ret, pthread_create(&pt, NULL, tfn, NULL))) > + goto out_restore; > + > + if (!__T(ret, pthread_join(pt, (void *)&ptret))) > + goto out_restore; > + > +out_restore: > + sigaction(SIGSEGV, &old_sa, NULL); > + > +out: > + if (ret) > + return -ret; > + if (ptret) > + return -ptret; > + if (saw_segv) > + return -EFAULT; > + return 0; > +}
OK, let's through this at our lab and see if anything explodes. Thanks, applied. Jan -- Siemens AG, Technology Competence Center Embedded Linux