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 68A12C433F5 for ; Wed, 16 Mar 2022 08:56:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DE0D88D0002; Wed, 16 Mar 2022 04:56:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D907D8D0001; Wed, 16 Mar 2022 04:56:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C806E8D0002; Wed, 16 Mar 2022 04:56:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0106.hostedemail.com [216.40.44.106]) by kanga.kvack.org (Postfix) with ESMTP id B9B088D0001 for ; Wed, 16 Mar 2022 04:56:01 -0400 (EDT) Received: from smtpin19.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id 6369CA30AE for ; Wed, 16 Mar 2022 08:56:01 +0000 (UTC) X-FDA: 79249642122.19.D26DE3B Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf05.hostedemail.com (Postfix) with ESMTP id AAF72100017 for ; Wed, 16 Mar 2022 08:56:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1647420960; h=from:from: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; bh=mOXL/dlYJ9Y7q9KmoEp9L9wBQeuY/rwi8nHu81o4BOc=; b=WuW4XlxfwrTZRgCNiu6PsscNqcw+p/Pmp5DXbP2W1fco2P6HL0qXUnXZiMlWxIPoNp2XBe XKtxR3SS6xPD642k/sjQROA0J1d5EVHivP7RZf7EFaQzS0ubE6GDgivAg2A934AiRaeNut j+SgATfGZHChCWiEAiwEWCKH+qqpDf4= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-102-5Yurwn-xP3eHxB2mvy0kKA-1; Wed, 16 Mar 2022 04:55:56 -0400 X-MC-Unique: 5Yurwn-xP3eHxB2mvy0kKA-1 Received: by mail-wr1-f72.google.com with SMTP id a5-20020adfdd05000000b001f023fe32ffso311789wrm.18 for ; Wed, 16 Mar 2022 01:55:56 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent :content-language:to:cc:references:from:organization:subject :in-reply-to:content-transfer-encoding; bh=mOXL/dlYJ9Y7q9KmoEp9L9wBQeuY/rwi8nHu81o4BOc=; b=meFObaMCL56jizYoiiuazux5bmIbfIIZmnNS58OvSyyuzG5nJr65IbZVMw6XHQlzW3 1+NXoUbIxXt5H2NdyILMNwokZHzN+KPGUJtnQXAFtiLmDp7mKPxmYZoTqf5/zYhdcFFe 93VX1sbtM020uz8wowQpMSb95vQPWui8/4y6GAOy3t2vu7eG7/j7bsd1zERnVdE3mqLG qADyhHgLQC/4I2ZVJ/FY5WGu7xzo0STGvW+ltAF5dY+K8i6GpkSR1sW5HMzX+jz+HIhM OaOwvgvU3DKgNbqvvwoLoDYom/eciiMBp2Q4Dvd6CsEtBApbBE2vhXRMmUe4ifjFyVXU UDwA== X-Gm-Message-State: AOAM530UUp17s1wl60SKifgu83ZU8QMVjfyYyvU5/aS4xhLW8Kv+jLlW AydvQse/UTSFFK+ZlVe8f5vIG0bwWGXWoqZQL8aqFOSSlja30Yxk0F8IOOa96IRs3H32sMhK25x i8eR61Eox7rk= X-Received: by 2002:a05:6000:2c9:b0:1f0:49aa:d347 with SMTP id o9-20020a05600002c900b001f049aad347mr23452346wry.453.1647420955620; Wed, 16 Mar 2022 01:55:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxyd7sa+0eL137AIqkXqTEIJzbfdMHDmQgaMRZl52+qq2qpQhfpnTOOt6EPW7m4NTjXbmHuow== X-Received: by 2002:a05:6000:2c9:b0:1f0:49aa:d347 with SMTP id o9-20020a05600002c900b001f049aad347mr23452321wry.453.1647420955257; Wed, 16 Mar 2022 01:55:55 -0700 (PDT) Received: from ?IPV6:2003:cb:c706:f900:aa79:cd25:e0:32d1? (p200300cbc706f900aa79cd2500e032d1.dip0.t-ipconnect.de. [2003:cb:c706:f900:aa79:cd25:e0:32d1]) by smtp.gmail.com with ESMTPSA id g26-20020a05600c4c9a00b00389a48b68bdsm1078382wmp.10.2022.03.16.01.55.54 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 16 Mar 2022 01:55:54 -0700 (PDT) Message-ID: Date: Wed, 16 Mar 2022 09:55:54 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.6.2 To: Muhammad Usama Anjum , Andrew Morton , Shuah Khan Cc: kernel@collabora.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org References: <20220315085014.1047291-1-usama.anjum@collabora.com> From: David Hildenbrand Organization: Red Hat Subject: Re: [PATCH V4 1/2] selftests: vm: bring common functions to a new file In-Reply-To: <20220315085014.1047291-1-usama.anjum@collabora.com> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: AAF72100017 X-Stat-Signature: x4p383fj18se63gsa58kczwxrwkhcye7 Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=WuW4Xlxf; spf=none (imf05.hostedemail.com: domain of david@redhat.com has no SPF policy when checking 170.10.133.124) smtp.mailfrom=david@redhat.com; dmarc=pass (policy=none) header.from=redhat.com X-Rspam-User: X-HE-Tag: 1647420960-384410 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000001, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On 15.03.22 09:50, Muhammad Usama Anjum wrote: > Bring common functions to a new file. These functions can be used in the > new tests. This helps in code duplication. > > Signed-off-by: Muhammad Usama Anjum > --- > tools/testing/selftests/vm/Makefile | 7 +- > tools/testing/selftests/vm/madv_populate.c | 34 +----- > .../selftests/vm/split_huge_page_test.c | 77 +------------ > tools/testing/selftests/vm/vm_util.c | 103 ++++++++++++++++++ > tools/testing/selftests/vm/vm_util.h | 15 +++ > 5 files changed, 125 insertions(+), 111 deletions(-) > create mode 100644 tools/testing/selftests/vm/vm_util.c > create mode 100644 tools/testing/selftests/vm/vm_util.h > > diff --git a/tools/testing/selftests/vm/Makefile b/tools/testing/selftests/vm/Makefile > index 5e43f072f5b76..4e68edb26d6b6 100644 > --- a/tools/testing/selftests/vm/Makefile > +++ b/tools/testing/selftests/vm/Makefile > @@ -34,7 +34,7 @@ TEST_GEN_FILES += hugepage-mremap > TEST_GEN_FILES += hugepage-shm > TEST_GEN_FILES += hugepage-vmemmap > TEST_GEN_FILES += khugepaged > -TEST_GEN_FILES += madv_populate > +TEST_GEN_PROGS = madv_populate > TEST_GEN_FILES += map_fixed_noreplace > TEST_GEN_FILES += map_hugetlb > TEST_GEN_FILES += map_populate > @@ -47,7 +47,7 @@ TEST_GEN_FILES += on-fault-limit > TEST_GEN_FILES += thuge-gen > TEST_GEN_FILES += transhuge-stress > TEST_GEN_FILES += userfaultfd > -TEST_GEN_FILES += split_huge_page_test > +TEST_GEN_PROGS += split_huge_page_test > TEST_GEN_FILES += ksm_tests > > ifeq ($(MACHINE),x86_64) > @@ -91,6 +91,9 @@ TEST_FILES := test_vmalloc.sh > KSFT_KHDR_INSTALL := 1 > include ../lib.mk > > +$(OUTPUT)/madv_populate: vm_util.c > +$(OUTPUT)/split_huge_page_test: vm_util.c > + [...] > +// SPDX-License-Identifier: GPL-2.0 > +#include > +#include > +#include "vm_util.h" > + > +uint64_t pagemap_get_entry(int fd, char *start) > +{ > + const unsigned long pfn = (unsigned long)start / getpagesize(); > + uint64_t entry; > + int ret; > + > + ret = pread(fd, &entry, sizeof(entry), pfn * sizeof(entry)); > + if (ret != sizeof(entry)) > + ksft_exit_fail_msg("reading pagemap failed\n"); > + return entry; > +} > + > +bool pagemap_is_softdirty(int fd, char *start) > +{ > + uint64_t entry = pagemap_get_entry(fd, start); > + > + return ((entry >> DIRTY_BIT_LOCATION) & 1); > +} Please leave code you're moving around as untouched as possible to avoid unrelated bugs that happen by mistake and are hard to review. > + > +void clear_softdirty(void) > +{ > + int ret; > + const char *ctrl = "4"; > + int fd = open("/proc/self/clear_refs", O_WRONLY); > + > + if (fd < 0) > + ksft_exit_fail_msg("opening clear_refs failed\n"); > + ret = write(fd, ctrl, strlen(ctrl)); > + close(fd); > + if (ret != strlen(ctrl)) > + ksft_exit_fail_msg("writing clear_refs failed\n"); > +} > + > + > +static bool check_for_pattern(FILE *fp, const char *pattern, char *buf) > +{ > + while (fgets(buf, MAX_LINE_LENGTH, fp) != NULL) { > + if (!strncmp(buf, pattern, strlen(pattern))) > + return true; > + } > + return false; > +} > + > +uint64_t read_pmd_pagesize(void) > +{ > + int fd; > + char buf[20]; > + ssize_t num_read; > + > + fd = open(PMD_SIZE, O_RDONLY); > + if (fd == -1) > + ksft_exit_fail_msg("Open hpage_pmd_size failed\n"); > + > + num_read = read(fd, buf, 19); > + if (num_read < 1) { > + close(fd); > + ksft_exit_fail_msg("Read hpage_pmd_size failed\n"); > + } > + buf[num_read] = '\0'; > + close(fd); > + > + return strtoul(buf, NULL, 10); > +} > + > +uint64_t check_huge(void *addr) > +{ > + uint64_t thp = 0; > + int ret; > + FILE *fp; > + char buffer[MAX_LINE_LENGTH]; > + char addr_pattern[MAX_LINE_LENGTH]; > + > + ret = snprintf(addr_pattern, MAX_LINE_LENGTH, "%08lx-", > + (unsigned long) addr); > + if (ret >= MAX_LINE_LENGTH) > + ksft_exit_fail_msg("%s: Pattern is too long\n", __func__); > + > + fp = fopen(SMAP, "r"); > + if (!fp) > + ksft_exit_fail_msg("%s: Failed to open file %s\n", __func__, SMAP); > + > + if (!check_for_pattern(fp, addr_pattern, buffer)) > + goto err_out; > + > + /* > + * Fetch the AnonHugePages: in the same block and check the number of > + * hugepages. > + */ > + if (!check_for_pattern(fp, "AnonHugePages:", buffer)) > + goto err_out; > + > + if (sscanf(buffer, "AnonHugePages:%10ld kB", &thp) != 1) > + ksft_exit_fail_msg("Reading smap error\n"); > + > +err_out: > + fclose(fp); > + return thp; > +} > diff --git a/tools/testing/selftests/vm/vm_util.h b/tools/testing/selftests/vm/vm_util.h > new file mode 100644 > index 0000000000000..7522dbb859f0f > --- /dev/null > +++ b/tools/testing/selftests/vm/vm_util.h > @@ -0,0 +1,15 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +#include > +#include > +#include "../kselftest.h" > + > +#define PMD_SIZE "/sys/kernel/mm/transparent_hugepage/hpage_pmd_size" Ehm no. PMD_SIZE_PATH at best -- just as it used to. > +#define SMAP "/proc/self/smaps" SMAPS_PATH > +#define DIRTY_BIT_LOCATION 55 Please inline that just as it used to. There is no value in a magic define without any proper namespace. > +#define MAX_LINE_LENGTH 512 This used to be 500. Why the change? Also: weird indentation and these all look like the should go into vm_util.c. They are not used outside that file. -- Thanks, David / dhildenb