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 D005AC48BF6 for ; Thu, 29 Feb 2024 11:35:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CD8436B0089; Thu, 29 Feb 2024 06:35:27 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id C87536B0093; Thu, 29 Feb 2024 06:35:27 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B76586B0095; Thu, 29 Feb 2024 06:35:27 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id A8D776B0089 for ; Thu, 29 Feb 2024 06:35:27 -0500 (EST) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id C8FFB1C045B for ; Thu, 29 Feb 2024 11:35:25 +0000 (UTC) X-FDA: 81844635810.14.5F9D6D3 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf13.hostedemail.com (Postfix) with ESMTP id EF4DA2000F for ; Thu, 29 Feb 2024 11:35:23 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf13.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1709206524; 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; bh=jQKeWHr3Qw0XvRWXhOVx8J0HQ9KHAG/qw0RACMREGZA=; b=D1pNj5N962WXpIKo7z1v0LxrsGPqyb4ZuQt4Ygxrsqfltjn0GtMoyCHcfEse5ZQnIHtxMF A2n8B9Med4FKJeRF27jUXHx4RSSAXi4HxEvSEJjk1kcyx8K3I0rbx8OMqeI5Gub6CiEcbt RorlVw8oRBsUOAjvJRTInG6wmVxiBzg= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf13.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1709206524; a=rsa-sha256; cv=none; b=E/OJVdmzfVyAZz0l+C7aPKzWizjtHATkpN7Prwry6p6PLpcBvPx3yFYhZqVX37vFxW4yoh SwoxKUOpyJg9o/Qax0f1qrUUc6RwatzT6v2oImYWphZmw43POsPRpyUNayI13lOfrz3bgS c5MGxcUxTediGvJ/2xg1ZZx41t679jk= Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 9159B1FB; Thu, 29 Feb 2024 03:36:01 -0800 (PST) Received: from [10.57.68.58] (unknown [10.57.68.58]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8A3C43F762; Thu, 29 Feb 2024 03:35:21 -0800 (PST) Message-ID: Date: Thu, 29 Feb 2024 11:35:18 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] mm/memory.c: do_numa_page(): remove a redundant page table read Content-Language: en-GB To: John Hubbard , Andrew Morton Cc: LKML , linux-mm@kvack.org, David Hildenbrand References: <20240228034151.459370-1-jhubbard@nvidia.com> From: Ryan Roberts In-Reply-To: <20240228034151.459370-1-jhubbard@nvidia.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspam-User: X-Stat-Signature: tqodgq17jfjdm4zesntouoqyj33o4ccb X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: EF4DA2000F X-HE-Tag: 1709206523-191962 X-HE-Meta: U2FsdGVkX1+H46ISoBr+tnEUgxKbLBTE6Y3wOyVXNvru63nAXTDbUMVSBRgtb7/WYicv86v4VoXOiNEEtZ+W3muejyYS94i8TYMsqTStF88ILuWT2p7mFu2uOVCvE5esC55zp2Ljo66DiF04MeOTMzipCyFnx3neS/eQkqQN8lgOcEc1UMRnn8CEq1RH532MUR5r6ZGg3m2G1++KNs/qgETgAAkzlkQ1H0RDZtMLfgloyFI7v8+XvTXVsH8xKjU2AXC4nLCW0Rg/CCcOyfk/NOVPpFekls25168v6LGKHbhYbleFZZToFt5IfLbBCw8XBQrfP5wPkL9q6obcNxphDTetrivcJusn7hq6Mw7vYpwO6LMWy7vY/Rbmkf4eWxNQTYiw137ybo7sKzj68o/4cgv2qKTVMF4UXOOiahKYy7PxYDmhXVgYGeXu3Fz2mkjACMSujeeLADA9TVZ0/sz+gclkrlESVG3DWEtJQVhmm9RfYgzXWlPh3gK2bIm05YgJpVfNzTqpbFZdkh770UT6G4WV5chemcdWh8xH1mulNu4cIzmbQEAemOw5dRvjuRl/DKSFP3nqMZWWmQc/rZkAEWiLfaP0re0ZFMPuhrJWDoVgJSeiZVW6BFdlb12lx9wBlPVVsGFasRSAYbDnehA/2WvyaL99DkEiWNqYE9KNkGIhKdLKBE/+v84nq5irNp4Kxvr48Zuhm35xcR6D87LEeS8tKk7fKNdtkDff9kgCxSY5bipRwUVH916ydBz5nkEfqmhRie6gotn/GviuLySx3n/7nPlz+kJg/2+Lf8wlxSzdm0dRV4VMVf6MVQd94ofRiPYpf63usvQu27le7LTXUpW2/+r/RWLozNWx23m6Fefk/cxnpymzCsi4uXapV5+GED6WR2ehuRQ= 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: On 28/02/2024 03:41, John Hubbard wrote: > do_numa_page() is reading from the same page table entry, twice, while > holding the page table lock: once while checking that the pte hasn't > changed, and again in order to modify the pte. > > Instead, just read the pte once, and save it in the same old_pte > variable that already exists. This has no effect on behavior, other than > to provide a tiny potential improvement to performance, by avoiding the > redundant memory read (which the compiler cannot elide, due to > READ_ONCE()). > > Also improve the associated comments nearby. > > Cc: Ryan Roberts > Cc: David Hildenbrand > Signed-off-by: John Hubbard Reviewed-by: Ryan Roberts > --- > mm/memory.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/mm/memory.c b/mm/memory.c > index 0bfc8b007c01..df0711982901 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -4928,18 +4928,18 @@ static vm_fault_t do_numa_page(struct vm_fault *vmf) > int flags = 0; > > /* > - * The "pte" at this point cannot be used safely without > - * validation through pte_unmap_same(). It's of NUMA type but > - * the pfn may be screwed if the read is non atomic. > + * The pte cannot be used safely until we verify, while holding the page > + * table lock, that its contents have not changed during fault handling. > */ > spin_lock(vmf->ptl); > - if (unlikely(!pte_same(ptep_get(vmf->pte), vmf->orig_pte))) { > + /* Read the live PTE from the page tables: */ > + old_pte = ptep_get(vmf->pte); > + > + if (unlikely(!pte_same(old_pte, vmf->orig_pte))) { > pte_unmap_unlock(vmf->pte, vmf->ptl); > goto out; > } > > - /* Get the normal PTE */ > - old_pte = ptep_get(vmf->pte); > pte = pte_modify(old_pte, vma->vm_page_prot); > > /*