From patchwork Fri Jul 20 07:18:39 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Huang, Ying" X-Patchwork-Id: 10536035 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 1E046602CA for ; Fri, 20 Jul 2018 07:20:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 07DC22986A for ; Fri, 20 Jul 2018 07:20:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EF9F629874; Fri, 20 Jul 2018 07:20:00 +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 2B14C2986A for ; Fri, 20 Jul 2018 07:20:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 11EEB6B0006; Fri, 20 Jul 2018 03:19:59 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 0DFE86B000A; Fri, 20 Jul 2018 03:19:59 -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 EE93E6B0007; Fri, 20 Jul 2018 03:19:58 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by kanga.kvack.org (Postfix) with ESMTP id AF6C86B0003 for ; Fri, 20 Jul 2018 03:19:58 -0400 (EDT) Received: by mail-pg1-f197.google.com with SMTP id m25-v6so5337567pgv.22 for ; Fri, 20 Jul 2018 00:19:58 -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=SYjERL4+0GYCG9uD+FHSDE8vmSPEwgNgwbl65FhBiCc=; b=nTmC9982+170DIShQeVBk8nC8lOJDplhgifaD5JxIoRNQLbN4aVKZX7sY8gQmPNUmE ufR3vzbdtVvr2FtjSIcA3IIfXamv6R9B0FSfkotr16WBQM88BzRlGaAIKeM5E0o0FgXA z+f5juudSqGhpLk+q0M9iwC7Yl+SLyl5T+EBQTE+6aubAHxppgcXI2mKPF1Sbt82Ry+9 aH1DDbuD189Zjq339oD3jGwSppupRTnoj9vg802YRjNN92thrtBcuWAYdk/uriySGq1Y /D4uf2wTV4AQJdY7yOaWXkm01myhIQg2o5rcwBU4Us4yML7hMc//5MZjhN7xedsGeEGx oBDQ== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of ying.huang@intel.com designates 134.134.136.65 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: AOUpUlGC5d7YDMH+046jUni554O2UvJWVHcKyOZ8sV0tL6HAN5HtWNQB eqZdbc1EcO1JUl31jCq+J8TUrtU9Fng0THvNpd5xSZfN36BN28WUiC3kbuq9KW8NGLFF86VUUbW 3GE69ckQvyB5+WpM2OQAuVNVkVg6YMNeu+C7z6t+EQtgSYrkG7w51uSbwmXE6loshxg== X-Received: by 2002:a63:7f16:: with SMTP id a22-v6mr931691pgd.255.1532071198384; Fri, 20 Jul 2018 00:19:58 -0700 (PDT) X-Google-Smtp-Source: AAOMgpc9h8cbYhqNbmqVx9jY++isxhpwsanlvW+2eVKoqDX4pL0lseZJXVnJtryoUjN0XZszHvlV X-Received: by 2002:a63:7f16:: with SMTP id a22-v6mr931629pgd.255.1532071196716; Fri, 20 Jul 2018 00:19:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1532071196; cv=none; d=google.com; s=arc-20160816; b=JDvsxFZb3IoJz9Yf384nljVxPAA48bVKteAAvhIz03CQwn2rX0XHAJeG0SOhqNL/NO UTfn7QSEN+07HzxdDWxRs5atJV+AdUpbddUWLcbfciN8tTNXPCgspj7FRDgy6zG6N2z3 H24VrVWV8qbtWtEtlH1YjtTXtnvdHjw598MY5t+d0lyMcKtQI+ASaZeqnIJZmX7Yo3iW j9v+PMhHEbViE+A2xx/CyIJXAlyvvPfHkORicMN5r9hZ+IY4SZ+ey1W2IlsjSMvUA00q vIEOpq4l6Oar6lTZbTkdOSenIDhQUasCg9T0su4REQ4dDalt8P0GucMF29fNcSpDe6qT PTqw== 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=SYjERL4+0GYCG9uD+FHSDE8vmSPEwgNgwbl65FhBiCc=; b=dAoirQu1qDDp/99Hzor8NoiiXMb1tKtbbqGWTthn7eJpEs0pas9sk1Hw6cMjWBs+XW BoJ7tWcwl0RPG1TMBB531ydBUHTaeXuIVJ0QWiLIer5im2BNmL53mztplKeXiaQ18iIr n4hEBLkbLft0f1cKUTLAd7ZZ8zPZl2YsYN/+TaV2+IAW7C+l+FJb5dmmS4sUPeSWBquW //aDOkZSjqdjv+N045JxLm0QtuqejKBygKchenTrZmI9vbRxoCH0dkudc77dVZalBz5E A7iU/vnRmNKyuu5ieOeuabL54VMXAQa+npZeSOAfcArtliYWROS7IA2OBNXPMFQ855i8 /PxA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ying.huang@intel.com designates 134.134.136.65 as permitted sender) smtp.mailfrom=ying.huang@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from mga03.intel.com (mga03.intel.com. [134.134.136.65]) by mx.google.com with ESMTPS id q90-v6si1235046pfa.272.2018.07.20.00.19.56 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 20 Jul 2018 00:19:56 -0700 (PDT) Received-SPF: pass (google.com: domain of ying.huang@intel.com designates 134.134.136.65 as permitted sender) client-ip=134.134.136.65; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ying.huang@intel.com designates 134.134.136.65 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 fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Jul 2018 00:19:55 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,377,1526367600"; d="scan'208";a="68652040" Received: from yhuang6-ux31a.sh.intel.com ([10.239.198.6]) by fmsmga002.fm.intel.com with ESMTP; 20 Jul 2018 00:18:55 -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 , Dan Williams , Dave Hansen , Daniel Jordan Subject: [PATCH v4 2/8] mm/swapfile.c: Replace some #ifdef with IS_ENABLED() Date: Fri, 20 Jul 2018 15:18:39 +0800 Message-Id: <20180720071845.17920-3-ying.huang@intel.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180720071845.17920-1-ying.huang@intel.com> References: <20180720071845.17920-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-and-acked-by: Dave Hansen Reviewed-by: Daniel Jordan Cc: Michal Hocko Cc: Johannes Weiner Cc: Shaohua Li Cc: Hugh Dickins Cc: Minchan Kim Cc: Rik van Riel Cc: Dan Williams --- mm/swapfile.c | 60 ++++++++++++++++++++--------------------------------------- 1 file changed, 20 insertions(+), 40 deletions(-) diff --git a/mm/swapfile.c b/mm/swapfile.c index d101e044efbf..7283104bfafa 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -869,7 +869,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; @@ -877,6 +876,15 @@ static int swap_alloc_cluster(struct swap_info_struct *si, swp_entry_t *slot) unsigned long offset, i; unsigned char *map; + /* + * Should not even be attempting cluster allocations when huge + * page swap is disabled. Warn and fail the allocation. + */ + if (!IS_ENABLED(CONFIG_THP_SWAP)) { + VM_WARN_ON_ONCE(1); + return 0; + } + if (cluster_list_empty(&si->free_clusters)) return 0; @@ -907,13 +915,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) @@ -1259,7 +1260,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); @@ -1270,6 +1270,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; @@ -1305,6 +1308,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; @@ -1319,11 +1323,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) { @@ -1482,7 +1482,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) { @@ -1493,6 +1492,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) @@ -1515,7 +1517,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); @@ -1539,10 +1541,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) @@ -1589,26 +1589,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