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 907CDC83F1B for ; Thu, 17 Jul 2025 11:25:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2BD276B00AA; Thu, 17 Jul 2025 07:25:03 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 295006B00AB; Thu, 17 Jul 2025 07:25:03 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1AB176B00AD; Thu, 17 Jul 2025 07:25:03 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 0BFBC6B00AA for ; Thu, 17 Jul 2025 07:25:03 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id B51661A06BD for ; Thu, 17 Jul 2025 11:25:02 +0000 (UTC) X-FDA: 83673524844.28.EB71F2A Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) by imf30.hostedemail.com (Postfix) with ESMTP id C84FA80002 for ; Thu, 17 Jul 2025 11:25:00 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=TMiyl6wa; spf=pass (imf30.hostedemail.com: domain of lianux.mm@gmail.com designates 209.85.216.46 as permitted sender) smtp.mailfrom=lianux.mm@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752751500; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ZMT6fE/DNbQkiKqemNDiWNAX9JwNMC9DrX8cJvHr54A=; b=tt/CssRxLmU8F3KO08mMZSc3r9Yf2v+alWVjyQPMBnokWw+ipTjEAGd1D3ZBbLpEfhVxrz tk6/FegpzjZQjJz8mC+bTEXZ6lDQN6dkFVTiq1xhxbtKiJedWhY1WCg5gw/Jv4aWua4oME npXEnoP5j2UWZZA+vpBssybp2zD37xE= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=TMiyl6wa; spf=pass (imf30.hostedemail.com: domain of lianux.mm@gmail.com designates 209.85.216.46 as permitted sender) smtp.mailfrom=lianux.mm@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752751500; a=rsa-sha256; cv=none; b=Pm10smC7fe7HLIlw/ed8x1IOLEBCQTRNnbDkitPloghBGVhSnR3JNm+bbGK8V3g4Wp9zkX s23868093Y0p/PIhjtsVOyvbmkhW05/FbhqLNeBZf+bJJs8szqf3Sw6mXaNpEJJgWXJb4L 9/uZlNy0Ac9VtKPGq0gI1xhowze31lc= Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-311da0bef4aso955931a91.3 for ; Thu, 17 Jul 2025 04:25:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752751500; x=1753356300; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ZMT6fE/DNbQkiKqemNDiWNAX9JwNMC9DrX8cJvHr54A=; b=TMiyl6waXUJ2S2r7fmm+Fva9abS2nq6l+ZMbEDTqSw27Haaspr6/aq507LmVU+DFwl oPaNk0S0wO0AB5l4niva07EyPSvw8P2aDo9jujY1i744aH+jJSVzDS6me8E6e/0A6Qls e7FEk3W/jB204fUrxVg9FunxrCcCQwkAJk2nNx1376YaSQHybXmbGQDMtVGOiyhbvXRR QKGCazL9uRIh5u5KvdMkv4N8wISg/enGVIQ8Qz6co5Eg7CCD+IO+1sYXLCiLYRmyzG8h 5z39wMFQrM1/Bd72eFVpDklTREb/Rs2u60ovVfV4ONeHirc9vDSjs+8LXQ30JPO5lJVE toRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752751500; x=1753356300; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZMT6fE/DNbQkiKqemNDiWNAX9JwNMC9DrX8cJvHr54A=; b=TV9cfYyOJyoswftJMj36HIdQv8DXk34/CRCVWdB7BPwNlHIUrL1cyHryMjFcHQESwA 07Pr0JAvHV4q3FchS8153W0QQQIcNscnvvNlNeCy4Isw/kLo71QJpWgQj9MpaKp0LZyf eINWlBIsBw4R6h4QcWPDQhOHdiZe6f4l601YS5QXyMcctBKylAQP1a2gVpLtdSUNJEpK 95aAgw3A6kWUK+dQZSSRhkh4fvcQkutJ//d42ZYBembfqLzSGedCeplzAoeKpLIO4JRS JfS6S3UNfAUZvK47TtrxD7Hs0Sg9VjGJ+La7269XujDKWWC52GFndPaPEzfjaHC0Urfr BSkQ== X-Forwarded-Encrypted: i=1; AJvYcCWIcMPFzDAg6I7LelvYuUgPQKnC30ZIulBZDnSmaIG6euaA5eJ6dBor2buA/Hbb3sf+KhRIxS+pbQ==@kvack.org X-Gm-Message-State: AOJu0YyuOk8wbfp7iU4gcBuZ4juQnj5Rijt0O2gV6eZYYb7TZ9qJO+Qf 1pIKFJmbBniHFpCt03eBmourSH697MRKmK9YN+Rgz3wRWKwP8yN0ORjo X-Gm-Gg: ASbGncv0V1PsqN4Idx56nLFTo8uQ+Rl5bhZcyUV0PDufOXM025Ihuor1T6T++PQciAt x4XocA13k9ZDwOPIOeHnq8T+2sHCVRyu0pnxW8L2k1scojlIiTw6jBAEWhFxXbvulqEvgvTzsT1 21hwfnK5vitESwQYitm0zY1kALGnOPDTtzt/c54ODiMnp3dxBpfmCJrouzHT/gyhEl+NFH5E7Nj ykUnIqIpeiMYdaV/f7Zg+vh2H7SNwETdPz8ogTo1d+ZlyxodX2OXugCjfH/u1fdTNvPuCou3lxH 4Q+i7rSZ5nV2hsoYdNn1Kgaai1ZWqthu3NZKoI4SPmZ4yZDQvhrbONTXM+Po9edbf3mgw8Ab/Xt zxtkw3FXv4i9BZDEjASJtD2CHAuGML/H7NUfo7AiIpygF X-Google-Smtp-Source: AGHT+IEJEKvCJyJnvX4Q2gv2UnxBBrlUnFePWnxT4lcx+hQbAnXYDNB0h2Q2awC+uZJSz+6aHeAtCQ== X-Received: by 2002:a17:90b:3bcd:b0:313:28f1:fc33 with SMTP id 98e67ed59e1d1-31c9f3c5acamr9151360a91.10.1752751499365; Thu, 17 Jul 2025 04:24:59 -0700 (PDT) Received: from DESKTOP-GIED850.localdomain ([114.247.113.178]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-31c9153803esm2530794a91.0.2025.07.17.04.24.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Jul 2025 04:24:59 -0700 (PDT) From: wang lian To: akpm@linux-foundation.org, broonie@kernel.org, david@redhat.com, lorenzo.stoakes@oracle.com, sj@kernel.org, ziy@nvidia.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: brauner@kernel.org, gkwang@linx-info.com, jannh@google.com, Liam.Howlett@oracle.com, lianux.mm@gmail.com, ludovico.zy.wu@gmail.com, p1ucky0923@gmail.com, richard.weiyang@gmail.com, ryncsn@gmail.com, shuah@kernel.org, vbabka@suse.cz, zijing.zhang@proton.me Subject: [PATCH 2/2] selftests/mm: reuse FORCE_READ to replace "asm volatile("" : "+r" (XXX));" Date: Thu, 17 Jul 2025 19:24:07 +0800 Message-ID: <20250717112407.13507-3-lianux.mm@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250717112407.13507-1-lianux.mm@gmail.com> References: <20250717112407.13507-1-lianux.mm@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Queue-Id: C84FA80002 X-Rspamd-Server: rspam06 X-Stat-Signature: yfg1z7gbn97dj78baorga84bg77rp7ho X-HE-Tag: 1752751500-600165 X-HE-Meta: U2FsdGVkX19PDbvdEFWpFMfrhzFEAPcXl+5xyTSDDaXMmMjyhHticYq7qrL42nraWFRulAYvNH1tLvUdG7PTxIqphhaeVjIR/gpxLE4fl5Cza/AsZEuQscyeVr5Zwj1reyOvVgzI4xyRNUB4t0dKbz7Rz1Od8dNVwjDBOco/76VGhydLMf3paq0YVQtXb0T65yhHi8ACq3ep71egIlCXJ1QC3nKw6WRxRaeP0nMgsUcyoB9Q6KOQaaXP3u0Cg6lnI3gAvesglnUU1yL9xN5o6g/8Mb/vzH1iUcL4FOcv5p7YyJFLt+Amr3NM0jjjs6qlZfk4TStc2zI/uTwcj3LJF4DxPtgz06PpDwgJPLb3sgFrvQQNLIoDMFAkvmwrDLP1PLbrqr9ldoDBJOesy1M2AKXmk6X69vw+fyCbcLKvLc/ql1+Yb82OcfDjo6yPM/k7F+V/CpfC6oUqghaROt+tjaJGMnftxTPd3N6KbrSXO5zhvKQmd7Pokkbwz8CMKDKFerjA6HC/X0hKeIb2+ZYzNpBBJjBprGTnG7oAaoWUYhpthqzRNKz+rQMOKcoRVm78rDQQCNSTSg47nerq2fMhHHPPQLeBruT7AUeLqTu3UTcbHjPRGySUt6vR30WBcIW9ELiD3eeYcYQEeIGnGcgmvJs3UQz4nAjMPl7KuYjkhOpbA5Q3xuvUkH7t76irDdbuMVuDtNEjLW+eEIND62lG4OVoY7rErDb3CkPH/7dFaUyYnVOZVzxRcrmCYV8LOCaa7M4kYHajLheidjljGxZ0cEWTkrd4L6fXulU4MD4Y2p7u1Ygqhw+mYeJPsfbZfbRoy4Dva9qezW1TIJeWjbDDnhOCYZ+q/HKyd6BTxKYUh3hnopJriPYELbKOR8scmR3Iu/Xhwx2QGhHscZxtFO4OhjJNt3RhuuiBomt+my3WaHwA0IltRiRGHhXUz6ZggNHYX98gIyY8+p2S6XhlG2K r6gkY0B1 gr/lWYeo3kQHJ8gWFAdhLjyE+JDfjdfYDZQX8VQpw2FLzI+GyRjPMzaouDSJOZQIa9NUvHT0DQANYRV+sopGNrz3Ynl7XxHtPQujGRkN/brHpy/OctKAQVIVWejBxRV/Uj+4XID2Sbvk/yiMwNYxGEUdf/GqK1Vu9vH1xNlDY3HT4/haoDSfxVgDcPDPo6c5YtwnUWiYdtO/Jcw0azA0LGID2SbSC6EMGDiYf31BhNHilKVSiao9Dhb8YRBUp1Mld31W/p7j06DVZisAyVcOkbIn8SJDbt7Fm5nwFpGtXb6Jj74AhRir3zudyVnOeXefJZcHq1O4AjyBPTKE3cLtLpdNi4k0CBxVsdnqCb7s0tRz3k7/Xb7Ch36QeyqJ4abQHHC/YVblxsG2nHqunNydb6ZYILtyz1a7zRC4jouSr/EjqrH5DFMGOmbUSz0M1gtAdOIPu60EUYjACDh50Nr2hlk+gOurHbfO5fmpixxIwFDM/6zQTjVNIvLtRmzu6IzCn61hwY2QuRDctAN4FxoiwTj7P0Yl20rn4oRX2mEZTbXXwhNUYjJJRwdqk1vrY7m5UOIA2Sn/FQZBHngksyan+XqCejXWzsVaXr3vdLQhNbm0wImI54BwYH3PT7XWAy7beSrJ/ X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Several mm selftests use the `asm volatile("" : "+r" (variable));` construct to force a read of a variable, preventing the compiler from optimizing away the memory access. This idiom is cryptic and duplicated across multiple test files. Following a suggestion from David[1], this patch refactors this common pattern into a FORCE_READ() macro [1] https://lore.kernel.org/lkml/4a3e0759-caa1-4cfa-bc3f-402593f1eee3@redhat.com/ Signed-off-by: wang lian Reviewed-by: Lorenzo Stoakes Acked-by: David Hildenbrand --- tools/testing/selftests/mm/cow.c | 30 +++++++++---------- tools/testing/selftests/mm/hugetlb-madvise.c | 5 +--- tools/testing/selftests/mm/migration.c | 13 ++++---- tools/testing/selftests/mm/pagemap_ioctl.c | 4 +-- .../selftests/mm/split_huge_page_test.c | 4 +-- 5 files changed, 24 insertions(+), 32 deletions(-) diff --git a/tools/testing/selftests/mm/cow.c b/tools/testing/selftests/mm/cow.c index 788e82b00b75..d30625c18259 100644 --- a/tools/testing/selftests/mm/cow.c +++ b/tools/testing/selftests/mm/cow.c @@ -1534,7 +1534,7 @@ static void test_ro_fast_pin(char *mem, const char *smem, size_t size) static void run_with_zeropage(non_anon_test_fn fn, const char *desc) { - char *mem, *smem, tmp; + char *mem, *smem; log_test_start("%s ... with shared zeropage", desc); @@ -1554,8 +1554,8 @@ static void run_with_zeropage(non_anon_test_fn fn, const char *desc) } /* Read from the page to populate the shared zeropage. */ - tmp = *mem + *smem; - asm volatile("" : "+r" (tmp)); + FORCE_READ(mem); + FORCE_READ(smem); fn(mem, smem, pagesize); munmap: @@ -1566,7 +1566,7 @@ static void run_with_zeropage(non_anon_test_fn fn, const char *desc) static void run_with_huge_zeropage(non_anon_test_fn fn, const char *desc) { - char *mem, *smem, *mmap_mem, *mmap_smem, tmp; + char *mem, *smem, *mmap_mem, *mmap_smem; size_t mmap_size; int ret; @@ -1617,8 +1617,8 @@ static void run_with_huge_zeropage(non_anon_test_fn fn, const char *desc) * the first sub-page and test if we get another sub-page populated * automatically. */ - tmp = *mem + *smem; - asm volatile("" : "+r" (tmp)); + FORCE_READ(mem); + FORCE_READ(smem); if (!pagemap_is_populated(pagemap_fd, mem + pagesize) || !pagemap_is_populated(pagemap_fd, smem + pagesize)) { ksft_test_result_skip("Did not get THPs populated\n"); @@ -1634,7 +1634,7 @@ static void run_with_huge_zeropage(non_anon_test_fn fn, const char *desc) static void run_with_memfd(non_anon_test_fn fn, const char *desc) { - char *mem, *smem, tmp; + char *mem, *smem; int fd; log_test_start("%s ... with memfd", desc); @@ -1668,8 +1668,8 @@ static void run_with_memfd(non_anon_test_fn fn, const char *desc) } /* Fault the page in. */ - tmp = *mem + *smem; - asm volatile("" : "+r" (tmp)); + FORCE_READ(mem); + FORCE_READ(smem); fn(mem, smem, pagesize); munmap: @@ -1682,7 +1682,7 @@ static void run_with_memfd(non_anon_test_fn fn, const char *desc) static void run_with_tmpfile(non_anon_test_fn fn, const char *desc) { - char *mem, *smem, tmp; + char *mem, *smem; FILE *file; int fd; @@ -1724,8 +1724,8 @@ static void run_with_tmpfile(non_anon_test_fn fn, const char *desc) } /* Fault the page in. */ - tmp = *mem + *smem; - asm volatile("" : "+r" (tmp)); + FORCE_READ(mem); + FORCE_READ(smem); fn(mem, smem, pagesize); munmap: @@ -1740,7 +1740,7 @@ static void run_with_memfd_hugetlb(non_anon_test_fn fn, const char *desc, size_t hugetlbsize) { int flags = MFD_HUGETLB; - char *mem, *smem, tmp; + char *mem, *smem; int fd; log_test_start("%s ... with memfd hugetlb (%zu kB)", desc, @@ -1778,8 +1778,8 @@ static void run_with_memfd_hugetlb(non_anon_test_fn fn, const char *desc, } /* Fault the page in. */ - tmp = *mem + *smem; - asm volatile("" : "+r" (tmp)); + FORCE_READ(mem); + FORCE_READ(smem); fn(mem, smem, hugetlbsize); munmap: diff --git a/tools/testing/selftests/mm/hugetlb-madvise.c b/tools/testing/selftests/mm/hugetlb-madvise.c index e74107185324..1afe14b9dc0c 100644 --- a/tools/testing/selftests/mm/hugetlb-madvise.c +++ b/tools/testing/selftests/mm/hugetlb-madvise.c @@ -47,14 +47,11 @@ void write_fault_pages(void *addr, unsigned long nr_pages) void read_fault_pages(void *addr, unsigned long nr_pages) { - volatile unsigned long dummy = 0; unsigned long i; for (i = 0; i < nr_pages; i++) { - dummy += *((unsigned long *)(addr + (i * huge_page_size))); - /* Prevent the compiler from optimizing out the entire loop: */ - asm volatile("" : "+r" (dummy)); + FORCE_READ(((unsigned long *)(addr + (i * huge_page_size)))); } } diff --git a/tools/testing/selftests/mm/migration.c b/tools/testing/selftests/mm/migration.c index a306f8bab087..c5a73617796a 100644 --- a/tools/testing/selftests/mm/migration.c +++ b/tools/testing/selftests/mm/migration.c @@ -16,6 +16,7 @@ #include #include #include +#include "vm_util.h" #define TWOMEG (2<<20) #define RUNTIME (20) @@ -103,15 +104,13 @@ int migrate(uint64_t *ptr, int n1, int n2) void *access_mem(void *ptr) { - volatile uint64_t y = 0; - volatile uint64_t *x = ptr; - while (1) { pthread_testcancel(); - y += *x; - - /* Prevent the compiler from optimizing out the writes to y: */ - asm volatile("" : "+r" (y)); + /* Force a read from the memory pointed to by ptr. This ensures + * the memory access actually happens and prevents the compiler + * from optimizing away this entire loop. + */ + FORCE_READ((uint64_t *)ptr); } return NULL; diff --git a/tools/testing/selftests/mm/pagemap_ioctl.c b/tools/testing/selftests/mm/pagemap_ioctl.c index c2dcda78ad31..0d4209eef0c3 100644 --- a/tools/testing/selftests/mm/pagemap_ioctl.c +++ b/tools/testing/selftests/mm/pagemap_ioctl.c @@ -1525,9 +1525,7 @@ void zeropfn_tests(void) ret = madvise(mem, hpage_size, MADV_HUGEPAGE); if (!ret) { - char tmp = *mem; - - asm volatile("" : "+r" (tmp)); + FORCE_READ(mem); ret = pagemap_ioctl(mem, hpage_size, &vec, 1, 0, 0, PAGE_IS_PFNZERO, 0, 0, PAGE_IS_PFNZERO); diff --git a/tools/testing/selftests/mm/split_huge_page_test.c b/tools/testing/selftests/mm/split_huge_page_test.c index f0d9c035641d..05de1fc0005b 100644 --- a/tools/testing/selftests/mm/split_huge_page_test.c +++ b/tools/testing/selftests/mm/split_huge_page_test.c @@ -399,7 +399,6 @@ int create_pagecache_thp_and_fd(const char *testfile, size_t fd_size, int *fd, char **addr) { size_t i; - int dummy = 0; unsigned char buf[1024]; srand(time(NULL)); @@ -441,8 +440,7 @@ int create_pagecache_thp_and_fd(const char *testfile, size_t fd_size, int *fd, madvise(*addr, fd_size, MADV_HUGEPAGE); for (size_t i = 0; i < fd_size; i++) - dummy += *(*addr + i); - asm volatile("" : "+r" (dummy)); + FORCE_READ((*addr + i)); if (!check_huge_file(*addr, fd_size / pmd_pagesize, pmd_pagesize)) { ksft_print_msg("No large pagecache folio generated, please provide a filesystem supporting large folio\n"); -- 2.43.0