From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id D5F27EB64DA for ; Thu, 20 Jul 2023 08:16:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4E2B72800D4; Thu, 20 Jul 2023 04:16:25 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 46C6628004C; Thu, 20 Jul 2023 04:16:25 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 30C392800D4; Thu, 20 Jul 2023 04:16:25 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 1A42C28004C for ; Thu, 20 Jul 2023 04:16:25 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id D9477120205 for ; Thu, 20 Jul 2023 08:16:24 +0000 (UTC) X-FDA: 81031283088.24.53DE50D Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) by imf13.hostedemail.com (Postfix) with ESMTP id E9EFF20016 for ; Thu, 20 Jul 2023 08:16:22 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=rivosinc-com.20221208.gappssmtp.com header.s=20221208 header.b=aZoe4sdI; dmarc=none; spf=pass (imf13.hostedemail.com: domain of alexghiti@rivosinc.com designates 209.85.221.44 as permitted sender) smtp.mailfrom=alexghiti@rivosinc.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1689840983; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=DNGJaYEpeCAI7drQ8W8ZV+PTc4Zy8Ohv1zP8hIu3TR8=; b=61dqkQe8c/7vtzy74iLFbRGLYLkVZuSolQwTmK823G8QGdP7FqHbreG8Q0Q57BveuTB0z/ GtTk6RBF95wU1m8uZYV3q09d/zwR4xvhRz/4p6/POaY3SM1nZB9SMnPX0BSIpqZP9sOdYZ chdXRca2EDBFAyvh+FYgzKYLEnYfh10= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=rivosinc-com.20221208.gappssmtp.com header.s=20221208 header.b=aZoe4sdI; dmarc=none; spf=pass (imf13.hostedemail.com: domain of alexghiti@rivosinc.com designates 209.85.221.44 as permitted sender) smtp.mailfrom=alexghiti@rivosinc.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1689840983; a=rsa-sha256; cv=none; b=z9VbcHZZG6ZeZCRyQNFioqKzHqi077sqw6M1VvKMpE4Yf8T2/Qld8bsJ0z/PNq9PvUChEY Pa+S8FlTckdJEZUYY7eKZGbEgUkIU30WxBnL2r01DdWzQ644heaDAWZ7FUk4UO2Rsj5hdk PvjA3yWclMXjOLlBWCpIGFxDNE8ZkCU= Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-307d58b3efbso399416f8f.0 for ; Thu, 20 Jul 2023 01:16:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20221208.gappssmtp.com; s=20221208; t=1689840981; x=1690445781; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=DNGJaYEpeCAI7drQ8W8ZV+PTc4Zy8Ohv1zP8hIu3TR8=; b=aZoe4sdItvYTIGvKmdBkwWvSm9XIortrvDEcFOv6U9T3bIJ8wJnc6+CdANOPnQrFGc b0efaIB7KWoqmRTL3zp9zVjPLbqwS7QZ9OcJvAiEtHKiNyasiXXEHCx01wZ8w7V52ooO VZOs8dgeSuhEJGHUnBfSMnTt2rJW17BNUCa9NOJL6VT5n8XjqhdAxgnCetbYFNQWPXHz X7ja3ACB0l+HqW62c75Hq8g4y36DXolIpV9WqT1ww8yPETw0kowXqC4Jn7UiXdaKsC8B 140VXB7XUvRAbyNj5Wz6RlEpo38ImoCnfE2LhyY3zi5M+fexasEdd0sZlnkUE+60ARi4 ON0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689840981; x=1690445781; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DNGJaYEpeCAI7drQ8W8ZV+PTc4Zy8Ohv1zP8hIu3TR8=; b=KcpT5NkJKVYPfFwj8sBvVZoDNsN5Nb/jjXr5D4kBrrYO+rdD9N+n/3s68sQ4WMr9wh ElAecIDzmo6qvlTo1x6k8FJRAaW7K2PM5Xn+VBnJAUAKgWfNT/hoeYdRZCKbGEoHhhdV KncPaqC+BE3ZF9YeuqNvXRGcDiR3yIAqfOeQ9fk9d82y7Ce8INgC3i48MVpCx4bkiPRA IcAlq6s4i2dNXC0NZae+lUpXNVPAbRAK+DYXUfvWZU5KPd7MfqSNVWDhK4O8LgL3rcHa Xb8AATd5buyrItxOkM6FDp2I0PFt5bQeFGCxGXd9ZfWsGMvzBFz+F0qdH+PKw4BfdV0D DMgA== X-Gm-Message-State: ABy/qLZ4tWs3jcCgWA/3zZsNj6Augvkxdulrqz+rAnvRtyOCbvHIbCfD 67mcRlOUKYV6DIYoSnS8JmeqkeArbLEk6UBKHUAduA== X-Google-Smtp-Source: APBJJlE4/ypBCkAS4fa3ft8sr4uiIljwWG9xBqWF4OQP1QHzs9vglehTimqhRn43tcQfSYUsfosvfe6DQAVs529DSZc= X-Received: by 2002:a5d:456c:0:b0:316:f1a5:269f with SMTP id a12-20020a5d456c000000b00316f1a5269fmr1310004wrc.70.1689840981522; Thu, 20 Jul 2023 01:16:21 -0700 (PDT) MIME-Version: 1.0 References: <20230714165508.94561-1-charlie@rivosinc.com> <20230714165508.94561-3-charlie@rivosinc.com> In-Reply-To: <20230714165508.94561-3-charlie@rivosinc.com> From: Alexandre Ghiti Date: Thu, 20 Jul 2023 10:16:10 +0200 Message-ID: Subject: Re: [PATCH v6 2/4] RISC-V: mm: Add tests for RISC-V mm To: Charlie Jenkins Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, conor@kernel.org, paul.walmsley@sifive.com, palmer@rivosinc.com, aou@eecs.berkeley.edu, anup@brainfault.org, konstantin@linuxfoundation.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org, mick@ics.forth.gr, jrtc27@jrtc27.com, rdunlap@infradead.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: E9EFF20016 X-Stat-Signature: f5pnzxoem6ehazgiwk8kennzebjpbedw X-Rspam-User: X-HE-Tag: 1689840982-180244 X-HE-Meta: U2FsdGVkX1+GANwc941PpOIVoZW+YVSVzmyZ+BlIwMza/EUlJk6TQk/6rOshFz1c7TiQfc1C7UrEUnvnhrsYDE261jaetQRdlQhEdmlel62xXGRHlluDlm8oLvsZzf6B304g7nI8f2eRrO5Y0UpQI4pPB7G7fWJqx3NfF3wMfQ9eULY2Hykltdespwjl6MB9vpRUtLgl9uV3aj4mbOIOtt69e6NKjoHntMW43mQ0hr3BwYBXDO8Q02iiiy+4vTBYQbkYQptXC+8UA4ElHLL8prdc6VpWs898+5Lx0g6/BjPUCA1AQXe09vdSDMDvEZDV2Qcg5p6jFSjLd1OKRycUqEqL5qnRgBwEmDO6IT5FDBNJ69C5ac66CLG5Qm7bEsUpNlFwYN0hjWuFQDeC1azrR3ABO8dTaP0mCksBHKapJFLihbePqywJeRxTRl/josP+zZ146LrpKo+X5skCbq/OM2rr4YhcMqZv55xTiBAPDDehwkLsPc5AFO2CDC+yUiqWq7bjd0a0h+E4btD25e1xAPlK8tg7ANxZubM6RLo21b42hg+cnrkPn6PiRS0L8xKKlpwUnYoVCaN6fRh7iGFBrJ7JGaHfEniedddlelunr75ngNlkx4GSCVrL6o3gxLjx0hLLTUyMLs93RcpU+yZ5JY/LNnxFHZrC3LSwzvt0Ad0KK7apuPnE5fbuKrqQDkZkeKzFIb1YWfG3lQPSjGi7Jug0C9rUYPaJ+yeFRGMXIgKVcTCgjbKceTSTMJaKDbiz0dCVM43PTzI4gDIVnUbMo/xSjPSiPN+qT9Ihj3OkVq9a95DCPtjU8v0OlF6jg3QFkElZlagXInRt8Ucs+l/iYyHkeBlatUbRcezHGwu08sAkwFJnvu4ZGSVgGP1WrY8dVxRkv/9Sc6q9c5PXDQOlwijIZfHpC3pqZPYHKXJ3e17MpxS5nTlRsbb448Nr4Qr8CMcR8JuibDhC2IxxcZY H5+fU8eq XUdhbS5xXWbgANtRwfRY9HLhrhYtRt/hN6LF3vNkMR98aLspFbL1VYab5OjvVfuwQ/+rb+jpDxe48FN6XWdSS6kSfdnZsNg6QAzFprD2rQfypilfIkaVVYUxUiqaKaHlvosg0f/stErje6l6XCoEqvt1IpgmZvMgCgzTU+eQE+mfhJPyasZ9vFob3riOCFqvyKWCtFmrIs8SfOb0XaelgHEBoFRblUxw7RSqnqAdRzNj/Qwm4hpbTe/kqyCzxCn82ZZ+++0dUiEqLqpKHy01PSDd5tqgah4BVNKgS/EMddMvAd2uajsH48GGY8BlxDYJqX5lUokDaKHkADOc= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000264, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Fri, Jul 14, 2023 at 6:55=E2=80=AFPM Charlie Jenkins wrote: > > Add tests that enforce mmap hint address behavior. mmap should default > to sv48. mmap will provide an address at the highest address space that > can fit into the hint address, unless the hint address is less than sv39 > and not 0, then it will return a sv39 address. In addition, ensure that > rlimit changes do not cause mmap to fail. > > Signed-off-by: Charlie Jenkins > --- > tools/testing/selftests/riscv/Makefile | 2 +- > tools/testing/selftests/riscv/mm/.gitignore | 1 + > tools/testing/selftests/riscv/mm/Makefile | 21 +++ > .../selftests/riscv/mm/testcases/mmap.c | 133 ++++++++++++++++++ > 4 files changed, 156 insertions(+), 1 deletion(-) > create mode 100644 tools/testing/selftests/riscv/mm/.gitignore > create mode 100644 tools/testing/selftests/riscv/mm/Makefile > create mode 100644 tools/testing/selftests/riscv/mm/testcases/mmap.c > > diff --git a/tools/testing/selftests/riscv/Makefile b/tools/testing/selft= ests/riscv/Makefile > index 9dd629cc86aa..1b79da90396e 100644 > --- a/tools/testing/selftests/riscv/Makefile > +++ b/tools/testing/selftests/riscv/Makefile > @@ -5,7 +5,7 @@ > ARCH ?=3D $(shell uname -m 2>/dev/null || echo not) > > ifneq (,$(filter $(ARCH),riscv)) > -RISCV_SUBTARGETS ?=3D hwprobe vector > +RISCV_SUBTARGETS ?=3D hwprobe vector mm > else > RISCV_SUBTARGETS :=3D > endif > diff --git a/tools/testing/selftests/riscv/mm/.gitignore b/tools/testing/= selftests/riscv/mm/.gitignore > new file mode 100644 > index 000000000000..9a6f303edcd3 > --- /dev/null > +++ b/tools/testing/selftests/riscv/mm/.gitignore > @@ -0,0 +1 @@ > +mmap > diff --git a/tools/testing/selftests/riscv/mm/Makefile b/tools/testing/se= lftests/riscv/mm/Makefile > new file mode 100644 > index 000000000000..cf68e63e7495 > --- /dev/null > +++ b/tools/testing/selftests/riscv/mm/Makefile > @@ -0,0 +1,21 @@ > +# SPDX-License-Identifier: GPL-2.0 > +# Originally tools/testing/selftests/arm64/signal > + > +# Additional include paths needed by kselftest.h and local headers > +CFLAGS +=3D -D_GNU_SOURCE -std=3Dgnu99 -I. > + > +SRCS :=3D $(filter-out testcases/testcases.c,$(wildcard testcases/*.c)) > +PROGS :=3D $(patsubst %.c,%,$(SRCS)) > + > +# Generated binaries to be installed by top KSFT script > +TEST_GEN_PROGS :=3D $(notdir $(PROGS)) > + > +# Get Kernel headers installed and use them. > + > +# Including KSFT lib.mk here will also mangle the TEST_GEN_PROGS list > +# to account for any OUTPUT target-dirs optionally provided by > +# the toplevel makefile > +include ../../lib.mk > + > +$(TEST_GEN_PROGS): $(PROGS) > + cp $(PROGS) $(OUTPUT)/ > diff --git a/tools/testing/selftests/riscv/mm/testcases/mmap.c b/tools/te= sting/selftests/riscv/mm/testcases/mmap.c > new file mode 100644 > index 000000000000..d8e751f7b8c9 > --- /dev/null > +++ b/tools/testing/selftests/riscv/mm/testcases/mmap.c > @@ -0,0 +1,133 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +#include > +#include > +#include > + > +#include "../../kselftest_harness.h" > +struct addresses { > + int *no_hint; > + int *on_37_addr; > + int *on_38_addr; > + int *on_46_addr; > + int *on_47_addr; > + int *on_55_addr; > + int *on_56_addr; > +}; > + > +void do_mmaps(struct addresses *mmap_addresses) > +{ > + // Place all of the hint addresses on the boundaries of mmap > + // sv39, sv48, sv57 > + // User addresses end at 1<<38, 1<<47, 1<<56 respectively Doesn't checkpatch complain about those comments? Shouldn't you use /* */ instead? > + void *on_37_bits =3D (void *)(1UL << 37); > + void *on_38_bits =3D (void *)(1UL << 38); > + void *on_46_bits =3D (void *)(1UL << 46); > + void *on_47_bits =3D (void *)(1UL << 47); > + void *on_55_bits =3D (void *)(1UL << 55); > + void *on_56_bits =3D (void *)(1UL << 56); > + > + int prot =3D PROT_READ | PROT_WRITE; > + int flags =3D MAP_PRIVATE | MAP_ANONYMOUS; > + > + mmap_addresses->no_hint =3D > + mmap(NULL, 5 * sizeof(int), prot, flags, 0, 0); > + mmap_addresses->on_37_addr =3D > + mmap(on_37_bits, 5 * sizeof(int), prot, flags, 0, 0); > + mmap_addresses->on_38_addr =3D > + mmap(on_38_bits, 5 * sizeof(int), prot, flags, 0, 0); > + mmap_addresses->on_46_addr =3D > + mmap(on_46_bits, 5 * sizeof(int), prot, flags, 0, 0); > + mmap_addresses->on_47_addr =3D > + mmap(on_47_bits, 5 * sizeof(int), prot, flags, 0, 0); > + mmap_addresses->on_55_addr =3D > + mmap(on_55_bits, 5 * sizeof(int), prot, flags, 0, 0); > + mmap_addresses->on_56_addr =3D > + mmap(on_56_bits, 5 * sizeof(int), prot, flags, 0, 0); > +} > + > +TEST(default_rlimit) > +{ > +// Only works on 64 bit > +#if __riscv_xlen =3D=3D 64 > + struct addresses mmap_addresses; > + > + do_mmaps(&mmap_addresses); > + > + EXPECT_NE(mmap_addresses.no_hint, MAP_FAILED); > + EXPECT_NE(mmap_addresses.on_37_addr, MAP_FAILED); > + EXPECT_NE(mmap_addresses.on_38_addr, MAP_FAILED); > + EXPECT_NE(mmap_addresses.on_46_addr, MAP_FAILED); > + EXPECT_NE(mmap_addresses.on_47_addr, MAP_FAILED); > + EXPECT_NE(mmap_addresses.on_55_addr, MAP_FAILED); > + EXPECT_NE(mmap_addresses.on_56_addr, MAP_FAILED); > + > + EXPECT_LT((unsigned long)mmap_addresses.no_hint, 1UL << 47); > + EXPECT_LT((unsigned long)mmap_addresses.on_37_addr, 1UL << 38); > + EXPECT_LT((unsigned long)mmap_addresses.on_38_addr, 1UL << 38); > + EXPECT_LT((unsigned long)mmap_addresses.on_46_addr, 1UL << 38); > + EXPECT_LT((unsigned long)mmap_addresses.on_47_addr, 1UL << 47); > + EXPECT_LT((unsigned long)mmap_addresses.on_55_addr, 1UL << 47); > + EXPECT_LT((unsigned long)mmap_addresses.on_56_addr, 1UL << 56); > +#endif > +} > + > +TEST(zero_rlimit) > +{ > +// Only works on 64 bit > +#if __riscv_xlen =3D=3D 64 > + struct addresses mmap_addresses; > + struct rlimit rlim_new =3D { .rlim_cur =3D 0, .rlim_max =3D RLIM_= INFINITY }; > + > + setrlimit(RLIMIT_STACK, &rlim_new); > + > + do_mmaps(&mmap_addresses); > + > + EXPECT_NE(mmap_addresses.no_hint, MAP_FAILED); > + EXPECT_NE(mmap_addresses.on_37_addr, MAP_FAILED); > + EXPECT_NE(mmap_addresses.on_38_addr, MAP_FAILED); > + EXPECT_NE(mmap_addresses.on_46_addr, MAP_FAILED); > + EXPECT_NE(mmap_addresses.on_47_addr, MAP_FAILED); > + EXPECT_NE(mmap_addresses.on_55_addr, MAP_FAILED); > + EXPECT_NE(mmap_addresses.on_56_addr, MAP_FAILED); > + > + EXPECT_LT((unsigned long)mmap_addresses.no_hint, 1UL << 47); > + EXPECT_LT((unsigned long)mmap_addresses.on_37_addr, 1UL << 38); > + EXPECT_LT((unsigned long)mmap_addresses.on_38_addr, 1UL << 38); > + EXPECT_LT((unsigned long)mmap_addresses.on_46_addr, 1UL << 38); > + EXPECT_LT((unsigned long)mmap_addresses.on_47_addr, 1UL << 47); > + EXPECT_LT((unsigned long)mmap_addresses.on_55_addr, 1UL << 47); > + EXPECT_LT((unsigned long)mmap_addresses.on_56_addr, 1UL << 56); > +#endif > +} > + > +TEST(infinite_rlimit) > +{ > +// Only works on 64 bit > +#if __riscv_xlen =3D=3D 64 > + struct addresses mmap_addresses; > + struct rlimit rlim_new =3D { .rlim_cur =3D RLIM_INFINITY, > + .rlim_max =3D RLIM_INFINITY }; > + > + setrlimit(RLIMIT_STACK, &rlim_new); > + > + do_mmaps(&mmap_addresses); > + > + EXPECT_NE(mmap_addresses.no_hint, MAP_FAILED); > + EXPECT_NE(mmap_addresses.on_37_addr, MAP_FAILED); > + EXPECT_NE(mmap_addresses.on_38_addr, MAP_FAILED); > + EXPECT_NE(mmap_addresses.on_46_addr, MAP_FAILED); > + EXPECT_NE(mmap_addresses.on_47_addr, MAP_FAILED); > + EXPECT_NE(mmap_addresses.on_55_addr, MAP_FAILED); > + EXPECT_NE(mmap_addresses.on_56_addr, MAP_FAILED); > + > + EXPECT_LT((unsigned long)mmap_addresses.no_hint, 1UL << 47); > + EXPECT_LT((unsigned long)mmap_addresses.on_37_addr, 1UL << 38); > + EXPECT_LT((unsigned long)mmap_addresses.on_38_addr, 1UL << 38); > + EXPECT_LT((unsigned long)mmap_addresses.on_46_addr, 1UL << 38); > + EXPECT_LT((unsigned long)mmap_addresses.on_47_addr, 1UL << 47); > + EXPECT_LT((unsigned long)mmap_addresses.on_55_addr, 1UL << 47); > + EXPECT_LT((unsigned long)mmap_addresses.on_56_addr, 1UL << 56); > +#endif > +} > + > +TEST_HARNESS_MAIN > -- > 2.41.0 >