Received: by 2002:a25:1104:0:0:0:0:0 with SMTP id 4csp408290ybr; Fri, 22 May 2020 09:25:09 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxiBVeEjNKApKd2KfEX1u8rZKRiGYPnsiJVEbFqmmv5t1bn5+kl83gy2KErAzqnR2dipLyN X-Received: by 2002:a17:907:1002:: with SMTP id ox2mr8625992ejb.189.1590164708756; Fri, 22 May 2020 09:25:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1590164708; cv=none; d=google.com; s=arc-20160816; b=o6FoEZRauLTEenAJnCW+XWltkPfRcMXSkXtzuhLtaLkb5QUdfHtCdbRzDHzYmP998b uBJAfpH23CpgyUfSDfEximEpa+xem62jdQqyWzMHmcUiGGAfMhrJzT4R4ElwZdqOUGYV hIl3ZmSSvM51jvem8EmJkBisXOQsmPpy8QPWnBWhbNwan+ZZcYpyUqfvGlni3UREmmW8 OfNPu1sLiR15TcuxuUR4Uo+FzlZPTckCq+msWag4GX7WBms9x4fwnyQqUNlaIXW6uB0G eWOnpj20xJ5j2AZrvRjARYcar4+VJsC+u/nqC7MLNF3yev7IzdISNgLvSlj1Zz9MrxjL Hjsg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=ukGfDiTpx5QZInTHoe7PFT0DD2dajFfiPP7wsesG6+U=; b=A+5+yqSmk26MbE/ysOpodHju1F97ZHaqU/Ik8tKoAX9GDaN0AViabef2bXuVEmweBq sHj5Z6Vxa7PB5snUGLia9SE5sRqTjfJ7rS3fxw8+/mY5blYbiLSCRru202PcFSH/KReP aneQd5Pdw1Juc8CUP7PStXBIwuJDAlWSjCBzJLcuKMeNfAQ+wz/nUa6CkIO+A9G5sKbm 6n8TO7UhnMNyMiwaajk2Fu2qJA7Dp9IGLyMlIdv3avuWvRJJhZ3LWrMN/X6IxhnMKg+q qJNM3cPgx38aXOO9ChPKDnLlxYX79v8P1VrusEPje6v/VsC2aG0ZXo819NgqKB+fGV08 Y1mg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=nC4Fjt+V; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j90si5022197edc.496.2020.05.22.09.24.45; Fri, 22 May 2020 09:25:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=nC4Fjt+V; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730571AbgEVQVy (ORCPT + 99 others); Fri, 22 May 2020 12:21:54 -0400 Received: from mail.kernel.org ([198.145.29.99]:48032 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730537AbgEVQVw (ORCPT ); Fri, 22 May 2020 12:21:52 -0400 Received: from localhost (fw-tnat.cambridge.arm.com [217.140.96.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 641E820756; Fri, 22 May 2020 16:21:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1590164512; bh=Stxmy5bjtizNU8Nx6Mslgp2T+FmzRshtXGRDcZodBIc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nC4Fjt+V7HSlwjlv0oD9X6Q57rCFAoKe3tDUwZ/ilw9ZqYEeo4MQvTQUKfqltWNZU ZvlSMpOgOBOdSkyaGvbU2DCc/mOPKbpIA38cIkaphdqCnNy8ek0wD/1Z2edlJoZpQI yopvNB09RWTBE/0xHkUwmO81x8Su1mx4f4KM5nFQ= From: Mark Brown To: Shuah Khan Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Mark Brown Subject: [PATCH v3 3/3] selftests: vdso: Add a selftest for vDSO getcpu() Date: Fri, 22 May 2020 17:21:39 +0100 Message-Id: <20200522162139.44380-4-broonie@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200522162139.44380-1-broonie@kernel.org> References: <20200522162139.44380-1-broonie@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Provide a very basic selftest for getcpu() which similarly to our existing test for gettimeofday() looks up the function in the vDSO and prints the results it gets if the function exists and succeeds. Signed-off-by: Mark Brown --- tools/testing/selftests/vDSO/.gitignore | 1 + tools/testing/selftests/vDSO/Makefile | 3 +- .../testing/selftests/vDSO/vdso_test_getcpu.c | 54 +++++++++++++++++++ 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 tools/testing/selftests/vDSO/vdso_test_getcpu.c diff --git a/tools/testing/selftests/vDSO/.gitignore b/tools/testing/selftests/vDSO/.gitignore index 74f49bd5f6dd..5eb64d41e541 100644 --- a/tools/testing/selftests/vDSO/.gitignore +++ b/tools/testing/selftests/vDSO/.gitignore @@ -1,4 +1,5 @@ # SPDX-License-Identifier: GPL-2.0-only vdso_test vdso_test_gettimeofday +vdso_test_getcpu vdso_standalone_test_x86 diff --git a/tools/testing/selftests/vDSO/Makefile b/tools/testing/selftests/vDSO/Makefile index ae15d700b62e..0069f2f83f86 100644 --- a/tools/testing/selftests/vDSO/Makefile +++ b/tools/testing/selftests/vDSO/Makefile @@ -4,7 +4,7 @@ include ../lib.mk uname_M := $(shell uname -m 2>/dev/null || echo not) ARCH ?= $(shell echo $(uname_M) | sed -e s/i.86/x86/ -e s/x86_64/x86/) -TEST_GEN_PROGS := $(OUTPUT)/vdso_test_gettimeofday +TEST_GEN_PROGS := $(OUTPUT)/vdso_test_gettimeofday $(OUTPUT)/vdso_test_getcpu ifeq ($(ARCH),x86) TEST_GEN_PROGS += $(OUTPUT)/vdso_standalone_test_x86 endif @@ -18,6 +18,7 @@ endif all: $(TEST_GEN_PROGS) $(OUTPUT)/vdso_test_gettimeofday: parse_vdso.c vdso_test_gettimeofday.c +$(OUTPUT)/vdso_test_getcpu: parse_vdso.c vdso_test_getcpu.c $(OUTPUT)/vdso_standalone_test_x86: vdso_standalone_test_x86.c parse_vdso.c $(CC) $(CFLAGS) $(CFLAGS_vdso_standalone_test_x86) \ vdso_standalone_test_x86.c parse_vdso.c \ diff --git a/tools/testing/selftests/vDSO/vdso_test_getcpu.c b/tools/testing/selftests/vDSO/vdso_test_getcpu.c new file mode 100644 index 000000000000..fc25ede131b8 --- /dev/null +++ b/tools/testing/selftests/vDSO/vdso_test_getcpu.c @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * vdso_test_getcpu.c: Sample code to test parse_vdso.c and vDSO getcpu() + * + * Copyright (c) 2020 Arm Ltd + */ + +#include +#include +#include +#include +#include + +#include "../kselftest.h" +#include "parse_vdso.h" + +const char *version = "LINUX_2.6"; +const char *name = "__vdso_getcpu"; + +struct getcpu_cache; +typedef long (*getcpu_t)(unsigned int *, unsigned int *, + struct getcpu_cache *); + +int main(int argc, char **argv) +{ + unsigned long sysinfo_ehdr; + unsigned int cpu, node; + getcpu_t get_cpu; + long ret; + + sysinfo_ehdr = getauxval(AT_SYSINFO_EHDR); + if (!sysinfo_ehdr) { + printf("AT_SYSINFO_EHDR is not present!\n"); + return KSFT_SKIP; + } + + vdso_init_from_sysinfo_ehdr(getauxval(AT_SYSINFO_EHDR)); + + get_cpu = (getcpu_t)vdso_sym(version, name); + if (!get_cpu) { + printf("Could not find %s\n", name); + return KSFT_SKIP; + } + + ret = get_cpu(&cpu, &node, 0); + if (ret == 0) { + printf("Running on CPU %u node %u\n", cpu, node); + } else { + printf("%s failed\n", name); + return KSFT_FAIL; + } + + return 0; +} -- 2.20.1