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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 498F8C6FA8F for ; Wed, 30 Aug 2023 18:56:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344035AbjH3S4d (ORCPT ); Wed, 30 Aug 2023 14:56:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42934 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242389AbjH3IXW (ORCPT ); Wed, 30 Aug 2023 04:23:22 -0400 Received: from out-246.mta0.migadu.com (out-246.mta0.migadu.com [IPv6:2001:41d0:1004:224b::f6]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BB51EFB for ; Wed, 30 Aug 2023 01:23:17 -0700 (PDT) Message-ID: <2154ede0-aac1-c802-5470-3648113fcaff@linux.dev> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1693383795; h=from:from: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=pHraHGCa+eMYVWrdhCdj2e2/Ka04G10CflJqIQdAXTQ=; b=wlvrZHMtrVhIQI9zVAVgZG4lV11zO6hpHULr3seM45il3HviNFwgmgeKbC3nySsv/BWE1l hFASq43tTwPEPAI8JsIngOgutLio4NSIq/m+olD2nLhNGnTCUO+Mw3WRrdhCa9j9mZeeoO vBG0je/1Bi34oA0tNqGRwytUrD/sHuw= Date: Wed, 30 Aug 2023 16:23:05 +0800 MIME-Version: 1.0 Subject: Re: [PATCH 11/12] hugetlb: batch TLB flushes when freeing vmemmap To: Mike Kravetz , Joao Martins Cc: Muchun Song , Oscar Salvador , David Hildenbrand , Miaohe Lin , David Rientjes , Anshuman Khandual , Naoya Horiguchi , Barry Song , Michal Hocko , Matthew Wilcox , Xiongchun Duan , Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org References: <20230825190436.55045-1-mike.kravetz@oracle.com> <20230825190436.55045-12-mike.kravetz@oracle.com> X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Muchun Song In-Reply-To: <20230825190436.55045-12-mike.kravetz@oracle.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Migadu-Flow: FLOW_OUT Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2023/8/26 03:04, Mike Kravetz wrote: > From: Joao Martins > > Now that a list of pages is deduplicated at once, the TLB > flush can be batched for all vmemmap pages that got remapped. > > Add a flags field and pass whether it's a bulk allocation or > just a single page to decide to remap. > > The TLB flush is global as we don't have guarantees from caller > that the set of folios is contiguous, or to add complexity in > composing a list of kVAs to flush. > > Modified by Mike Kravetz to perform TLB flush on single folio if an > error is encountered. > > Signed-off-by: Joao Martins > Signed-off-by: Mike Kravetz > --- > mm/hugetlb_vmemmap.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c > index 904a64fe5669..a2fc7b03ac6b 100644 > --- a/mm/hugetlb_vmemmap.c > +++ b/mm/hugetlb_vmemmap.c > @@ -36,6 +36,7 @@ struct vmemmap_remap_walk { > unsigned long reuse_addr; > struct list_head *vmemmap_pages; > #define VMEMMAP_REMAP_ONLY_SPLIT BIT(0) > +#define VMEMMAP_REMAP_BULK_PAGES BIT(1) We could reuse the flag (as I suggest VMEMMAP_SPLIT_WITHOUT_FLUSH) proposed in the patch 10. When I saw this patch, I think the name is not suitable, maybe VMEMMAP_WITHOUT_TLB_FLUSH is better. Thanks. > unsigned long flags; > }; > > @@ -211,7 +212,8 @@ static int vmemmap_remap_range(unsigned long start, unsigned long end, > return ret; > } while (pgd++, addr = next, addr != end); > > - if (!(walk->flags & VMEMMAP_REMAP_ONLY_SPLIT)) > + if (!(walk->flags & > + (VMEMMAP_REMAP_ONLY_SPLIT | VMEMMAP_REMAP_BULK_PAGES))) > flush_tlb_kernel_range(start, end); > > return 0; > @@ -377,7 +379,7 @@ static int vmemmap_remap_free(unsigned long start, unsigned long end, > .remap_pte = vmemmap_remap_pte, > .reuse_addr = reuse, > .vmemmap_pages = &vmemmap_pages, > - .flags = 0, > + .flags = !bulk_pages ? 0 : VMEMMAP_REMAP_BULK_PAGES, > }; > int nid = page_to_nid((struct page *)start); > gfp_t gfp_mask = GFP_KERNEL | __GFP_THISNODE | __GFP_NORETRY | > @@ -427,6 +429,7 @@ static int vmemmap_remap_free(unsigned long start, unsigned long end, > .remap_pte = vmemmap_restore_pte, > .reuse_addr = reuse, > .vmemmap_pages = &vmemmap_pages, > + .flags = 0, > }; > > vmemmap_remap_range(reuse, end, &walk); > @@ -700,6 +703,8 @@ void hugetlb_vmemmap_optimize_folios(struct hstate *h, struct list_head *folio_l > list_for_each_entry(folio, folio_list, lru) > hugetlb_vmemmap_optimize_bulk(h, &folio->page, &vmemmap_pages); > > + flush_tlb_kernel_range(0, TLB_FLUSH_ALL); > + > free_vmemmap_page_list(&vmemmap_pages); > } >