Received: by 2002:a05:6a10:9e8c:0:0:0:0 with SMTP id y12csp14309pxx; Mon, 26 Oct 2020 01:57:54 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx0b3PVV0z3Pht8ly6jQD8xvLYvhu8r1ruwooBvqFnNc/+sdlb51fuQ6GB6sbFurlfotI9u X-Received: by 2002:a50:9e87:: with SMTP id a7mr14924375edf.297.1603702673811; Mon, 26 Oct 2020 01:57:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1603702673; cv=none; d=google.com; s=arc-20160816; b=dA+QGxvQTWmWBZQVYFEIPoMh9MIZr19X/rAtc3OYN0LDpN6lsDwiMwoboJWd0stc6P b0MLvWq7xLMkmqegY9f6Y4nlREYHiOS1xxdM18UsBH4ZHbpH5GXyUQ85PmMGg0oRzjdn LHFSZtMFbu4kaub2XLm+1gWqAjV7cjQ/DCPUN9bbHLxjmgqsE77chgvYPpOU7QoQC3dC 2OYqzdTB4euRDzBBm0U/4b4Xxbprv9WTTHvEfKJ17nrJgMXdXLGU4ACafPqUM6QVRN6U drPrg1i21F8Z0N5KMPkRdiIZ+7eJQ/tT/de4GUwYaRB8NDrpS9Z7oLD6nr1mlDe7dF+H zNNA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:dkim-signature:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from; bh=dUAYkEapcTA42RNrFgb52rRcMfb4JqtNbVHugW4OlyM=; b=kDi1Rfemcf4nhqFmr/7VxM31NiloKt1yNa0ZQUh3FnQs86LpWfgK7srn1/lAKjSQ7K O+JPrhC0/Q/nR2Rn10JaL8DtvfMMz5EK2FXUz7ID1eU3b6tdm5UgUKQ/sEdkJbltOKp9 zlSBXXnjGJVOpPPFtHM1Kd1Y/OohQXqmiYqodDFSHA1bNuWoSAi8Dj2WjIEpElk5wbpV Kky3V76keFkzWsSU62PunxdD+CW447mT/gXLzdisAg+MkLOJNAmK7qlUyP35A/Ly05cs YSbhfsjgK0JeVNJjpe1j3HSv6G789lG3Y59q4njOqC6+CrgaA7jdapEKeTFxA8bRp4ba DI6Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b="LnGrTg/T"; 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=nvidia.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id gj23si8235701ejb.600.2020.10.26.01.57.29; Mon, 26 Oct 2020 01:57:53 -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=@nvidia.com header.s=n1 header.b="LnGrTg/T"; 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=nvidia.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1770593AbgJZGlO (ORCPT + 99 others); Mon, 26 Oct 2020 02:41:14 -0400 Received: from hqnvemgate25.nvidia.com ([216.228.121.64]:13002 "EHLO hqnvemgate25.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1770546AbgJZGlC (ORCPT ); Mon, 26 Oct 2020 02:41:02 -0400 Received: from hqmail.nvidia.com (Not Verified[216.228.121.13]) by hqnvemgate25.nvidia.com (using TLS: TLSv1.2, AES256-SHA) id ; Sun, 25 Oct 2020 23:41:06 -0700 Received: from HQMAIL111.nvidia.com (172.20.187.18) by HQMAIL109.nvidia.com (172.20.187.15) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Mon, 26 Oct 2020 06:41:02 +0000 Received: from sandstorm.nvidia.com (10.124.1.5) by mail.nvidia.com (172.20.187.18) with Microsoft SMTP Server id 15.0.1473.3 via Frontend Transport; Mon, 26 Oct 2020 06:41:02 +0000 From: John Hubbard To: Andrew Morton CC: Shuah Khan , Mike Rapoport , Ralph Campbell , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Jonathan Corbet , LKML , , , John Hubbard Subject: [PATCH v3 8/9] selftests/vm: hmm-tests: remove the libhugetlbfs dependency Date: Sun, 25 Oct 2020 23:40:20 -0700 Message-ID: <20201026064021.3545418-9-jhubbard@nvidia.com> X-Mailer: git-send-email 2.29.0 In-Reply-To: <20201026064021.3545418-1-jhubbard@nvidia.com> References: <20201026064021.3545418-1-jhubbard@nvidia.com> MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1603694467; bh=dUAYkEapcTA42RNrFgb52rRcMfb4JqtNbVHugW4OlyM=; h=From:To:CC:Subject:Date:Message-ID:X-Mailer:In-Reply-To: References:MIME-Version:Content-Type:X-NVConfidentiality: Content-Transfer-Encoding; b=LnGrTg/T1rO3TuBX3tdY3IOEBIvqc5SwdKS5nboEftLmVYF+mLfmvYJ2kfvIL0mV6 qnrfIt9TJEbI1dnJIAW2IJDidCtCgqMKYuhVgn4G942BnsXhhTTbweWsAEbIvgL//b roU1CZryNdlkjKS35FlfT3422XUeJXNFflLuKKiziLmktMwbXLL0IJv4xIyP4wqLHN gBhjpwqqlm91KyNmqmpPilL0jqUfj96lkAXqSO1/QdfsLdNjF6GX66YY4BNS4jpcxi kplbtqAGfaB6ELRr4dRu3DGkboN2bewwZDXPCErRr6cGsMeJyMrHOZU7k8Iw1Af38A 3L17VgBzr/N/w== Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org HMM selftests are incredibly useful, but they are only effective if people actually build and run them. All the other tests in selftests/vm can be built with very standard, always-available libraries: libpthread, librt. The hmm-tests.c program, on the other hand, requires something that is (much) less readily available: libhugetlbfs. And so the build will typically fail for many developers. A simple attempt to install libhugetlbfs will also run into complications on some common distros these days: Fedora and Arch Linux (yes, Arch AUR has it, but that's fragile, as always with AUR). The library is not maintained actively enough at the moment, for distros to deal with it. I had to build it from source, for Fedora, and that didn't go too smoothly either. It turns out that, out of 21 tests in hmm-tests.c, only 2 actually require functionality from libhugetlbfs. Therefore, if libhugetlbfs is missing, simply ifdef those two tests out and allow the developer to at least have the other 19 tests, if they don't want to pause to work through the above issues. Also issue a warning, so that it's clear that there is an imperfection in the build. In order to do that, a tiny shell script (check_config.sh) runs a quick compile (not link, that's too prone to false failures with library paths), and basically, if the compiler doesn't find hugetlbfs.h in its standard locations, then the script concludes that libhugetlbfs is not available. The output is in two files, one for inclusion in hmm-test.c (local_config.h), and one for inclusion in the Makefile (local_config.mk). Signed-off-by: John Hubbard Cc: Ralph Campbell Cc: J=C3=A9r=C3=B4me Glisse Cc: Jonathan Corbet Cc: Shuah Khan --- tools/testing/selftests/vm/.gitignore | 1 + tools/testing/selftests/vm/Makefile | 24 +++++++++++++++-- tools/testing/selftests/vm/check_config.sh | 31 ++++++++++++++++++++++ tools/testing/selftests/vm/hmm-tests.c | 10 ++++++- 4 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 tools/testing/selftests/vm/check_config.sh diff --git a/tools/testing/selftests/vm/.gitignore b/tools/testing/selftest= s/vm/.gitignore index 2c8ddcf41c0e..e90d28bcd518 100644 --- a/tools/testing/selftests/vm/.gitignore +++ b/tools/testing/selftests/vm/.gitignore @@ -20,3 +20,4 @@ va_128TBswitch map_fixed_noreplace write_to_hugetlbfs hmm-tests +local_config.* diff --git a/tools/testing/selftests/vm/Makefile b/tools/testing/selftests/= vm/Makefile index 2579242386ac..a9332a7cf33f 100644 --- a/tools/testing/selftests/vm/Makefile +++ b/tools/testing/selftests/vm/Makefile @@ -1,5 +1,8 @@ # SPDX-License-Identifier: GPL-2.0 # Makefile for vm selftests + +include local_config.mk + uname_M :=3D $(shell uname -m 2>/dev/null || echo not) MACHINE ?=3D $(shell echo $(uname_M) | sed -e 's/aarch64.*/arm64/') =20 @@ -76,8 +79,6 @@ TEST_FILES :=3D test_vmalloc.sh KSFT_KHDR_INSTALL :=3D 1 include ../lib.mk =20 -$(OUTPUT)/hmm-tests: LDLIBS +=3D -lhugetlbfs - ifeq ($(ARCH),x86_64) BINARIES_32 :=3D $(patsubst %,$(OUTPUT)/%,$(BINARIES_32)) BINARIES_64 :=3D $(patsubst %,$(OUTPUT)/%,$(BINARIES_64)) @@ -130,3 +131,22 @@ endif $(OUTPUT)/mlock-random-test: LDLIBS +=3D -lcap =20 $(OUTPUT)/gup_test: ../../../../mm/gup_test.h + +$(OUTPUT)/hmm-tests: local_config.h + +# HMM_EXTRA_LIBS may get set in local_config.mk, or it may be left empty. +$(OUTPUT)/hmm-tests: LDLIBS +=3D $(HMM_EXTRA_LIBS) + +local_config.mk local_config.h: check_config.sh + /bin/sh ./check_config.sh $(CC) + +EXTRA_CLEAN +=3D local_config.mk local_config.h + +ifeq ($(HMM_EXTRA_LIBS),) +all: warn_missing_hugelibs + +warn_missing_hugelibs: + @echo ; \ + echo "Warning: missing libhugetlbfs support. Some HMM tests will be skipp= ed." ; \ + echo +endif diff --git a/tools/testing/selftests/vm/check_config.sh b/tools/testing/sel= ftests/vm/check_config.sh new file mode 100644 index 000000000000..079c8a40b85d --- /dev/null +++ b/tools/testing/selftests/vm/check_config.sh @@ -0,0 +1,31 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# +# Probe for libraries and create header files to record the results. Both = C +# header files and Makefile include fragments are created. + +OUTPUT_H_FILE=3Dlocal_config.h +OUTPUT_MKFILE=3Dlocal_config.mk + +# libhugetlbfs +tmpname=3D$(mktemp) +tmpfile_c=3D${tmpname}.c +tmpfile_o=3D${tmpname}.o + +echo "#include " > $tmpfile_c +echo "#include " >> $tmpfile_c +echo "int func(void) { return 0; }" >> $tmpfile_c + +CC=3D${1:?"Usage: $0 # example compiler: gcc"} +$CC -c $tmpfile_c -o $tmpfile_o >/dev/null 2>&1 + +if [ -f $tmpfile_o ]; then + echo "#define LOCAL_CONFIG_HAVE_LIBHUGETLBFS 1" > $OUTPUT_H_FILE + echo "HMM_EXTRA_LIBS =3D -lhugetlbfs" > $OUTPUT_MKFILE +else + echo "// No libhugetlbfs support found" > $OUTPUT_H_FILE + echo "# No libhugetlbfs support found, so:" > $OUTPUT_MKFILE + echo "HMM_EXTRA_LIBS =3D " >> $OUTPUT_MKFILE +fi + +rm ${tmpname}.* diff --git a/tools/testing/selftests/vm/hmm-tests.c b/tools/testing/selftes= ts/vm/hmm-tests.c index c9404ef9698e..5d1ac691b9f4 100644 --- a/tools/testing/selftests/vm/hmm-tests.c +++ b/tools/testing/selftests/vm/hmm-tests.c @@ -21,12 +21,16 @@ #include #include #include -#include #include #include #include #include =20 +#include "./local_config.h" +#ifdef LOCAL_CONFIG_HAVE_LIBHUGETLBFS +#include +#endif + /* * This is a private UAPI to the kernel test module so it isn't exported * in the usual include/uapi/... directory. @@ -662,6 +666,7 @@ TEST_F(hmm, anon_write_huge) hmm_buffer_free(buffer); } =20 +#ifdef LOCAL_CONFIG_HAVE_LIBHUGETLBFS /* * Write huge TLBFS page. */ @@ -720,6 +725,7 @@ TEST_F(hmm, anon_write_hugetlbfs) buffer->ptr =3D NULL; hmm_buffer_free(buffer); } +#endif /* LOCAL_CONFIG_HAVE_LIBHUGETLBFS */ =20 /* * Read mmap'ed file memory. @@ -1336,6 +1342,7 @@ TEST_F(hmm2, snapshot) hmm_buffer_free(buffer); } =20 +#ifdef LOCAL_CONFIG_HAVE_LIBHUGETLBFS /* * Test the hmm_range_fault() HMM_PFN_PMD flag for large pages that * should be mapped by a large page table entry. @@ -1411,6 +1418,7 @@ TEST_F(hmm, compound) buffer->ptr =3D NULL; hmm_buffer_free(buffer); } +#endif /* LOCAL_CONFIG_HAVE_LIBHUGETLBFS */ =20 /* * Test two devices reading the same memory (double mapped). --=20 2.29.0