From patchwork Mon Apr 7 23:42:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nhat Pham X-Patchwork-Id: 14041997 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8B07EC369A1 for ; Mon, 7 Apr 2025 23:42:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 523276B000D; Mon, 7 Apr 2025 19:42:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4CCCA6B0010; Mon, 7 Apr 2025 19:42:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 31FA96B0012; Mon, 7 Apr 2025 19:42:29 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 155B26B000D for ; Mon, 7 Apr 2025 19:42:29 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 23AD88129A for ; Mon, 7 Apr 2025 23:42:30 +0000 (UTC) X-FDA: 83308874460.14.9AA5EC0 Received: from mail-yb1-f176.google.com (mail-yb1-f176.google.com [209.85.219.176]) by imf25.hostedemail.com (Postfix) with ESMTP id 62B94A0005 for ; Mon, 7 Apr 2025 23:42:28 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=bUBmkcAm; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf25.hostedemail.com: domain of nphamcs@gmail.com designates 209.85.219.176 as permitted sender) smtp.mailfrom=nphamcs@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744069348; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=daAcY/nDP4YSMa9CHOT/fNiMPU/yMDIagIbMON6vw+o=; b=EeecvJmMGwFMo1dqiodJkKKf7KYXsAmX7vPRF65nlUw3AmnXRkSjeRxZnYasd3F872hxdO aZ+wwhBiW83O1hwdHh5oLpAxS+vShqfahrJO2GkCi7Kqc+9y79TTVjfHXK8IlSMvIsPLJi /TAUxK6TV0vuz7grF7jyx9J0+LRttnY= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=bUBmkcAm; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf25.hostedemail.com: domain of nphamcs@gmail.com designates 209.85.219.176 as permitted sender) smtp.mailfrom=nphamcs@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744069348; a=rsa-sha256; cv=none; b=FPBqhz6fglg3wh0FRmtDLYU4Yy0p3OdTMzVM1YWOuHVLRuU2U1XNk4oMkLU0jrWi01F+2Z bTx9fRoUMLjFSpa3vQNQzhF7lLLn1FCNtXHY+NjCGEaGASuXaC/txQYL9VIS9asy6LCEEX dtoawR5zLhET8xNBz+ME5q8ftjmAqNE= Received: by mail-yb1-f176.google.com with SMTP id 3f1490d57ef6-e589c258663so4476442276.1 for ; Mon, 07 Apr 2025 16:42:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744069347; x=1744674147; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=daAcY/nDP4YSMa9CHOT/fNiMPU/yMDIagIbMON6vw+o=; b=bUBmkcAm25JaCiV+ourPeonUGtvcEIdI74JQ+RV8TqOQoNZ1gBWV2UmDH8q1ZwtdDJ Ce/zakGkWko62TGdN/CjwMc07fVrb/0jzHEr+4AV1Dlz4YGio+dAOxUe045tBjoyL6uD JImEsFQIBP0/VQzcTWFNlz/DTWAfyjItW6h6i080IwOeRCmZZXFunJLBbmnn3kF2SE8h GjvLOt8KE8v9cPt3QPMlRz8f5vu7OuRGaqkyp+nRBMb6z4xcsvR9BPpp/FLuMxs/4Cjc 4WNRLMx/RAZNZIXQDloLgVuhuuclRki6sXyuQrA7fzRP75yi0w1lHi72NQ42dYUwyu0u //gQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744069347; x=1744674147; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=daAcY/nDP4YSMa9CHOT/fNiMPU/yMDIagIbMON6vw+o=; b=eLL+2/fLk3/djQZnbMDZuWqnHMYAjI4uplzfmiO6ugbcqjguIUsVE2HThZL/bkqxMa x/sfbOTtntA/SAa8kEOInBLTcyPsAfVoPyjbwrEnUj37DVSdROFb5fEusjXJQQMLRHog Nmw7gCIJKRo7aqWR4Z0INSEj8j98toFG0jKdYgEiFlkgkQRypdbrWFzsRoQpZW/dJDM6 ThmPxesvu5vFPYEMFsyc1GU/o6xnl27DO0r07ZmoAv6cbndIJ1t3y1DrwWdf4Rp4iiut ALE3Nle14QL2kfEdQdNtyfeei3IgbSJTTnLDsFTYN/3AZbNZ+AQkYnaKvqZxdTj+Gpe8 C4UQ== X-Gm-Message-State: AOJu0YzecA5bwtir+GxGgjTNMJ9kvh0Y9c7DaeEJlhIOrudBjvhCpiwK gm/Zm4R/8RIy2xnzjW2qnLaVihV8lBCho+g2J+WY3eRGur5wxOGqSeOx7Q== X-Gm-Gg: ASbGncvnqNQyspv2f5NzUaJChuIz4IBmZKRk9xbVNDSVl2PJl69pdF+0HTqSwk9HNMu FIRsG6aub9FkBfONk18YuKkeRz4iYHpy9WMHG3nBq3B9BDDkfHS//tQ26gqeRqnHsM+Sz+JnC2H vUacKzO5V6uP5WTUTkGfthvlDfO5+Q6BZiXGUEfdy5yTCQmVijM165j3s4f0gxVSJ0pj88AQWDm bTZILMWYkw2o1h10+JzeQrbCPWKMI98aWD1JosVVAyE1RJHmxnZlervEpk/wWPRjd5fD4idwlNI 9+V+dA/hV8fS41FKRcxThqLZE3Q3JwKS3BPd3H8DaR2F4jo= X-Google-Smtp-Source: AGHT+IF3rCoCu+zrKEAp6pEjJvySTUvUifOvBdVUrbAK8xBJTGqXTP96YZ/RQIeo8ja2gEbN09711w== X-Received: by 2002:a05:6902:218a:b0:e6b:7a48:b851 with SMTP id 3f1490d57ef6-e6e1fa739f0mr20093696276.36.1744069347267; Mon, 07 Apr 2025 16:42:27 -0700 (PDT) Received: from localhost ([2a03:2880:25ff:73::]) by smtp.gmail.com with ESMTPSA id 3f1490d57ef6-e6e0c8b7c89sm2505675276.8.2025.04.07.16.42.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 16:42:27 -0700 (PDT) From: Nhat Pham To: linux-mm@kvack.org Cc: akpm@linux-foundation.org, hannes@cmpxchg.org, hughd@google.com, yosry.ahmed@linux.dev, mhocko@kernel.org, roman.gushchin@linux.dev, shakeel.butt@linux.dev, muchun.song@linux.dev, len.brown@intel.com, chengming.zhou@linux.dev, kasong@tencent.com, chrisl@kernel.org, huang.ying.caritas@gmail.com, ryan.roberts@arm.com, viro@zeniv.linux.org.uk, baohua@kernel.org, osalvador@suse.de, lorenzo.stoakes@oracle.com, christophe.leroy@csgroup.eu, pavel@kernel.org, kernel-team@meta.com, linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-pm@vger.kernel.org Subject: [RFC PATCH 05/14] zswap: unify zswap tree for virtualized swap Date: Mon, 7 Apr 2025 16:42:06 -0700 Message-ID: <20250407234223.1059191-6-nphamcs@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250407234223.1059191-1-nphamcs@gmail.com> References: <20250407234223.1059191-1-nphamcs@gmail.com> MIME-Version: 1.0 X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 62B94A0005 X-Stat-Signature: zsd839qwhaqtbbicyet5d178jkjdz8d3 X-Rspam-User: X-HE-Tag: 1744069348-980743 X-HE-Meta: U2FsdGVkX1+HaDGzcWaW573aQS4mLLxGuHSlZ1pg69qwQppXhNMYeZqMEQGG5UCMejEJLZ13X0LxLwo/sGe6E9jT1CTV+d8JvXS9njZsfVg8HO57FD79xHNioRsWmVZPakBMOKP6Hr/cIwP8ZOlGvbCBuuRbDBitwl5iirKzFkTCoTAEmZdcK2gpe77oJItQEzb0zdGksJ3FpmPdlmMKKHjYI603gqvWA3+qV6mxVXQfyzU32wvkuYLUwL0axVqe34AEyWVcMhWTLdB166KlofwGXCwdToThvcw/a4xW7X2hPsiPY1/gS5WnBFpyCGk173xbrdc9WODYFcbe1MAQtzItqx8GnlU+MngLafmPKGImh+QOJVidHliFhK89X0mxlReMIQeRWtTNkGfQ8qEgnwJ6AQrOvUGzlTLuAyNIQBKSqfTVvZ+9ziFi4Jl1cyE1UADj9kZqUUkZFUtwgDfhFYI25TpoGftzU2MKqoo+vlw5i+capfD1sFtrlTbZarzj7fqMBJT1L8omJGIM75407Lm5d9kWzSJbV6Sbx25vnSe2n0Kw0wuMpp9WDSXSWYSLVYJAupc6XKvR1eVRxypiO5P7QliYz/lII8Pr+NlErmQteMO33zlBiIVW363MunpFF44mk3Qurznz5CmNYFwvjHUrV0cnHVtCtdC6Fz6M2915UZ3T995OoeAJMu6RMYAEQHsxQAVAOyPrPpcMpKB9ZhwsgfJuXTbSLkCsltFknN75ZIf0PCYqbn6FXWdOaYAKuwonYme3tWy3hLSc7KbEMF+DvXGb4pLzXwqRnf2j0ATKFoReWf/WBLzZURBtoRpJDy6qWytw+/EWBRa5t9YPnADl2Azf/0RDJ7pPyiCe0ZTcDlfMs4FSQwy+eTAcx7cC04NEujfoydMGasNbJqxqI1r8+so5bWV/eTkKF31SbK5m5jEZUe9KyJAhnFceLLnhIaodhZmb+fKIp+Tn7ZA +zoRCYNM TkqOw0nlzffOGX/X1/uMBwG1j5oTLFCKKNjH9GCp9FICnpUbKxQ0jrDeWAble0rkiO0mtf5BlEOEkBrjguEDh2RkSCRHiCHfg4rcPn2zk+wXYlJAxlrEHY/WA71N3HGgNVZ4ZjuIYyE7cnpCsha8yyGEdO/QNtQn+gHpGHAbPqSbcqDmQ86ChMZXITgtwpIahx9f1GxXKpoaL/oCJRHpMBJWWBm1gKB9xmEiyLvWOHpB4AufWk2acSGPBdgbcgH2uAYwscP4l+t4qhSG6O33TpsZP9hLZZqPF67I3dTOVmsu/uO2g6GXxDoVHxde4p4Mq/o28SdfISMBKh6WDaYfxMH6krMQXN2ZmQBAx2FK1StUAbIgPavRkdvFiwUo85R2mWezAYjTXw7Z1fr4Qw0dibkaoT/X3N3TtuiGb2PIwkGy8Nx0rXUoLLXUk53paRN9W19h1zRhuELEGxbmA9zbbukUaxntMGjsJ7Ogl446f6FSWclZbB7mXah1aKePQWPH2vCU2EzJ/BQwXrNY40ieA+bJqAB4/lPaGClh4lB9yy0qXMag= 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: List-Subscribe: List-Unsubscribe: Similar to swap cache, the zswap tree code, specifically the range partition logic, can no longer easily be reused for the new virtual swap space design. Use a simple unified zswap tree in the new implementation for now. As in the case of swap cache, range partitioning is planned as a follow up work. Signed-off-by: Nhat Pham --- mm/zswap.c | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/mm/zswap.c b/mm/zswap.c index 23365e76a3ce..c1327569ce80 100644 --- a/mm/zswap.c +++ b/mm/zswap.c @@ -203,8 +203,6 @@ struct zswap_entry { struct list_head lru; }; -static struct xarray *zswap_trees[MAX_SWAPFILES]; -static unsigned int nr_zswap_trees[MAX_SWAPFILES]; /* RCU-protected iteration */ static LIST_HEAD(zswap_pools); @@ -231,12 +229,28 @@ static bool zswap_has_pool; * helpers and fwd declarations **********************************/ +#ifdef CONFIG_VIRTUAL_SWAP +static DEFINE_XARRAY(zswap_tree); + +static inline struct xarray *swap_zswap_tree(swp_entry_t swp) +{ + return &zswap_tree; +} + +#define zswap_tree_index(entry) entry.val +#else +static struct xarray *zswap_trees[MAX_SWAPFILES]; +static unsigned int nr_zswap_trees[MAX_SWAPFILES]; + static inline struct xarray *swap_zswap_tree(swp_entry_t swp) { return &zswap_trees[swp_type(swp)][swp_offset(swp) >> SWAP_ADDRESS_SPACE_SHIFT]; } +#define zswap_tree_index(entry) swp_offset(entry) +#endif + #define zswap_pool_debug(msg, p) \ pr_debug("%s pool %s/%s\n", msg, (p)->tfm_name, \ zpool_get_type((p)->zpool)) @@ -1047,7 +1061,7 @@ static int zswap_writeback_entry(struct zswap_entry *entry, swp_entry_t swpentry) { struct xarray *tree; - pgoff_t offset = swp_offset(swpentry); + pgoff_t offset = zswap_tree_index(swpentry); struct folio *folio; struct mempolicy *mpol; bool folio_was_allocated; @@ -1463,7 +1477,7 @@ static bool zswap_store_page(struct page *page, goto compress_failed; old = xa_store(swap_zswap_tree(page_swpentry), - swp_offset(page_swpentry), + zswap_tree_index(page_swpentry), entry, GFP_KERNEL); if (xa_is_err(old)) { int err = xa_err(old); @@ -1612,7 +1626,7 @@ bool zswap_store(struct folio *folio) bool zswap_load(struct folio *folio) { swp_entry_t swp = folio->swap; - pgoff_t offset = swp_offset(swp); + pgoff_t offset = zswap_tree_index(swp); bool swapcache = folio_test_swapcache(folio); struct xarray *tree = swap_zswap_tree(swp); struct zswap_entry *entry; @@ -1670,7 +1684,7 @@ bool zswap_load(struct folio *folio) void zswap_invalidate(swp_entry_t swp) { - pgoff_t offset = swp_offset(swp); + pgoff_t offset = zswap_tree_index(swp); struct xarray *tree = swap_zswap_tree(swp); struct zswap_entry *entry; @@ -1682,6 +1696,16 @@ void zswap_invalidate(swp_entry_t swp) zswap_entry_free(entry); } +#ifdef CONFIG_VIRTUAL_SWAP +int zswap_swapon(int type, unsigned long nr_pages) +{ + return 0; +} + +void zswap_swapoff(int type) +{ +} +#else int zswap_swapon(int type, unsigned long nr_pages) { struct xarray *trees, *tree; @@ -1718,6 +1742,8 @@ void zswap_swapoff(int type) nr_zswap_trees[type] = 0; zswap_trees[type] = NULL; } +#endif /* CONFIG_VIRTUAL_SWAP */ + /********************************* * debugfs functions