From patchwork Tue Jul 17 00:55:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Huang, Ying" X-Patchwork-Id: 10527837 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 BFEE6600D0 for ; Tue, 17 Jul 2018 00:55:55 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B4289285A5 for ; Tue, 17 Jul 2018 00:55:55 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A7C28286B4; Tue, 17 Jul 2018 00:55:55 +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 03385285A5 for ; Tue, 17 Jul 2018 00:55:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 17BA86B026A; Mon, 16 Jul 2018 20:55:53 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 108076B026B; Mon, 16 Jul 2018 20:55:53 -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 EA0C36B026C; Mon, 16 Jul 2018 20:55:52 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pf0-f200.google.com (mail-pf0-f200.google.com [209.85.192.200]) by kanga.kvack.org (Postfix) with ESMTP id 9F60D6B026A for ; Mon, 16 Jul 2018 20:55:52 -0400 (EDT) Received: by mail-pf0-f200.google.com with SMTP id v9-v6so16131078pfn.6 for ; Mon, 16 Jul 2018 17:55:52 -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=+CU4pLb7Y1H2CpnWF4iur06vQN+cpfubg+FPxkTmXUc=; b=MRT4bzTNuLooeJHmDzm5J2Hf7wqAtAS8kTFoAklkxYANzj8Cd3aQHr6PppyPmoBVCh Go1A1EZIJ/9mDESK8DAXjN3amvZiBWm4Bd3f4AZ409A6kR1m42yAkRC9o29WNU6x5NXV e7lIfvqwMQMsTFrw5JucWtDcBsjfkRpW5IDGmo9WqH652uqtpS1xQHp8gkXCdOZlRJEm Ed7vHKLlg0hGB3+O6KYaJEKtab65mvsWIaW7gxnOMcLnUoTL4XiyaBHg1kmzGGKjmjTO Q9ZSMHkx1sX5cEOxbluBZB22fmAbUmYlGsTgzfmgQVojAe7OtfqF/eafm+u+rLjFislj SURQ== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of ying.huang@intel.com designates 134.134.136.126 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: AOUpUlE43rCjA5Lsrf7tm7wzQuZy7tPvDuSIXdEpoWTTuyXPWT/9lDMC 8FbHmCRf2vSq/F+jWftlJ1MfEtPo93J+apac0h2mndl4qZ93IJ3c6AwXPcwm5qE8B3g870p8k0n zotlea8g+nOTFKXu/xeveC5KixLh8wJ13P8RroDPIySAfdvql39m1CG+saIOkB1BBsw== X-Received: by 2002:a17:902:76c4:: with SMTP id j4-v6mr18513601plt.19.1531788952335; Mon, 16 Jul 2018 17:55:52 -0700 (PDT) X-Google-Smtp-Source: AAOMgpdlDlfdEHsVpHqE1Od3ShC0hB1Ask3wmVJ+aiKrYvUm0JMhP6nKB8MgG7HxwCsU/qE1rV4l X-Received: by 2002:a17:902:76c4:: with SMTP id j4-v6mr18513576plt.19.1531788951604; Mon, 16 Jul 2018 17:55:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531788951; cv=none; d=google.com; s=arc-20160816; b=pPpz+Dvyn6Ir43qGPWLFIMESOzOqrAgacSww8RFZ4ZQz+s2Bil1GbrbaBhJnNOUCOa 5kq+04CLtcuIffRpfIVtoGiy3lTUCSx9qpmY0conSM2e0GXFGYqN0f2dpct99PsCRwge YF1jqBfZpTm9Aq/Y8rIBe7wLht/hQJLdxyzuiSkZp3W57vwRwK0OIZAp0YdAG/ViS0ca zIFn9ywOsw2aP/fK6qTSBNKVJj0FXRNhEj6+c7BwIpZK9TPYrZKaz1f02ap2BAZtwKkb mzZMkHnW4wuXihH2OVlUGxRoNLQBt+GH3C8MXfFeghw0viAFrjXCkOiQy/MD8imespn7 GpAg== 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=+CU4pLb7Y1H2CpnWF4iur06vQN+cpfubg+FPxkTmXUc=; b=sYksyMNMToL0Qk7K3caVECCYRZl+oH6aLeM4o+oTGoAEKcl+JSMDQpKv9bPzVF93Vm SmMk9ZiHBuqfdppl7yZZRAlzib73hRlwl4T1gszWHk+uMkWfZ4rvVOQafaKQjOo/NbdF Xnyv2yF4jBpCWCmVw9xvH889zukxZ2uBpLuPAnh8pdrK9+Uii/x3ySflUyM42rcwh34Q 1tLIpPIyhIdGJoDVNv46mJkgjWFJ//LFuQsm7rv8cluPmm7SLHTI//C/P/Uo72lfxIsr eZ//MmaImOFJPh6tIE/W8Mg1G8SPsFJMyxxcusPwMQnpEhzTr05Cr5KCjP7SSmnjNJTE GogQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ying.huang@intel.com designates 134.134.136.126 as permitted sender) smtp.mailfrom=ying.huang@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from mga18.intel.com (mga18.intel.com. [134.134.136.126]) by mx.google.com with ESMTPS id bc5-v6si30619643plb.413.2018.07.16.17.55.51 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 16 Jul 2018 17:55:51 -0700 (PDT) Received-SPF: pass (google.com: domain of ying.huang@intel.com designates 134.134.136.126 as permitted sender) client-ip=134.134.136.126; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ying.huang@intel.com designates 134.134.136.126 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 fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 16 Jul 2018 17:55:51 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,363,1526367600"; d="scan'208";a="245788281" Received: from yhuang6-ux31a.sh.intel.com ([10.239.197.184]) by fmsmga005.fm.intel.com with ESMTP; 16 Jul 2018 17:55:49 -0700 From: "Huang, Ying" To: Andrew Morton Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Michal Hocko , Johannes Weiner , Shaohua Li , Hugh Dickins , Minchan Kim , Rik van Riel , Daniel Jordan , Dan Williams , Dave Hansen Subject: [PATCH v2 2/7] mm/swapfile.c: Replace some #ifdef with IS_ENABLED() Date: Tue, 17 Jul 2018 08:55:51 +0800 Message-Id: <20180717005556.29758-3-ying.huang@intel.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180717005556.29758-1-ying.huang@intel.com> References: <20180717005556.29758-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 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 0a2a9643dd78..dd9263411f11 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