Received: by 2002:a05:7412:a9a2:b0:e2:908c:2ebd with SMTP id o34csp2742101rdh; Mon, 30 Oct 2023 06:33:35 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHdZbW/ry+APxgnPXL6o68fmTq7t/Zv57kdnyzp8jPhfuEJ/tIfod2OxHxOG3WaOUC3x7Nd X-Received: by 2002:a05:6a20:e11d:b0:17e:8d04:f764 with SMTP id kr29-20020a056a20e11d00b0017e8d04f764mr10301676pzb.2.1698672814962; Mon, 30 Oct 2023 06:33:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698672814; cv=none; d=google.com; s=arc-20160816; b=qNR9KqxaHFagC2KjoRNyiB59MufslWoJuV/I9mOsCrE3pwcHQJGm6p7PjiXtdPrjk5 8MenFuUeXuQKytFy970Gn5mjthyQ3B26bD76XlXcQatSSHbUX02VBS9T4y3GNF7Wki2p ktTajjE4RQOL1z5oQY86RSMWSjhzCYLpG2qKDG1imQbxnIzHHagdWIVDH1UK2SkF5/8A O5xag255yknmaiwuHp0DBfE1F6oGPcGrTf7Rk2TaAZgektjILR7qnJKubxN8ylZDEHT6 4LVgWDxsrRCvJ8WKjRissjkG8ErsfwJJF2Yi3GLcvlECsKAGYxcHDCA4DGGXBN8S5qlf p0dg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Lg+2phEYGkxNvU/hCz5W3gC6On0lJ4QhzztTYgaxDUQ=; fh=WX+jQwzfCnBz306UgUrdIdSwyVq+Vw3KrrLdGniqxV8=; b=cwTBDEJZteDz+mCQTBnR70vVRYm+BK3zfCkozqQ13coUVB4zSIjgYKXPEeQV9Arvyc hAnQsAuZdl+TS5zZkOwLnthrQzWAeenhgCzXU+UE1+5FHl2f6KwDn1gMyULp67y+HJh9 K0HgfyzFHdXmeMYl7K2OzZXixJP2ZOeihKILguSqgsV1tqomMvERx7gbkNnc+STy7uqn 5hmHlx1Eblp9G/mg9KegvRiKn2xBKShXBefNMB+SBaGuyoxvqtp8XJlKJ5KMJYGbccav E+G7e4AYAlLXB2/H+ctQwApiX2YG5SIDIA6h3MTly3MGPP1qUF3kTyfrAjqGreXvo85h L5Sg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@rivosinc-com.20230601.gappssmtp.com header.s=20230601 header.b=uuNNzHQo; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from howler.vger.email (howler.vger.email. [2620:137:e000::3:4]) by mx.google.com with ESMTPS id bn7-20020a056a02030700b0055b640a6b3csi5188736pgb.884.2023.10.30.06.33.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Oct 2023 06:33:34 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) client-ip=2620:137:e000::3:4; Authentication-Results: mx.google.com; dkim=pass header.i=@rivosinc-com.20230601.gappssmtp.com header.s=20230601 header.b=uuNNzHQo; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id 5EEEC804BC06; Mon, 30 Oct 2023 06:33:32 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233500AbjJ3NdN (ORCPT + 99 others); Mon, 30 Oct 2023 09:33:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37798 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233491AbjJ3NdL (ORCPT ); Mon, 30 Oct 2023 09:33:11 -0400 Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 50E8ADF for ; Mon, 30 Oct 2023 06:33:06 -0700 (PDT) Received: by mail-wr1-x436.google.com with SMTP id ffacd0b85a97d-32d834ec222so2823977f8f.0 for ; Mon, 30 Oct 2023 06:33:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1698672785; x=1699277585; darn=vger.kernel.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=Lg+2phEYGkxNvU/hCz5W3gC6On0lJ4QhzztTYgaxDUQ=; b=uuNNzHQoKgD5NwI1onlSZf3WTlI0fbh7854f+ntOj37FiJusZeuUMufEMf2YvWNngS hvvffsfO3j5+FSAUwtMmQYRTF9DMVR/bLqe/HpUXj/x+aHcUysIt/LPDyD7GjWK8/JRQ lObeGoZAk8EKI143cz0ltFbApfq82618xHxj7tUZfEYSC0DgwWfB1RWIU23jg5eqt8JI nPEe9QJ7Txe1F32QrpDPtb1eyyKPOsjkGNf+K5PhMNhSc11trYjL33rRkTm8J5NetVrR j9WT7EmJ7rvvTQwq31TJsR14nmKggfLT6Z0O/rV9/VjLgihPv21jaUxs0XNGCpYQYLvC y//g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698672785; x=1699277585; 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=Lg+2phEYGkxNvU/hCz5W3gC6On0lJ4QhzztTYgaxDUQ=; b=GQRdegwKs+NBNIMDRlV8b3S0aEX39sFhWrfYDsplpKc/pXT9IA7KbOBeHLuxYRtQ+w 7m38UA4WJD18iIIpe5Otuwo4bxArdrGwof/uPkgghfuNoQ/AYMcvgxWtmGT7izkBFVI3 Ip7Z7oyGgZ2s5TkC8KmbV+I6swfNsd5QCeR60GZbYfCagnIdp46pR/rjmHhA2xjiCp90 We89X37fvyBbRILztLnMAHrZ18t+6mtjJPIm3VAXq703RFbwGucKq8jxKMGbMPVOfetJ Wae6u+hZEkRp9d3nKb40nMXkFbmFHMCd/xxfm4nvXgavFEHnZRv+EewRjlVgYeHBGyAK X0Eg== X-Gm-Message-State: AOJu0Yz+F9YGU3Fw9EgqTrdTX6ByCYuqr4q/v7SIunlFRYPTYL9TPkGa LZOp3vtNb8ijjJH16rsUFp/EFg== X-Received: by 2002:adf:d1ca:0:b0:32f:7967:aa4d with SMTP id b10-20020adfd1ca000000b0032f7967aa4dmr5491624wrd.68.1698672784653; Mon, 30 Oct 2023 06:33:04 -0700 (PDT) Received: from alex-rivos.ba.rivosinc.com (amontpellier-656-1-456-62.w92-145.abo.wanadoo.fr. [92.145.124.62]) by smtp.gmail.com with ESMTPSA id d25-20020adfa419000000b0032f79e55eb8sm6061601wra.16.2023.10.30.06.33.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Oct 2023 06:33:04 -0700 (PDT) From: Alexandre Ghiti To: 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 Cc: Alexandre Ghiti , Samuel Holland , Lad Prabhakar Subject: [PATCH v6 2/4] riscv: Improve flush_tlb_range() for hugetlb pages Date: Mon, 30 Oct 2023 14:30:26 +0100 Message-Id: <20231030133027.19542-3-alexghiti@rivosinc.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231030133027.19542-1-alexghiti@rivosinc.com> References: <20231030133027.19542-1-alexghiti@rivosinc.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Mon, 30 Oct 2023 06:33:32 -0700 (PDT) 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: Samuel Holland Tested-by: Lad Prabhakar # On RZ/Five SMARC --- arch/riscv/mm/tlbflush.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/arch/riscv/mm/tlbflush.c b/arch/riscv/mm/tlbflush.c index fa03289853d8..b6d712a82306 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,33 @@ 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; + + if (!is_vm_hugetlb_page(vma)) { + stride_size = PAGE_SIZE; + } else { + stride_size = huge_page_size(hstate_vma(vma)); + + /* + * 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()) { + if (stride_size >= PGDIR_SIZE) + stride_size = PGDIR_SIZE; + else if (stride_size >= P4D_SIZE) + stride_size = P4D_SIZE; + else if (stride_size >= PUD_SIZE) + stride_size = PUD_SIZE; + else if (stride_size >= PMD_SIZE) + stride_size = PMD_SIZE; + else + stride_size = PAGE_SIZE; + } + } + + __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, -- 2.39.2