CFLAGS += -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 \
        -fno-stack-protector -fno-PIE -I$(LINUX_TOOL_INCLUDE) \
        -I$(LINUX_TOOL_ARCH_INCLUDE) -I$(LINUX_HDR_PATH) -Iinclude \
-       -I$(<D) -Iinclude/$(UNAME_M) -I.. $(EXTRA_CFLAGS) $(KHDR_INCLUDES)
+       -I$(<D) -Iinclude/$(UNAME_M) -I ../rseq -I.. $(EXTRA_CFLAGS) \
+       $(KHDR_INCLUDES)
 
 no-pie-option := $(call try-run, echo 'int main() { return 0; }' | \
         $(CC) -Werror -no-pie -x c - -o "$$TMP", -no-pie)
 pgste-option = $(call try-run, echo 'int main() { return 0; }' | \
        $(CC) -Werror -Wl$(comma)--s390-pgste -x c - -o "$$TMP",-Wl$(comma)--s390-pgste)
 
-
+LDLIBS += -ldl
 LDFLAGS += -pthread $(no-pie-option) $(pgste-option)
 
 # After inclusion, $(OUTPUT) is defined and
 
 #include "processor.h"
 #include "test_util.h"
 
-static __thread volatile struct rseq __rseq = {
-       .cpu_id = RSEQ_CPU_ID_UNINITIALIZED,
-};
-
-/*
- * Use an arbitrary, bogus signature for configuring rseq, this test does not
- * actually enter an rseq critical section.
- */
-#define RSEQ_SIG 0xdeadbeef
+#include "../rseq/rseq.c"
 
 /*
  * Any bug related to task migration is likely to be timing-dependent; perform
                GUEST_SYNC(0);
 }
 
-static void sys_rseq(int flags)
-{
-       int r;
-
-       r = syscall(__NR_rseq, &__rseq, sizeof(__rseq), flags, RSEQ_SIG);
-       TEST_ASSERT(!r, "rseq failed, errno = %d (%s)", errno, strerror(errno));
-}
-
 static int next_cpu(int cpu)
 {
        /*
 
        calc_min_max_cpu();
 
-       sys_rseq(0);
+       r = rseq_register_current_thread();
+       TEST_ASSERT(!r, "rseq_register_current_thread failed, errno = %d (%s)",
+                   errno, strerror(errno));
 
        /*
         * Create and run a dummy VM that immediately exits to userspace via
                         */
                        smp_rmb();
                        cpu = sched_getcpu();
-                       rseq_cpu = READ_ONCE(__rseq.cpu_id);
+                       rseq_cpu = rseq_current_cpu_raw();
                        smp_rmb();
                } while (snapshot != atomic_read(&seq_cnt));
 
 
        kvm_vm_free(vm);
 
-       sys_rseq(RSEQ_FLAG_UNREGISTER);
+       rseq_unregister_current_thread();
 
        return 0;
 }