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 9D76ECD6119 for ; Mon, 9 Oct 2023 17:53:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3A2CA80034; Mon, 9 Oct 2023 13:53:49 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 351D380027; Mon, 9 Oct 2023 13:53:49 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1F26580034; Mon, 9 Oct 2023 13:53:49 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 0B97E80027 for ; Mon, 9 Oct 2023 13:53:49 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id D5926B4A69 for ; Mon, 9 Oct 2023 17:53:48 +0000 (UTC) X-FDA: 81326670936.26.9ABCCF7 Received: from mail-qk1-f173.google.com (mail-qk1-f173.google.com [209.85.222.173]) by imf08.hostedemail.com (Postfix) with ESMTP id E46BA160028 for ; Mon, 9 Oct 2023 17:53:46 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=sifive.com header.s=google header.b=mlMUV2qh; dmarc=pass (policy=reject) header.from=sifive.com; spf=pass (imf08.hostedemail.com: domain of samuel.holland@sifive.com designates 209.85.222.173 as permitted sender) smtp.mailfrom=samuel.holland@sifive.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1696874027; a=rsa-sha256; cv=none; b=RAPtFQkFqOZMBmS2EDlZbQebgzsWPQcA48I+8u6EwOQGY2AulVg5Ie77BPCXjs4y5UeDCC koUgYWR18T0+nwpCTDo+kJOU8CnUgwMo5YvWaB18RKH0W4mTHR+HkALsLOdK38WehOfV7h YQVtCaHSrUZGZU7Z3QStvFF+/Pj3y6c= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=sifive.com header.s=google header.b=mlMUV2qh; dmarc=pass (policy=reject) header.from=sifive.com; spf=pass (imf08.hostedemail.com: domain of samuel.holland@sifive.com designates 209.85.222.173 as permitted sender) smtp.mailfrom=samuel.holland@sifive.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1696874027; 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=/5YUwrppm/AoYHUPSKvRLI3OIQ5ZsMP8vebRQ0LmXCY=; b=JKSHJA7JS+lPfOet/bI9mNbYF5ZWbunYIZcu2PII+Cq3GHPU0U6uW6dtMEZH9z22AZL2sn bYHsPaFQgz99u7MYiEAvfou/+SvSdtxmcYvSI0yQZSqfYIYgVoBZm1bhPgQ0/3X6K5ALxy xgdmuHfX6gnuF5esA9aI4XbXY9vIE6o= Received: by mail-qk1-f173.google.com with SMTP id af79cd13be357-7741c2fae49so318486485a.0 for ; Mon, 09 Oct 2023 10:53:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1696874026; x=1697478826; darn=kvack.org; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=/5YUwrppm/AoYHUPSKvRLI3OIQ5ZsMP8vebRQ0LmXCY=; b=mlMUV2qhgt+f1WH/6WWonnvDrx8oyTJkY/bxpmmaJgTq5FVaT2AL71RloUfw/skmR/ +JNjhS06RjEki8Wit925O4s3ohcCL6+pAe1nxniF0lBjfqyZXzHrn4b77/2L7FzQdzRw vsnIpwd+i+qhCkn/hYk1BjybCkvmBrTAft63DC5wIJs1hlWNQCvzuq+0/0m+e1mZ6FAu tjLPY6z8EBiUpm/dOEB24QSN+2lfLj6GByw6BaD5JQk6JIgUL8BHfV7PR4upEVt+yI5/ lPbN746ZH3siYumR7W+TrZ734iiuraB8UTeqjIQ+Tx4lddzV53y7WQq8wI0WaA3Dpn6r I7jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696874026; x=1697478826; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=/5YUwrppm/AoYHUPSKvRLI3OIQ5ZsMP8vebRQ0LmXCY=; b=xTygXkgEmGUqaDJ5kELHNgoH3s8IoBAMHYm9ElKefUqcqkgNM8lqHQD6QIk0OhVGK9 0xjPPiAlyxcoqw6nNEAoRlNhpIc8WBYamvr2qQ1dBZWJCBgTvbkao3vKDiPUj3Cz3N0U KftZcb4M4bMK8X7OxVBlmoMYm+yElZZz5tRSdrF5uRgKlNnS+a7pwb1vRli267gOMUZu tGJLqmq7k882y4HEo7Nt2Em8RdrT9LCaqNTXGrs3TF+gZlUQT83BULVuDIPRyYXD8Fjf lwcsL4a6RTZHm/RT5JUvyHLZwkzedVo0euSgc/UdOtUv810ff+rnlzy74FLj6WqJ9ABe jbkQ== X-Gm-Message-State: AOJu0YzvUNl8HOotMzJBfiruRk7ERswkMYvNNFT9folQVKIsZ2a1DgOm F9ltKAIXHmQHVF/Oll+N9VAcDA== X-Google-Smtp-Source: AGHT+IHn3G7dp7w4ELGf7mKo4hz5o3p9FIlRvSczI8R7BrW5KIzLNolaRTbPbsB8nhk7K2CpQZp1tA== X-Received: by 2002:a05:620a:1a89:b0:773:a83f:413c with SMTP id bl9-20020a05620a1a8900b00773a83f413cmr21902058qkb.30.1696874025984; Mon, 09 Oct 2023 10:53:45 -0700 (PDT) Received: from ?IPV6:2600:1700:2000:b002:41c4:1832:a984:34e2? ([2600:1700:2000:b002:41c4:1832:a984:34e2]) by smtp.gmail.com with ESMTPSA id f10-20020a05620a15aa00b007659935ce64sm3681308qkk.71.2023.10.09.10.53.44 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 09 Oct 2023 10:53:45 -0700 (PDT) Message-ID: <79d8ca23-478d-4f88-afb3-343a85ed0fe6@sifive.com> Date: Mon, 9 Oct 2023 12:53:44 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 2/4] riscv: Improve flush_tlb_range() for hugetlb pages Content-Language: en-US To: Alexandre Ghiti 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 References: <20230911131224.61924-1-alexghiti@rivosinc.com> <20230911131224.61924-3-alexghiti@rivosinc.com> From: Samuel Holland In-Reply-To: <20230911131224.61924-3-alexghiti@rivosinc.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: E46BA160028 X-Stat-Signature: 9r6mgrdm1j4txwf3tpt33q9ktjq97ssk X-HE-Tag: 1696874026-114089 X-HE-Meta: U2FsdGVkX19UiNxNzOTwKyMGyXp8ofNtEfQXby/9tG5z9/1WtYcQxx7X4ETKO4kUqYJQUOJOSto0vcss7zRtstUcl4ofjuD0pwzEWmKeGky6cJaD95QZ22NBXUvKXnY32SeMpjwSdg3FKG59YYqOiIsMqmC3rj1ZUg8FhhNiyMGNxGt9v0AWII1FeyaK671iYxJUk34peYR9NM+EtvrcdRLz2hcqTbiwV49F+ZBMOiFWTzR+oOIMBBR6jHtHLJJappKTEZB8jMkp8wNKaXKNj2gD/FKBnD3oYwTGk6euHOR6HVLL5r+FNSIp691Y4rUs/fFFhCts4xYsmp0nKMF2drz9LRsKWmmnrX5jIkAQsSDh0cRwdHGCChyU63MZaxXI7S4x1LU2NvPsIXY0zx1O468TB3o9kEbqWEjoopg6/UE/3i5jbSDvJkxDFcJGFyhKqOzbgUntEENmzvi/frzDqMIMOIwYkK/T6m8GJG4BweoNCnqlDTZeikLx4gqWqZkTnO7k24Sro3/D1azkHBee9wFwNUakRaGxhoY2RLTT9D6LauNeZlt3GPksXxwQuK8LWLCwNsszmTuhQBqlkauHkIxeQx4dDI6F0UvSuNMSKGNb5nTHZfK6cQkpbzvsndr1DfLQGV4jfJy2mQgrLBwwPlipRYh/juOtnsQV+t7I828vU+UfcCazq0/y61CXXZ8XIJMZLrs2l3TB1Q5mJwFzkNITfHr/bigV/Td39HWvHQYkJgbVg+h/SMssxeo2cIz6AqIot8NlV8znuXN043WKkVg12I//frDTLyC/6QakDMOg42SECuHS7NUXhmyLinVuhMIZrqoIUQeQTb5veMlVpBNeGIDu5ykzUgahMZrb43XmE/Cmin5u1Rleng7oYA1p7/vBXF/j8jzPVVf351unweR7XQOoTgjFTfAmaEyshggDNDs9nqsM1GPwiGxZ7DhKwlKDxVaKvQsaIjV15Kk fIjt67qJ E/TEU3zT3Wp8OYtieICjoFzPJVsH/4fqgE+0f3Rr8EvDJl6uCVzxkFxSc4uQ2GVWpF/gDK4Vi1sUV5dv3ECylgBp/pNg0yCqx4JR0dWgT4cPn6KoUhjfV6pFP4I7TJbonz/AeAsrKuJUbtTI92nLZNo+a2TmsSwKMsNCfp1L73MlEPdUB6OWH6BrJwxCCpZq6skh4K5yIqmS2/Tk1yDC2qLZ/Mof2IJbb9BczeOuSYMO7LbZJBsEVY1jvXuVVLsWaieG4hQOoz++W/eyJP/vhRxqDKTr3QxFEal6d3mZsALEFK9BVFF3+i0/6IQFDGS03TykBiIlYlJKHqll+6t0LrihmhsQLkrZdoOpsQf+JbgUt4RGWgIJ/rrZyNoYrpqsaX2eufgDm74OszSy/mw28s4Mliw7HiwtY08viv4ZFXyQmhMQtckucpsNZci7XMG7VAbN8UiQ5ETy3fhk9zVG002nl1ZHm7dFPyDibLQx3D7ouVwpJgpCtIgT6SZr2jGJI+PdmNJdwDTxLy44zrwLQefh5WsaKmb0L1+OrX9l5eUEOCuNbYlgD0XriJnFERvEyFXuLjoJumGPUr09Xzs+zlJO+dLaIXoMjqz7pdPSeG5nomFPjCQ4lJGWEZasxDGX8X/XM 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: 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 form, > when a hugetlb mapping needs to be flushed, flush_tlb_range() flushes the > 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 region, > all PTEs that constitute this mapping must be invalidated, so the stride > 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, unsigned 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 = 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 NAPOT > + * 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) check, since we have to perform that check anyway. > + unsigned long order, napot_size; > + > + for_each_napot_order(order) { > + napot_size = napot_cont_size(order); > + > + if (stride_size != napot_size) > + continue; > + > + if (napot_size >= 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. Regards, Samuel > + stride_size = PGDIR_SIZE; > + else if (napot_size >= P4D_SIZE) > + stride_size = P4D_SIZE; > + else if (napot_size >= PUD_SIZE) > + stride_size = PUD_SIZE; > + else if (napot_size >= PMD_SIZE) > + stride_size = PMD_SIZE; > + else > + stride_size = 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 start,