Received: by 2002:a25:868d:0:0:0:0:0 with SMTP id z13csp1721401ybk; Thu, 21 May 2020 13:39:21 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy2O87XLaa5EhHYPoEscNNh4cK7U6QE4HzU5r8pDN4z41iCFnI0722YIpbXi+J4+gZrWPH0 X-Received: by 2002:a17:906:ce36:: with SMTP id sd22mr5174694ejb.94.1590093561601; Thu, 21 May 2020 13:39:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1590093561; cv=none; d=google.com; s=arc-20160816; b=Wqewft6j0UIKai/G2/f8NIwPvn6zNPtsip8n0TYNTg2IHvp5EAquRmz6jExYeDKHid xXBgR3EQLUuKqZ9vvInRx3UQ9MT3+QVCDHRKLN4Z8EB+w3kToXP4Rl1MFVZ0L6tZnJFK h647kVxJbq7U5nuQJkL/HwTA0Faam0V8g6j2BXXiNwQYFFXoqZJdNEepIvVuWNiOjIdt LnoGTkHlvFJo9bWGF/gjPfxPJw1OWdusYRLOhosMkj4ijRQyrd1/DnKWU67hoYzbZa0F bAk81Q2XWqiLdOHnGG5hIhPN4NWPgxJbyB61+nyz+40utkOPpC6dKFpB7E3f75GeoPIG 0d1w== 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=zC0VCeIs/6MXyZLhjqTLXjgKfL1hnurDR0K01fct/J/yzAi5VNopQsDi40UVKmMMti we6PsPeOetfheIIGm6r5EWul4SaZosIvSYhBIf1z6k6aJ3i+7J1bQsZYoOw5+KJVH48J scdp89ehHKuOWDShQYdCdoO2uABeXc6rRcnDusbkHGmUoGQqv5gQaxpFiA5/QVIccI36 Y8tDNC+JrOEE7lRMHxtkfX9CxhaoDw6AIQSmWxcn5gPd3jb6E0ZEPAP/Ufhr4z2LSdDI BHryCO2xsZKCH2HoSmBLBG+DrejNdonZmC1aX32mJ28jPS3xWqNeoYLqor0+GD0+EBOc NysQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=k6F1xnAW; 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 u17si3673430eji.141.2020.05.21.13.38.58; Thu, 21 May 2020 13:39:21 -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=k6F1xnAW; 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 S1729899AbgEUUhY (ORCPT + 99 others); Thu, 21 May 2020 16:37:24 -0400 Received: from mail.kernel.org ([198.145.29.99]:57668 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726814AbgEUUhW (ORCPT ); Thu, 21 May 2020 16:37:22 -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 25E322078B; Thu, 21 May 2020 20:37:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1590093441; bh=Stxmy5bjtizNU8Nx6Mslgp2T+FmzRshtXGRDcZodBIc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=k6F1xnAWhUWj4knb/UDVKBoGrscUwCrF+HWYp/4VW5SdFh3l7XZScf0uqnHHiBwcx NUdLgXRsw9w/SPhdAbHsh0lBqqr9SQ7hWc1ZHvnsw+z+s30AKqNRjuQkSz75zzInSw ikdQEHZbt2qVSWoiC0vpzqcFA6k8+/5xf3ASkKKc= From: Mark Brown To: Shuah Khan Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Mark Brown Subject: [PATCH v2 3/3] selftests: vdso: Add a selftest for vDSO getcpu() Date: Thu, 21 May 2020 21:37:07 +0100 Message-Id: <20200521203707.37304-4-broonie@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200521203707.37304-1-broonie@kernel.org> References: <20200521203707.37304-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