From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751708AbdJPDAh (ORCPT ); Sun, 15 Oct 2017 23:00:37 -0400 Received: from ozlabs.org ([103.22.144.67]:38471 "EHLO ozlabs.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751506AbdJPDAg (ORCPT ); Sun, 15 Oct 2017 23:00:36 -0400 From: Michael Ellerman To: Mathieu Desnoyers , "Paul E. McKenney" , Boqun Feng , Peter Zijlstra , Paul Turner , Andrew Hunter , Andy Lutomirski , Dave Watson , Josh Triplett , Will Deacon Cc: linux-kernel@vger.kernel.org, Mathieu Desnoyers , Russell King , Catalin Marinas , Thomas Gleixner , Andi Kleen , Chris Lameter , Ingo Molnar , "H. Peter Anvin" , Ben Maurer , Steven Rostedt , Linus Torvalds , Andrew Morton , Shuah Khan , linux-kselftest@vger.kernel.org, linux-api@vger.kernel.org Subject: Re: [RFC PATCH for 4.15 14/14] Restartable sequences: Provide self-tests In-Reply-To: <20171012230326.19984-15-mathieu.desnoyers@efficios.com> References: <20171012230326.19984-1-mathieu.desnoyers@efficios.com> <20171012230326.19984-15-mathieu.desnoyers@efficios.com> Date: Mon, 16 Oct 2017 14:00:33 +1100 Message-ID: <87y3oblru6.fsf@concordia.ellerman.id.au> MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Mathieu Desnoyers writes: > Implements two basic tests of RSEQ functionality, and one more > exhaustive parameterizable test. > > The first, "basic_test" only asserts that RSEQ works moderately > correctly. > E.g. that: > - The CPUID pointer works > - Code infinitely looping within a critical section will eventually be > interrupted. > - Critical sections are interrupted by signals. > > "basic_percpu_ops_test" is a slightly more "realistic" variant, > implementing a few simple per-cpu operations and testing their > correctness. > > "param_test" is a parametrizable restartable sequences test. See > the "--help" output for usage. > > As part of those tests, a helper library "rseq" implements a user-space > API around restartable sequences. It uses the cpu_opv system call as > fallback when single-stepped by a debugger. It exposes the instruction > pointer addresses where the rseq assembly blocks begin and end, as well > as the associated abort instruction pointer, in the __rseq_table > section. This section allows debuggers may know where to place > breakpoints when single-stepping through assembly blocks which may be > aborted at any point by the kernel. > > The following rseq APIs are implemented in this helper library: > - rseq_register_current_thread()/rseq_unregister_current_thread(): > register/unregister current thread's use of rseq, > - rseq_current_cpu_raw(): > current CPU number, > - rseq_start(): > beginning of a restartable sequence, > - rseq_cpu_at_start(): > CPU number at start of restartable sequence, > - rseq_finish(): > End of restartable sequence made of zero or more loads, completed by > a word-sized store, > - rseq_finish2(): > End of restartable sequence made of zero or more loads, one > speculative word-sized store, completed by a word-sized store, > - rseq_finish2_release(): > End of restartable sequence made of zero or more loads, one > speculative word-sized store, completed by a word-sized store with > release semantic, > - rseq_finish_memcpy(): > End of restartable sequence made of zero or more loads, a > speculative copy of a variable length memory region, completed by a > word-sized store. > - rseq_finish_memcpy_release(): > End of restartable sequence made of zero or more loads, a > speculative copy of a variable length memory region, completed by a > word-sized store with release semantic. > > PowerPC tests have been implemented by Boqun Feng. Hi Boqun, I'm having trouble testing these, I get: ~/linus/tools/testing/selftests/cpu-opv$ ./basic_cpu_opv_test Testing test_compare_eq same Testing test_compare_eq different Testing test_compare_ne same Testing test_compare_ne different Testing test_2compare_eq index Testing test_2compare_ne index Testing test_memcpy Testing test_memcpy_u32 Testing test_add Testing test_two_add Testing test_or Testing test_and Testing test_xor Testing test_lshift Testing test_rshift Testing test_cmpxchg success Testing test_cmpxchg fail ~/linus/tools/testing/selftests/rseq$ ./basic_test testing current cpu testing critical section testing critical section is interrupted by signal ~/linus/tools/testing/selftests/rseq$ ./basic_percpu_ops_test ./basic_percpu_ops_test: error while loading shared libraries: R_PPC64_ADDR16_HI re10d8f10a0 for symbol `' out of range ~/linus/tools/testing/selftests/rseq$ ./param_test ./param_test: error while loading shared libraries: R_PPC64_ADDR16_HI re136251b48 for symbol `' out of range Any idea what's going on with the last two? I assume you don't see that in your test setup :) cheers