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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 62147C433EF for ; Wed, 3 Nov 2021 21:54:13 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id BCC3360E08 for ; Wed, 3 Nov 2021 21:54:12 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org BCC3360E08 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=wanadoo.fr Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id 56835940007; Wed, 3 Nov 2021 17:54:12 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 517F56B0072; Wed, 3 Nov 2021 17:54:12 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 42DD3940007; Wed, 3 Nov 2021 17:54:12 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0215.hostedemail.com [216.40.44.215]) by kanga.kvack.org (Postfix) with ESMTP id 346C06B006C for ; Wed, 3 Nov 2021 17:54:12 -0400 (EDT) Received: from smtpin26.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id DD1AE71441 for ; Wed, 3 Nov 2021 21:54:11 +0000 (UTC) X-FDA: 78768972702.26.D5795DA Received: from smtp.smtpout.orange.fr (smtp02.smtpout.orange.fr [80.12.242.124]) by imf03.hostedemail.com (Postfix) with ESMTP id D126E3000096 for ; Wed, 3 Nov 2021 21:54:04 +0000 (UTC) Received: from [192.168.1.18] ([86.243.171.122]) by smtp.orange.fr with ESMTPA id iOCvmLlHeBazoiOCvmx3Yo; Wed, 03 Nov 2021 22:54:10 +0100 X-ME-Helo: [192.168.1.18] X-ME-Auth: YWZlNiIxYWMyZDliZWIzOTcwYTEyYzlhMmU3ZiQ1M2U2MzfzZDfyZTMxZTBkMTYyNDBjNDJlZmQ3ZQ== X-ME-Date: Wed, 03 Nov 2021 22:54:10 +0100 X-ME-IP: 86.243.171.122 Subject: Re: [PATCH] mm/mremap_pages: Save a few cycles in 'get_dev_pagemap()' To: Matthew Wilcox Cc: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org References: From: Christophe JAILLET Message-ID: <5da6ef93-97c6-6165-8a73-eb1050589ba7@wanadoo.fr> Date: Wed, 3 Nov 2021 22:54:09 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: fr X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: D126E3000096 X-Stat-Signature: fodncdh8n39sfdazurebsoe95gy56nb9 Authentication-Results: imf03.hostedemail.com; dkim=none; dmarc=none; spf=none (imf03.hostedemail.com: domain of christophe.jaillet@wanadoo.fr has no SPF policy when checking 80.12.242.124) smtp.mailfrom=christophe.jaillet@wanadoo.fr X-HE-Tag: 1635976444-838684 Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000310, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Le 03/11/2021 =C3=A0 22:41, Matthew Wilcox a =C3=A9crit=C2=A0: > On Wed, Nov 03, 2021 at 10:35:34PM +0100, Christophe JAILLET wrote: >> Use 'percpu_ref_tryget_live_rcu()' instead of 'percpu_ref_tryget_live(= )' to >> save a few cycles when it is known that the rcu lock is already >> taken/released. >=20 > If this is really important, we can add an __xa_load() which doesn't > take the RCU read lock. There are a few: rcu_read_lock(); mem =3D xa_load(...); rcu_read_unlock(); patterns here and there. I don't have any numbers of if saving some rcu_read_lock/rcu_read_unlock=20 would be useful in these cases. The only numbers I have are in [1]. [1]:=20 https://lore.kernel.org/linux-kernel/cover.1634822969.git.asml.silence@gm= ail.com/ CJ >=20 > I honestly think that the xarray is the wrong data structure here, > and we'd be better off with a simple array of (start, pointer) > tuples. >=20 >> Signed-off-by: Christophe JAILLET >> --- >> mm/memremap.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/mm/memremap.c b/mm/memremap.c >> index 84de22c14567..012e8d23d365 100644 >> --- a/mm/memremap.c >> +++ b/mm/memremap.c >> @@ -506,7 +506,7 @@ struct dev_pagemap *get_dev_pagemap(unsigned long = pfn, >> /* fall back to slow path lookup */ >> rcu_read_lock(); >> pgmap =3D xa_load(&pgmap_array, PHYS_PFN(phys)); >> - if (pgmap && !percpu_ref_tryget_live(pgmap->ref)) >> + if (pgmap && !percpu_ref_tryget_live_rcu(pgmap->ref)) >> pgmap =3D NULL; >> rcu_read_unlock(); >> =20 >> --=20 >> 2.30.2 >> >> >=20