Add swap() to tools/testing/selftests/kselftest.h with an #ifndef guard. Guard the local swap() definition in mm/uffd-stress.c with #ifndef to prevent a redefinition warning.
Use swap() in hyperv_tlb_flush.c to replace the open-coded PTE swap and remove the TODO comment. Signed-off-by: Piotr Zarycki <[email protected]> --- Changes in v3: - Add #ifndef guard to mm/uffd-stress.c to fix a redefinition warning; uffd-stress.c defines its own swap() without a guard, which conflicts when kselftest.h is included first via uffd-common.h. Changes in v2: - Move swap() from tools/include/linux/kernel.h to kselftest.h; kernel.h breaks perf (swap is used there as a function pointer call). tools/testing/selftests/kselftest.h | 4 ++++ tools/testing/selftests/kvm/x86/hyperv_tlb_flush.c | 6 +----- tools/testing/selftests/mm/uffd-stress.c | 2 ++ 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/kselftest.h b/tools/testing/selftests/kselftest.h index 60838b61a2da..7f53751523d8 100644 --- a/tools/testing/selftests/kselftest.h +++ b/tools/testing/selftests/kselftest.h @@ -64,6 +64,10 @@ #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) #endif +#ifndef swap +#define swap(a, b) do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0) +#endif + #if defined(__i386__) || defined(__x86_64__) /* arch */ /* * gcc cpuid.h provides __cpuid_count() since v4.4. diff --git a/tools/testing/selftests/kvm/x86/hyperv_tlb_flush.c b/tools/testing/selftests/kvm/x86/hyperv_tlb_flush.c index 15ee8b7bfc11..514d41f00714 100644 --- a/tools/testing/selftests/kvm/x86/hyperv_tlb_flush.c +++ b/tools/testing/selftests/kvm/x86/hyperv_tlb_flush.c @@ -131,14 +131,10 @@ static void set_expected_val(void *addr, u64 val, int vcpu_id) /* * Update PTEs swapping two test pages. - * TODO: use swap()/xchg() when these are provided. */ static void swap_two_test_pages(gpa_t pte_gva1, gpa_t pte_gva2) { - u64 tmp = *(u64 *)pte_gva1; - - *(u64 *)pte_gva1 = *(u64 *)pte_gva2; - *(u64 *)pte_gva2 = tmp; + swap(*(u64 *)pte_gva1, *(u64 *)pte_gva2); } /* diff --git a/tools/testing/selftests/mm/uffd-stress.c b/tools/testing/selftests/mm/uffd-stress.c index 700fbaa18d44..802046e905dd 100644 --- a/tools/testing/selftests/mm/uffd-stress.c +++ b/tools/testing/selftests/mm/uffd-stress.c @@ -56,8 +56,10 @@ static uffd_global_test_opts_t *gopts; static char *zeropage; pthread_attr_t attr; +#ifndef swap #define swap(a, b) \ do { __auto_type __tmp = (a); (a) = (b); (b) = __tmp; } while (0) +#endif const char *examples = "# Run anonymous memory test on 100MiB region with 99999 bounces:\n" -- 2.54.0

