From patchwork Thu Jul 12 23:36:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Huang, Ying" X-Patchwork-Id: 10522409 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 50D036032C for ; Thu, 12 Jul 2018 23:37:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3B7C7298A6 for ; Thu, 12 Jul 2018 23:37:08 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2D9DF298E7; Thu, 12 Jul 2018 23:37:08 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00, MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7C34927D16 for ; Thu, 12 Jul 2018 23:37:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A7EC36B000E; Thu, 12 Jul 2018 19:37:06 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id A051C6B0266; Thu, 12 Jul 2018 19:37:06 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8A69B6B0010; Thu, 12 Jul 2018 19:37:06 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pf0-f197.google.com (mail-pf0-f197.google.com [209.85.192.197]) by kanga.kvack.org (Postfix) with ESMTP id 447E36B000D for ; Thu, 12 Jul 2018 19:37:06 -0400 (EDT) Received: by mail-pf0-f197.google.com with SMTP id j25-v6so19474542pfi.20 for ; Thu, 12 Jul 2018 16:37:06 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references; bh=cciTW+Dk99j9npea5+FnO+F2G8RFcwUr2CUCmHXUDh4=; b=dbhAHXIDKurKBlLo6ACP31K56Aljte1Z2zKGHpmFHBHPx+W/ZYWjkjdcXqVQi2MJba 0IEv4KrejTAFkDxJ3vqT0mnnm4rHn7aPtVQaTNVjp252RICyrG20YKh6YNhkT4/mKTj7 0rzVR79H1h8BZpx693cJMUVpwFJdwIZx+aeWXz2PRcWPAgDQUPryHoprGN9zFM6UWWha UbslS86cKr/DK5QeVf1qHqfFePyABs/ktAL5mmLDVIos049gp5gPjvoHxy9tphqHHMvX hEYRynoLvWU7xiTW5IwMma+hfJ+ZnvOJzJX1H26w2LaEj9Fnw0iT+v0aLl98IpsypJfF 36jA== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of ying.huang@intel.com designates 192.55.52.151 as permitted sender) smtp.mailfrom=ying.huang@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Gm-Message-State: AOUpUlHRti34dJjk+pywZBg7cF3v+CQG7NkXfsDgkhjei5dh9Yl5PlwX p08bnx6SoNmJUV3BraySDjEtlUSnT+r3dmk5lhKHTBrma/VsHvZW3a/XA3hMkIF/Q+ekzWqX/1v MCENTuqkLHkfyUU/aVRnriUKClhYU9epdWOdt2eg6+p+peqonL5BwvdR8iYJ2xyI6iQ== X-Received: by 2002:a63:1a20:: with SMTP id a32-v6mr3876810pga.446.1531438625939; Thu, 12 Jul 2018 16:37:05 -0700 (PDT) X-Google-Smtp-Source: AAOMgpcSAvlEiVaUa2Ps2UuZrSd4bNJ8KHApMSCK7qBdl6yQJEvB0ioPtAZUg8mtvFjef1H4q+zz X-Received: by 2002:a63:1a20:: with SMTP id a32-v6mr3876786pga.446.1531438625148; Thu, 12 Jul 2018 16:37:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531438625; cv=none; d=google.com; s=arc-20160816; b=XOIRA8XVOSatP/Vr7Ck9XEQnbmOwALRXeOCP1XoELm4zAoQ2DF1W+Jura0glIgrGIt hPfx6CCNUC1MYvzplcl4WYPspOxyzZfNIBXifwZkBlUYYUbyANIhZ9pikg2S0ZN/altD JwIUgqfNxP18zF2PzsuhODiHMMxwvI3jTJJPChJEK/QeQc1tkIpbuLsAdWiEqHh3TnTl H23L1/u3vWC6e48W+wfAV7WEgiS1eP9pu/VitJ6nZeTubN7Rruprfqh3oBYPh8kqb5C0 dL+Ch/0hC3uaxVWY0MkoS5hXQs5AXHABfTOTFxvR/hZGHePY6rPBs1oiZfAiD0wyNW2W e1Mg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=cciTW+Dk99j9npea5+FnO+F2G8RFcwUr2CUCmHXUDh4=; b=AEELOq7rQzWF7jX6WgwdUqhIUfukar6umRDIiVvAGXYxksyL2qsQMQ4ZFMAE/GbjJZ zsuH5t8EI8IOJh88uxz+UXBaZ1XF0U1QvMH0dYA4If6wgH0a1YVv5Jvd9FfTOTtzfajv G6cc2eghSwGxQPHb23veeinLGt730BpNVdBnVMeMamVs/JQ8JzR2YUxWswUcAc5Qc5/0 IijvyyeerLtLxgcUKbYB97D8AUD9TrCCXCswOg6p+HMUPnNKlFKgBLC93Bga+QIh/ru+ wsntEwkDljdX0byPED335A6wFX2tpX40biNWscDO4UJ+vN1wdFu1/2YlLiXsd8Ni75Nw tcgw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ying.huang@intel.com designates 192.55.52.151 as permitted sender) smtp.mailfrom=ying.huang@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from mga17.intel.com (mga17.intel.com. [192.55.52.151]) by mx.google.com with ESMTPS id o184-v6si21060983pga.520.2018.07.12.16.37.04 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 12 Jul 2018 16:37:05 -0700 (PDT) Received-SPF: pass (google.com: domain of ying.huang@intel.com designates 192.55.52.151 as permitted sender) client-ip=192.55.52.151; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ying.huang@intel.com designates 192.55.52.151 as permitted sender) smtp.mailfrom=ying.huang@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 12 Jul 2018 16:37:04 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,345,1526367600"; d="scan'208";a="57272242" Received: from yongjuns-mobl2.ccr.corp.intel.com (HELO yhuang6-ux31a.ccr.corp.intel.com) ([10.254.213.67]) by orsmga006.jf.intel.com with ESMTP; 12 Jul 2018 16:36:47 -0700 From: "Huang, Ying" To: Andrew Morton Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Huang Ying , Michal Hocko , Johannes Weiner , Shaohua Li , Hugh Dickins , Minchan Kim , Rik van Riel , Daniel Jordan , Dan Williams , Dave Hansen Subject: [PATCH 2/6] mm/swapfile.c: Replace some #ifdef with IS_ENABLED() Date: Fri, 13 Jul 2018 07:36:32 +0800 Message-Id: <20180712233636.20629-3-ying.huang@intel.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180712233636.20629-1-ying.huang@intel.com> References: <20180712233636.20629-1-ying.huang@intel.com> 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: X-Virus-Scanned: ClamAV using ClamSMTP From: Huang Ying In mm/swapfile.c, THP (Transparent Huge Page) swap specific code is enclosed by #ifdef CONFIG_THP_SWAP/#endif to avoid code dilating when THP isn't enabled. But #ifdef/#endif in .c file hurt the code readability, so Dave suggested to use IS_ENABLED(CONFIG_THP_SWAP) instead and let compiler to do the dirty job for us. This has potential to remove some duplicated code too. From output of `size`, text data bss dec hex filename THP=y: 26269 2076 340 28685 700d mm/swapfile.o ifdef/endif: 24115 2028 340 26483 6773 mm/swapfile.o IS_ENABLED: 24179 2028 340 26547 67b3 mm/swapfile.o IS_ENABLED() based solution works quite well, almost as good as that of #ifdef/#endif. And from the diffstat, the removed lines are more than added lines. One #ifdef for split_swap_cluster() is kept. Because it is a public function with a stub implementation for CONFIG_THP_SWAP=n in swap.h. Signed-off-by: "Huang, Ying" Suggested-by: Dave Hansen Cc: Michal Hocko Cc: Johannes Weiner Cc: Shaohua Li Cc: Hugh Dickins Cc: Minchan Kim Cc: Rik van Riel Cc: Daniel Jordan Cc: Dan Williams --- mm/swapfile.c | 56 ++++++++++++++++---------------------------------------- 1 file changed, 16 insertions(+), 40 deletions(-) diff --git a/mm/swapfile.c b/mm/swapfile.c index e31aa601d9c0..75c84aa763a3 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -870,7 +870,6 @@ static int scan_swap_map_slots(struct swap_info_struct *si, return n_ret; } -#ifdef CONFIG_THP_SWAP static int swap_alloc_cluster(struct swap_info_struct *si, swp_entry_t *slot) { unsigned long idx; @@ -878,6 +877,11 @@ static int swap_alloc_cluster(struct swap_info_struct *si, swp_entry_t *slot) unsigned long offset, i; unsigned char *map; + if (!IS_ENABLED(CONFIG_THP_SWAP)) { + VM_WARN_ON_ONCE(1); + return 0; + } + if (cluster_list_empty(&si->free_clusters)) return 0; @@ -908,13 +912,6 @@ static void swap_free_cluster(struct swap_info_struct *si, unsigned long idx) unlock_cluster(ci); swap_range_free(si, offset, SWAPFILE_CLUSTER); } -#else -static int swap_alloc_cluster(struct swap_info_struct *si, swp_entry_t *slot) -{ - VM_WARN_ON_ONCE(1); - return 0; -} -#endif /* CONFIG_THP_SWAP */ static unsigned long scan_swap_map(struct swap_info_struct *si, unsigned char usage) @@ -1260,7 +1257,6 @@ static void swapcache_free(swp_entry_t entry) } } -#ifdef CONFIG_THP_SWAP static void swapcache_free_cluster(swp_entry_t entry) { unsigned long offset = swp_offset(entry); @@ -1271,6 +1267,9 @@ static void swapcache_free_cluster(swp_entry_t entry) unsigned int i, free_entries = 0; unsigned char val; + if (!IS_ENABLED(CONFIG_THP_SWAP)) + return; + si = _swap_info_get(entry); if (!si) return; @@ -1306,6 +1305,7 @@ static void swapcache_free_cluster(swp_entry_t entry) } } +#ifdef CONFIG_THP_SWAP int split_swap_cluster(swp_entry_t entry) { struct swap_info_struct *si; @@ -1320,11 +1320,7 @@ int split_swap_cluster(swp_entry_t entry) unlock_cluster(ci); return 0; } -#else -static inline void swapcache_free_cluster(swp_entry_t entry) -{ -} -#endif /* CONFIG_THP_SWAP */ +#endif void put_swap_page(struct page *page, swp_entry_t entry) { @@ -1483,7 +1479,6 @@ int swp_swapcount(swp_entry_t entry) return count; } -#ifdef CONFIG_THP_SWAP static bool swap_page_trans_huge_swapped(struct swap_info_struct *si, swp_entry_t entry) { @@ -1494,6 +1489,9 @@ static bool swap_page_trans_huge_swapped(struct swap_info_struct *si, int i; bool ret = false; + if (!IS_ENABLED(CONFIG_THP_SWAP)) + return swap_swapcount(si, entry) != 0; + ci = lock_cluster_or_swap_info(si, offset); if (!ci || !cluster_is_huge(ci)) { if (map[roffset] != SWAP_HAS_CACHE) @@ -1516,7 +1514,7 @@ static bool page_swapped(struct page *page) swp_entry_t entry; struct swap_info_struct *si; - if (likely(!PageTransCompound(page))) + if (!IS_ENABLED(CONFIG_THP_SWAP) || likely(!PageTransCompound(page))) return page_swapcount(page) != 0; page = compound_head(page); @@ -1540,10 +1538,8 @@ static int page_trans_huge_map_swapcount(struct page *page, int *total_mapcount, /* hugetlbfs shouldn't call it */ VM_BUG_ON_PAGE(PageHuge(page), page); - if (likely(!PageTransCompound(page))) { - mapcount = atomic_read(&page->_mapcount) + 1; - if (total_mapcount) - *total_mapcount = mapcount; + if (!IS_ENABLED(CONFIG_THP_SWAP) || likely(!PageTransCompound(page))) { + mapcount = page_trans_huge_mapcount(page, total_mapcount); if (PageSwapCache(page)) swapcount = page_swapcount(page); if (total_swapcount) @@ -1590,26 +1586,6 @@ static int page_trans_huge_map_swapcount(struct page *page, int *total_mapcount, return map_swapcount; } -#else -#define swap_page_trans_huge_swapped(si, entry) swap_swapcount(si, entry) -#define page_swapped(page) (page_swapcount(page) != 0) - -static int page_trans_huge_map_swapcount(struct page *page, int *total_mapcount, - int *total_swapcount) -{ - int mapcount, swapcount = 0; - - /* hugetlbfs shouldn't call it */ - VM_BUG_ON_PAGE(PageHuge(page), page); - - mapcount = page_trans_huge_mapcount(page, total_mapcount); - if (PageSwapCache(page)) - swapcount = page_swapcount(page); - if (total_swapcount) - *total_swapcount = swapcount; - return mapcount + swapcount; -} -#endif /* * We can write to an anon page without COW if there are no other references