Received: by 2002:a05:6358:e9c4:b0:b2:91dc:71ab with SMTP id hc4csp6771618rwb; Wed, 10 Aug 2022 00:21:51 -0700 (PDT) X-Google-Smtp-Source: AA6agR53eAIaIDg2p4QTe1JLxSdTDuRAML3ZwAcu1oAOSfV2SEMOXAnRnCIsnryi5tKXEPIIYYRn X-Received: by 2002:a17:90a:c70d:b0:1f3:2a3a:24d4 with SMTP id o13-20020a17090ac70d00b001f32a3a24d4mr2307868pjt.16.1660116110890; Wed, 10 Aug 2022 00:21:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660116110; cv=none; d=google.com; s=arc-20160816; b=qz2aGjZC1SEozd79bt5dqpNQBwWnp+DgOQl2xf4S5zyZlv3mD4CrEBZ/gW/PpwfZrQ f4gdPVrL2qN+Syeq6ZU///WNtLCEmMmTcf0qhhSu5cOe/FiX6Xokd8bQ3QC42G8O6vDz Rcn0szTMmHmQbZGZaf2cgt2jUxhtUbgnarXCqBhC3H6h7jxN8eCnMMu0gI/JnEosvK9S 4ZA5vJjJXBPcmm1kfAq/wshsqp46QegFXDv6aAz3s0beCubXzWfDuPDdNcmbR2OBOyLF t9PSXArPUyXs/5aXoo4oodym4R4YcVeJlF4OBGh37y1ztmPKCXyo1sVdE8pcx0Nbkp5C vKTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent:message-id:in-reply-to :date:references:subject:cc:to:from:dkim-signature; bh=gjXNe1HXTF1u/my4JvYWc3XYK+vg1LhPIHm0Jh9P/6w=; b=ZoXe7QJS6GsW9apkLgu5/y4tAQ32sXzrVlgmo1y2Wo7VWRttnyxRO1M1sIG9dgDbqQ Vr+2cUf640T08O8VgUfUnMBgGSmMGQFlWz/cp2xjL4zafvqauEnSDdt883Oo4oQJfOgK DM5q3dfN6WOQD+MXdt2x/hCgfit/7Lh//efCpT71/nlelB1EXEoNu77Mrslcb21XWtFM AJbjPJ/wX4yHOs5dw/3+wfRyrsvZgDuqPWxFHg4dvCPgf2MxJ4AmC4hP+kYkG/VLsAin TZqeQJpugV1TbazG35oAPpAQg6X3BtBI/oK0uMWxnHtPA7AU3ThW1gFQ9hGkk5FHBwAH y+Kw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=UZPi+eDL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id g20-20020a056a0023d400b005256b0ab23bsi809281pfc.191.2022.08.10.00.21.37; Wed, 10 Aug 2022 00:21:50 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=UZPi+eDL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231273AbiHJGdK (ORCPT + 99 others); Wed, 10 Aug 2022 02:33:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37374 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229611AbiHJGdJ (ORCPT ); Wed, 10 Aug 2022 02:33:09 -0400 Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6B3326E2CF for ; Tue, 9 Aug 2022 23:33:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1660113188; x=1691649188; h=from:to:cc:subject:references:date:in-reply-to: message-id:mime-version; bh=QIhNWhaFzPd7M69D/251lZz3jAISvGoccdRGMCoXT6o=; b=UZPi+eDL2EK8hr4siEBDDeIRykc1tqGFUDOuBZbJSnVbp2pNrqeIh2lJ zQ15eluFEd4/ojjsroNOCiywyTjWtAZMzrqF67uRzzcudmApmpEQ1rmTI DLOynHnG3UXSP6ZbzHpiovjmaCCz88iNtV29I3zzxRVqITYlgQFnL060R r3Wm6BvDP+RTz2kntjqYWyqwBautdov/rpbbmOlBI9ISy7SrPUH+kkUx3 TQcjhcKJYbIue1qBPZfWhKsdJwQWp2FItACpH2bgEahEnwcWt2dhw9vw8 rBQRBZQ6GWQkuxQcJjW23kEZo8zUdVHorWDIHTE60oimKi2mtjm5OwT8j g==; X-IronPort-AV: E=McAfee;i="6400,9594,10434"; a="270785306" X-IronPort-AV: E=Sophos;i="5.93,226,1654585200"; d="scan'208";a="270785306" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Aug 2022 23:33:08 -0700 X-IronPort-AV: E=Sophos;i="5.93,226,1654585200"; d="scan'208";a="932771834" Received: from yhuang6-desk2.sh.intel.com (HELO yhuang6-desk2.ccr.corp.intel.com) ([10.238.208.55]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Aug 2022 23:33:05 -0700 From: "Huang, Ying" To: Peter Xu Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Minchan Kim , David Hildenbrand , Nadav Amit , Andrew Morton , Hugh Dickins , Vlastimil Babka , Andrea Arcangeli , Andi Kleen , "Kirill A . Shutemov" Subject: Re: [PATCH v3 6/7] mm/swap: Cache maximum swapfile size when init swap References: <20220809220100.20033-1-peterx@redhat.com> <20220809220100.20033-7-peterx@redhat.com> Date: Wed, 10 Aug 2022 14:33:02 +0800 In-Reply-To: <20220809220100.20033-7-peterx@redhat.com> (Peter Xu's message of "Tue, 9 Aug 2022 18:00:59 -0400") Message-ID: <87y1vwehgh.fsf@yhuang6-desk2.ccr.corp.intel.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=ascii X-Spam-Status: No, score=-5.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_PASS,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Peter Xu writes: > We used to have swapfile_maximum_size() fetching a maximum value of > swapfile size per-arch. > > As the caller of max_swapfile_size() grows, this patch introduce a variable > "swapfile_maximum_size" and cache the value of old max_swapfile_size(), so > that we don't need to calculate the value every time. > > Caching the value in swapfile_init() is safe because when reaching the > phase we should have initialized all the relevant information. Here the > major arch to look after is x86, which defines the max size based on L1TF > mitigation. > > Here both X86_BUG_L1TF or l1tf_mitigation should have been setup properly > when reaching swapfile_init(). As a reference, the code path looks like > this for x86: > > - start_kernel > - setup_arch > - early_cpu_init > - early_identify_cpu --> setup X86_BUG_L1TF > - parse_early_param > - l1tf_cmdline --> set l1tf_mitigation > - check_bugs > - l1tf_select_mitigation --> set l1tf_mitigation > - arch_call_rest_init > - rest_init > - kernel_init > - kernel_init_freeable > - do_basic_setup > - do_initcalls --> calls swapfile_init() (initcall level 4) > > The swapfile size only depends on swp pte format on non-x86 archs, so > caching it is safe too. > > Since at it, rename max_swapfile_size() to arch_max_swapfile_size() because > arch can define its own function, so it's more straightforward to have > "arch_" as its prefix. At the meantime, keep the swapfile_maximum_size() > function to fetch the value from the cache initialized in swapfile_init(). > > Signed-off-by: Peter Xu > --- > arch/x86/mm/init.c | 2 +- > mm/swapfile.c | 10 +++++++++- > 2 files changed, 10 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c > index 82a042c03824..9121bc1b9453 100644 > --- a/arch/x86/mm/init.c > +++ b/arch/x86/mm/init.c > @@ -1054,7 +1054,7 @@ void update_cache_mode_entry(unsigned entry, enum page_cache_mode cache) > } > > #ifdef CONFIG_SWAP > -unsigned long max_swapfile_size(void) > +unsigned long arch_max_swapfile_size(void) > { > unsigned long pages; > > diff --git a/mm/swapfile.c b/mm/swapfile.c > index 1fdccd2f1422..794fa37bd0c3 100644 > --- a/mm/swapfile.c > +++ b/mm/swapfile.c > @@ -63,6 +63,7 @@ EXPORT_SYMBOL_GPL(nr_swap_pages); > /* protected with swap_lock. reading in vm_swap_full() doesn't need lock */ > long total_swap_pages; > static int least_priority = -1; > +static unsigned long swapfile_maximum_size; > > static const char Bad_file[] = "Bad swap file entry "; > static const char Unused_file[] = "Unused swap file entry "; > @@ -2816,11 +2817,16 @@ unsigned long generic_max_swapfile_size(void) > } > > /* Can be overridden by an architecture for additional checks. */ > -__weak unsigned long max_swapfile_size(void) > +__weak unsigned long arch_max_swapfile_size(void) > { > return generic_max_swapfile_size(); > } > > +unsigned long max_swapfile_size(void) > +{ > + return swapfile_maximum_size; > +} > + It appears unnecessary to hide a variable with a function. Why not just use the variable directly. Best Regards, Huang, Ying > static unsigned long read_swap_header(struct swap_info_struct *p, > union swap_header *swap_header, > struct inode *inode) > @@ -3677,6 +3683,8 @@ static int __init swapfile_init(void) > for_each_node(nid) > plist_head_init(&swap_avail_heads[nid]); > > + swapfile_maximum_size = arch_max_swapfile_size(); > + > return 0; > } > subsys_initcall(swapfile_init);