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 18BE7CDB47E for ; Wed, 18 Oct 2023 11:32:39 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6304E8D0150; Wed, 18 Oct 2023 07:32:39 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5E15E8D0016; Wed, 18 Oct 2023 07:32:39 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4A8E08D0150; Wed, 18 Oct 2023 07:32:39 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 39A148D0016 for ; Wed, 18 Oct 2023 07:32:39 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 058B5161246 for ; Wed, 18 Oct 2023 11:32:39 +0000 (UTC) X-FDA: 81358369638.02.34E0F63 Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) by imf25.hostedemail.com (Postfix) with ESMTP id 2368FA0005 for ; Wed, 18 Oct 2023 11:32:36 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=rivosinc-com.20230601.gappssmtp.com header.s=20230601 header.b=l6CCpRvB; spf=pass (imf25.hostedemail.com: domain of alexghiti@rivosinc.com designates 209.85.221.43 as permitted sender) smtp.mailfrom=alexghiti@rivosinc.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1697628757; 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:dkim-signature; bh=ZHg4mM71KXb5DEEj0eqsenmzI1spOu0jlYYbZtbcLDI=; b=EaywaplPR/hbmC0VZNglON2wEiJVTKyl0x69jAfbDOrx9aUYjr3cS2d247bD6Lwz/bEHyO sZxKy4lUgw49EfcMzgjc5I7xH9TbGF35t/LTjGzHxgCRFxuIaqpBQXYxJVP8CKponFnBdj VqIiFuSbzOleB+WemiAMyCZ+oY1y2NI= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1697628757; a=rsa-sha256; cv=none; b=dNtcftpjuJ72AbvX1JAaItdaDcvQ4AjHAn9zuzWH+PsGx4BlPbUUxX6IXdp2IxHGxFBoPG aDKT32cVLvMrjxAZJYkHvPIO6f+HFbaeP8smDNcl0zxY2BNraMLcsMkSfZfs5OvHfEH9hJ TFNkhdJXEVub+7KSPK76L6VEBMiLOSc= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=rivosinc-com.20230601.gappssmtp.com header.s=20230601 header.b=l6CCpRvB; spf=pass (imf25.hostedemail.com: domain of alexghiti@rivosinc.com designates 209.85.221.43 as permitted sender) smtp.mailfrom=alexghiti@rivosinc.com; dmarc=none Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-32d9552d765so5234856f8f.2 for ; Wed, 18 Oct 2023 04:32:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1697628755; x=1698233555; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=ZHg4mM71KXb5DEEj0eqsenmzI1spOu0jlYYbZtbcLDI=; b=l6CCpRvB0t0rznQgjNMV9Ypa4iceVXT7WDipjP4TmqDPRWHWjZKaA+SupFsEUheeNT XtCbIChvSAh8Bnys5E7de1uVUnVRjO0p1nAiIkOZAS2665pfE+6NTOgtCj/v6LOSo6eT ztyjDTmRyfWHA80jCfq0iqnqVugsP6HXSRBhetj1BC8uJp9PMeiunVxcEDbp2TEdZPYW G0A81omAjWqkFIlZuSVZq00JE5+6k2bJN/KJSUfJBEEDOgDMVWaowbD6lzCE77XqGM0y eMd8+AU+66YlkCxa+h29LlVZwdHo/fscPvMZt9Ck0embMY7cqvAA8J78nTy5sxBjPDJL 1QRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697628755; x=1698233555; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZHg4mM71KXb5DEEj0eqsenmzI1spOu0jlYYbZtbcLDI=; b=GzOXYwJ2h+Qxqtkm1M5rI6uiUNppFGzf+cwBhJ8quld4l/uvZPDpaGjaa74S5WP/7N J+8wexjOUxG9PiVsdSHOhLx9QUlbPFrfqMtYuXL8/rmbn/fzepR4VHl9ZtEZfgkBwizI LWX+LJX/MIMDkb7fNdKsijgCc67RMdJef93PvsW696gsUO4bUY9kVqOPRBczu2cI/S2/ Jmo7rh2hRgVyk7lYkRqkcIDxBrBCgPapwaz74UKAj4jydQ+Qv3Fbzhi05PnpUjbBzlsD 6efp2ZRRA6FDyjyGn2XnDce5/q8emaUCW24ZKkF0xyT2yl0aHfHlowcAQs77IxqR6jLY NLwA== X-Gm-Message-State: AOJu0YxTbPB3UBsI7kNGG+0qRNvR2XaHG6CmqaHHvxyYDa8636pZ1jKQ qJvYFZ9Dh6A0MaBegqEJG3NEOMLT13B0FC7pjIxokQ== X-Google-Smtp-Source: AGHT+IE7XG0RKk8s+uBzZafDLTDJ6fdrdFzovu8zj80LYFemlglr4j6DZXpsSClEETmOBCTzjgEKBb3b1Jy3x7exweE= X-Received: by 2002:a5d:668d:0:b0:32d:9789:6066 with SMTP id l13-20020a5d668d000000b0032d97896066mr4216230wru.5.1697628755552; Wed, 18 Oct 2023 04:32:35 -0700 (PDT) MIME-Version: 1.0 References: <20230911131224.61924-1-alexghiti@rivosinc.com> <20230911131224.61924-3-alexghiti@rivosinc.com> <79d8ca23-478d-4f88-afb3-343a85ed0fe6@sifive.com> In-Reply-To: <79d8ca23-478d-4f88-afb3-343a85ed0fe6@sifive.com> From: Alexandre Ghiti Date: Wed, 18 Oct 2023 13:32:24 +0200 Message-ID: Subject: Re: [PATCH v4 2/4] riscv: Improve flush_tlb_range() for hugetlb pages To: Samuel Holland Cc: Andrew Jones , Will Deacon , "Aneesh Kumar K . V" , Andrew Morton , Nick Piggin , Peter Zijlstra , Mayuresh Chitale , Vincent Chen , Paul Walmsley , Palmer Dabbelt , Albert Ou , linux-arch@vger.kernel.org, linux-mm@kvack.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Samuel Holland , Lad Prabhakar Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 2368FA0005 X-Rspam-User: X-Stat-Signature: ntms9g61os613jafdcxh6i5wjoqcngxa X-Rspamd-Server: rspam03 X-HE-Tag: 1697628756-802941 X-HE-Meta: U2FsdGVkX18CqUOg6leJ9OCPAHjs2x+HDMTwwM43gPGlQKAG0/VfZYQz6z4/0LpyYFT4qDfcbAb48kvvNkaLclqzAq3zfTogFfKU87Ny3W8OUfluYvdZkajx0CZRat754ZaE7ILDOJHQb5sETTz0E70PE8nNFP4KDVMMHhz5sih4z+rQ0icPyNQB0ISxcBicSrZb/bhduTSUCvrkw6yFPHxAz8ThaEkzBoZtgaChSfnxjTbk5VIzCFvkXUyg9y06UhMZ/+pdlNAxn3VrtSrEi9RspLYjv5sHsE2L3XuLKZWVkOdMHW0WBNo4FkwZylVY5h1g0indX6DKXfq1zcPxuGTz+E1c5kBBDeztLZ3endIUEeTseUtezrgw2ajlwYfyyvgv5pvpqifJ+2pwuu0rKZXJwD7THr2FyX/jNBZHISzQnqF4PoTDVPr7tCY76jigJmJk3y262jCq1Plk8tP4G1nLkS3QpA/FX/cTm0sDFRGEcqfAnQMYGXwWYeqZk0xxUeTrfIpR6ESIc8dvLtjR5fmeHiDRPtNAsaPizp+Wf8Wh9PLs/kj/qC5eLVXfU3I+IQ48OqOQ9eEYe/21q4Y3SCwf9YirWCBq4Ya54a8+BtKZA4Y3SdLbeQymkaRdRMeqHAn3UMJpIgXKvsYcDzdCOcop0nHzAG0AsYaAHBoXUNsmSYqylbZ6p+P/uz1bVgH+wTTHzKVV95gnGhLN6A25MVdudjiwpnmc2N81VaFOmDA0S1FDXM+3viJ4/7zYA5hqF7Q43ILpDMNbT3LFBADvsLABwLVmUXXl5huDFf67CEE5WSEClzGWktv8pIXW6Q3D9NpcpfwqlCU5+KNAAPiOka2DByR9Z8AnkLl0sIp6RXJdvWOvjCfaYvEIPZBrxOXH2mL/Vc00x5FV/c6puHZri4/9Q2pf6lL1gC5bj0RTvr8ZgYfRhglUYy6eiMppHFwiqYFt77bQ7ViGZ2u8tfA WlfJE/vb ZyTMlTxO+66KhSKqROeqcefYBW8dp5GynUWntriRwoO4KX6/jUhdIwVi1yhiD2j1kMAg9c+PLKtzYjtYER87dGlt0WKcZcIRGFkcrz4BXChieZ/tLh+c3/vKgxYdQxAV78cCoMr/Z+KnkH22vRNNjgP25vVo4RmnmzVAV+3+MFFR3C5k4SxPIl8wJCBoTx4YMOa01h9J9Rjh4HJqvqiPCpQpBrl+aMACOzurVxebpLnpQkFlTQ2BOtgSvn2EvnhnVVBlXFajCvQ+6eDE+/MZsBpl42/SVQpOJsEtYD4bv9BmtFqI/FqJOqT6A0Lv2RhwjWb2qRToYGH4oPhvChhDx+BBiRGJq0pgHFikweTUcvU/AvgjO31ecJ9v3xxXFSWda7++iVIwuA/eLqD8D7rD8WsDVKUwV1tiVrDr8hvOpTYctU1CcDp2bGmyed2NK8n56ske1DwIsSzdFIBCydGVZoQ85JrNMVU01uWDlt3EqVD3ONseChpyEceuTfkTYj21M+PR9dHefM6nnboFA6NydwKh2r+lIgG1Aozeu2AQ2WoZUPrCR/9v9YHx/UUiGbxRotWm4 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: On Mon, Oct 9, 2023 at 7:53=E2=80=AFPM Samuel Holland wrote: > > Hi Alex, > > On 2023-09-11 8:12 AM, Alexandre Ghiti wrote: > > flush_tlb_range() uses a fixed stride of PAGE_SIZE and in its current f= orm, > > when a hugetlb mapping needs to be flushed, flush_tlb_range() flushes t= he > > whole tlb: so set a stride of the size of the hugetlb mapping in order = to > > only flush the hugetlb mapping. However, if the hugepage is a NAPOT reg= ion, > > all PTEs that constitute this mapping must be invalidated, so the strid= e > > size must actually be the size of the PTE. > > > > Note that THPs are directly handled by flush_pmd_tlb_range(). > > > > Signed-off-by: Alexandre Ghiti > > Reviewed-by: Andrew Jones > > --- > > arch/riscv/mm/tlbflush.c | 39 ++++++++++++++++++++++++++++++++++++++- > > 1 file changed, 38 insertions(+), 1 deletion(-) > > > > diff --git a/arch/riscv/mm/tlbflush.c b/arch/riscv/mm/tlbflush.c > > index fa03289853d8..5bda6d4fed90 100644 > > --- a/arch/riscv/mm/tlbflush.c > > +++ b/arch/riscv/mm/tlbflush.c > > @@ -3,6 +3,7 @@ > > #include > > #include > > #include > > +#include > > #include > > #include > > > > @@ -147,7 +148,43 @@ void flush_tlb_page(struct vm_area_struct *vma, un= signed long addr) > > void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, > > unsigned long end) > > { > > - __flush_tlb_range(vma->vm_mm, start, end - start, PAGE_SIZE); > > + unsigned long stride_size; > > + > > + stride_size =3D is_vm_hugetlb_page(vma) ? > > + huge_page_size(hstate_vma(vma)) : > > + PAGE_SIZE; > > + > > +#ifdef CONFIG_RISCV_ISA_SVNAPOT > > + /* > > + * As stated in the privileged specification, every PTE in a NAPO= T > > + * region must be invalidated, so reset the stride in that case. > > + */ > > + if (has_svnapot()) { > > This whole block should probably go inside the is_vm_hugetlb_page(vma) ch= eck, > since we have to perform that check anyway. Yes, you're right. > > > + unsigned long order, napot_size; > > + > > + for_each_napot_order(order) { > > + napot_size =3D napot_cont_size(order); > > + > > + if (stride_size !=3D napot_size) > > + continue; > > + > > + if (napot_size >=3D PGDIR_SIZE) > > Can you check stride_size here directly, and drop the loop? We should be = able to > assume that the huge page size is valid. Non-NAPOT hugepages will hit one= of the > equal-to cases below, which is fine. Yes, again, you're right. I'll respin a new version now, let it go through our CI and send it tomorro= w, Thanks, Alex > > Regards, > Samuel > > > + stride_size =3D PGDIR_SIZE; > > + else if (napot_size >=3D P4D_SIZE) > > + stride_size =3D P4D_SIZE; > > + else if (napot_size >=3D PUD_SIZE) > > + stride_size =3D PUD_SIZE; > > + else if (napot_size >=3D PMD_SIZE) > > + stride_size =3D PMD_SIZE; > > + else > > + stride_size =3D PAGE_SIZE; > > + > > + break; > > + } > > + } > > +#endif > > + > > + __flush_tlb_range(vma->vm_mm, start, end - start, stride_size); > > } > > #ifdef CONFIG_TRANSPARENT_HUGEPAGE > > void flush_pmd_tlb_range(struct vm_area_struct *vma, unsigned long sta= rt, >