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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 80724C433FE for ; Wed, 16 Mar 2022 08:56:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354670AbiCPI5Q (ORCPT ); Wed, 16 Mar 2022 04:57:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32840 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345549AbiCPI5O (ORCPT ); Wed, 16 Mar 2022 04:57:14 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 3FC3247049 for ; Wed, 16 Mar 2022 01:55:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1647420958; 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=Zjv+GKkD8TLQ5L/+ylqi/uX42nbdw2sUnxFBTaSL8L/We9CAzqttDt8SRvP4qXMI9JjZJh LfbPgLEsh8R6ceM4RmTisfY8/9B7winDw5/FBKuq4LCaq2R5cO4tLQQGQQTbgByxxZMXx/ 97YPcjhcwsbWuDSacO0fxDWkgOJH4NI= Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-102-Z0TrKOyqMje-WVHsFJ9hzw-1; Wed, 16 Mar 2022 04:55:56 -0400 X-MC-Unique: Z0TrKOyqMje-WVHsFJ9hzw-1 Received: by mail-wr1-f70.google.com with SMTP id z1-20020adfec81000000b001f1f7e7ec99so315631wrn.17 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=l0Nqs0vvylnimwDzs9YFJeTqPbIZugOaLh8STkB+cM2fCZXeHU2KzOdD4KUI+q9jow H7/5FIuF9MoXDDUvWu07MwykT4ybtqfFqnlzg/OAs6GzWSMW3TgL2zlHypoGwbh84Ko8 GfPFFmJXBFQJpsNFN+V+/rXjM84FbRaYWQwnRoGCN9Hq7cCqPvco9xSF34gUYFpnj+ml mIKPlWE1sSDHSO5BJ5xQgRBP1DNCflonx9SfsVOwG0DfBlisKb7p6+FTcHFDJ3PdTh7w d1s9Vx69/xxcQ8kazpI9Am8V2546BW+xs4e0e/2AhHv7lV5VxmFmmeHiVHMY1NzxdzuG JV5g== X-Gm-Message-State: AOAM5327u2T3ahPB+62S2jrJ6QqwFubs95IbbCqtaBPhfbNnz/6A/x3F Qgp0T84QJTo/OF4hjL2OEKpabmU1Y7U5zdgwwkjh7iECLYUl6iufSGyut0OQfaouOfdOfle3Tqa SLW5d3Wciql/eocebwdytKx8O X-Received: by 2002:a05:6000:2c9:b0:1f0:49aa:d347 with SMTP id o9-20020a05600002c900b001f049aad347mr23452348wry.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 Content-Language: en-US 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> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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