From mboxrd@z Thu Jan 1 00:00:00 1970 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 48D2FC2D0CD for ; Fri, 16 May 2025 02:35:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 82CBA6B00A2; Thu, 15 May 2025 22:35:32 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7B5186B00A4; Thu, 15 May 2025 22:35:32 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6A5A66B00A5; Thu, 15 May 2025 22:35:32 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 4AF476B00A2 for ; Thu, 15 May 2025 22:35:32 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id DAD29120DD0 for ; Fri, 16 May 2025 02:35:32 +0000 (UTC) X-FDA: 83447204904.27.74660B2 Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) by imf19.hostedemail.com (Postfix) with ESMTP id DFF021A0005 for ; Fri, 16 May 2025 02:35:30 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=AIlUTO8X; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf19.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.167.50 as permitted sender) smtp.mailfrom=ryncsn@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1747362931; a=rsa-sha256; cv=none; b=zSvLVOJzLzwWD+fpPUdpOnsL86X7zpWsCfYC1VYwgrunqTCVUFNewAfCSQR0yFTvLdXd3w 7+MeA5p0k3wbWagxcCasn00tIawjt9/+5hpoeKvJSPYrXB0WF+el0YiyVxVHbx8LoRvg4f LJxXLVxsd+bZDWU5fTXdFDhDiisw+Xo= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=AIlUTO8X; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf19.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.167.50 as permitted sender) smtp.mailfrom=ryncsn@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1747362931; 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-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=97eSBRvWwlOrFi0Xp4lcOze8Tl5VcCyOGmtZ2nesnIs=; b=yiW18ILihbLIOMJwJgvsP28vNE/Jjs+yCtEj/lWLCE6vt2zxI1Zg+1wuayiJ5/u4UNViqO NLirsOddgyzFuIS99uQp/npNh3rZsViakuTF7DPT28sB2pQEp49ho7ZLG3NupFcSYBdyer RpOJddIz3/J6VLBDkq4LLsu5wOuvu6Y= Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-54e98f73850so1589150e87.1 for ; Thu, 15 May 2025 19:35:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747362929; x=1747967729; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=97eSBRvWwlOrFi0Xp4lcOze8Tl5VcCyOGmtZ2nesnIs=; b=AIlUTO8XIcNHm45MENciw8uEaFjYVxRnWCpQoTcHpSY2CLkc9CrM0jTmFnyAM1NCi6 T9YNiqI1J1g8ePe3YULVsAAV+eTR4lyhLZ6sfoOzUSptXCs3e5Jp6VWNQqCYHtpAyHwh 2kNN6JxVkrQHFhVx1z2bh57CBjoXwhmOAikhpz45ZiNDE7WTLJ0NmvFDh0CI8sWcKt72 7pmdwxzC7P/zjyOsgcNJ1fkUCqHg2OMnTtYSFADadA9i5Iqhc8k2z+QgFo1Jld0jaY6z j3Y4ZV6wOzVWyQzusZd6eR2OME7jBM5jLRQbE1HHPZn9OeSTMw4CySCOfzqqb5rWDPHr A6nA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747362929; x=1747967729; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=97eSBRvWwlOrFi0Xp4lcOze8Tl5VcCyOGmtZ2nesnIs=; b=I6hDezptUqZm0zt1/OkagjzWF7SXj0Vd7ukF3mhf9MkxTokkkcMQ8kHeSPH3XPETJg RnMxIFU9lQH3JMuuOfdeZB9bnQjNNjW0Ck8lgZREJuRZU2dYg+anbKkF+IsxSgntmhUw Y+eY/AAppOUKnmLi8Arfx6Yy+jdysfe3e488maFr0QhlsFmVMF1I371fhT1wKdZzCK9C gF7CqW4oPPqDQadeaEzEuNG76Ap6bnSifiP8hqjULQ1KkFZT7Gh9TWDLy2mGcx2MvPUl baVV32Xgtm2RoEsAD1k2SPkeFkS4xtjlPodX9IX77efLIzzC9XahKy7YBOjK8xZEUaXi ESHw== X-Gm-Message-State: AOJu0Yxzo3sGuWi7VEYPDdRlaJq9eRbbd+U2kqDaI1oHXI4ueNnmdEcB xBiQuePL40NHMDNTxqH6hP0KWv42Qd/MKGfIBTKekxqUOtnWmXdp3kB+2DmJolbgq5jG/q2U+co TFUbnS4aJa+SefG6UsqpEoYPI6sVMMm8= X-Gm-Gg: ASbGnctghbsIkDxvDUiu+nzC3vqi8e0XmI6kl7NvKwq8NHEP9UjfsjVk1FNmqE0GhHS 7VrlXNkeOBtDXaCgxtbNlWWfMHhaobPKc9y8xPyKNhWb5fq/XlaWT0vlkMjk/UhxCH7Cybt89ZQ qHeKrEUNKzpX++1P/cd3SrxO7ZAwIEHQfk X-Google-Smtp-Source: AGHT+IGEohsDPf3NZ6sD9c5xqEKRveBataHl0LHi8PdktB/2oe88QR4GcLZC6tkcSuWsKxJIW+5aytWv8kp0WAQB8Lg= X-Received: by 2002:a05:6512:641a:b0:54d:67e3:91cd with SMTP id 2adb3069b0e04-550e7242ca6mr420414e87.36.1747362928688; Thu, 15 May 2025 19:35:28 -0700 (PDT) MIME-Version: 1.0 References: <20250514201729.48420-1-ryncsn@gmail.com> <20250514201729.48420-25-ryncsn@gmail.com> In-Reply-To: From: Kairui Song Date: Fri, 16 May 2025 10:35:11 +0800 X-Gm-Features: AX0GCFumbLnuslXGYK9kx0T1AKHDSlFx0F-UW-ydDI3uOdbN3xW8b2P59RwRcXk Message-ID: Subject: Re: [PATCH 24/28] mm, swap: implement helpers for reserving data in swap table To: Klara Modin Cc: linux-mm@kvack.org, Andrew Morton , Matthew Wilcox , Hugh Dickins , Chris Li , David Hildenbrand , Yosry Ahmed , "Huang, Ying" , Nhat Pham , Johannes Weiner , Baolin Wang , Baoquan He , Barry Song , Kalesh Singh , Kemeng Shi , Tim Chen , Ryan Roberts , linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: DFF021A0005 X-Stat-Signature: zzk3kh87uijexniahq78czqdk5d1acqn X-HE-Tag: 1747362930-941621 X-HE-Meta: U2FsdGVkX1+xW5uq8/ApGdKjaR1VngrVExt050azOP8bj2UCZe5NwVwDqh+b8a1gDqm7mDtGporwH1GtK37AT7+12XfZlXWTZ6MFZ0tcyilWbdtCP7TKUh4TMUlgnzAbEXhS+81jbAXtqfsvSWQoRiTlXREUvKapkKOTyt89B3twY9rv/xTHJlTId6hWZYUbqHvoOmJ8S2vtDv+3TClDRAw5P9Pla6+b5cRcr9SNHIvmh8nF27/xwrofqVZMlR4QkP5M7alLda33XxZc1ZTJvphUMIDuqKdeWj53NfT0gBww6tcQVzYiTd81io9OgBMPkKJphkpz2pjEwcTAyceNDOkQyORcyozFcp/xY4DyCIm0IS1rsCO7xaAgdgH6pHEtobmBLqof+q94bUtpr3R5OMhuO/Xw/zoHTOxUuMIHoZdcYw3x24ewoxhTK8OksrDU3QfqbatVB8z3WamWsuhjsScn5rNtwn7GBJbqe5IGwW4iVyboeM5+ahoCQhDdXpD3J0afk4DN1g67TVE4e++pHeMzgO4U1fqLP3YhOTkW+8Jx8QWBLwQ0imJF6eu3hcQatBN/08uC17PiBJ+HdqriLm/bvqbDihVm661TOX6EmB+/KvuFpfKU1TZrOMAN1VZDJHitcFqiX7aLjtF/W5h9Io1qtTnDo4gUDhIx7CSpQ5j7vDSkHwDAJevgiRlSXjdwKtgOHIEUmck6PD44K0i0jWPem1yV0pgs/O9iJNoas5w/YzCfqfaLGsqiKMiTKFC2++pzp9Bt3OZ6Tp4yDN0t7jyBN3n9Fua+OggxJo/0jqBy2IsDUl64fbvKMplGAIeJX5Yy8G1QbFNghPbJ/338DUHryXW7xECAf2yrpPoFEfW23d1j3ZsiiG+5PzNL2oDPlHyqjPzJA7ebjU57eBPArHOPAgwUtzvDI8QcRlmpqtllpUWfKCWMrPB7skBkqF7mGbxQXHiMza4PUJNwsW2 szgYzpI1 mk7RTwAMHikhckSor4RokHWUB6uQS+1ezyVcyJhbdQABPrE2ByjUnOLOKBjinIZRcYCPzY4fb7B77nJlIrfuAq5dj2VU9FijqFmmo/axV3gMw7OqdBemVcZ9nscvZ1H3qUCYT50Xj0j0ACq9h5rdqmpDvLJMbK6IXIUB6cEUC4v1HJj+bTsmLih8wKiHFouwj2jCr1y+WPk7K0GpRJqJHCcQeKI6EKhCE6amMzdlBUTLOADCjh8oI+NQkIzoUNBwxuAQa40qHZcWwVYWhx5S0TQ2/85zr5QRfmEU20uFJ05FW6yj5k8eY1Lal5w+KGCqBRmlx2o69rw9UVT1boZv6HM1RwR0VRGQxf7Z3s+BhBOLHf7Z8/DzTqGEpNA== 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: On Thu, May 15, 2025 at 5:42=E2=80=AFPM Klara Modin = wrote: > > Hi, > > On 2025-05-15 04:17:24 +0800, Kairui Song wrote: > > From: Kairui Song > > > > To prepare for using swap table as the unified swap layer, introduce > > macro and helpers for storing multiple kind of data in an swap table > > entry. > > > > Signed-off-by: Kairui Song > > --- > > mm/swap_table.h | 130 ++++++++++++++++++++++++++++++++++++++++++++---- > > 1 file changed, 119 insertions(+), 11 deletions(-) > > > > diff --git a/mm/swap_table.h b/mm/swap_table.h > > index 69a074339444..9356004d211a 100644 > > --- a/mm/swap_table.h > > +++ b/mm/swap_table.h > > @@ -5,9 +5,41 @@ > > #include "swap.h" > > > > /* > > - * Swap table entry could be a pointer (folio), a XA_VALUE (shadow), o= r NULL. > > + * Swap table entry type and bit layouts: > > + * > > + * NULL: | ------------ 0 -------------| > > + * Shadow: | SWAP_COUNT |---- SHADOW_VAL ---|1| > > + * Folio: | SWAP_COUNT |------ PFN -------|10| > > + * Pointer: |----------- Pointer ----------|100| > > + * > > + * Usage: > > + * - NULL: Swap Entry is unused. > > + * > > + * - Shadow: Swap Entry is used and not cached (swapped out). > > + * It's reusing XA_VALUE format to be compatible with workingset > > + * shadows. SHADOW_VAL part could be all 0. > > + * > > + * - Folio: Swap Entry is in cache. > > + * > > + * - Pointer: Unused yet. Because only the last three bit of a pointer > > + * is usable so now `100` is reserved for potential pointer use. > > */ > > > > +#define ENTRY_COUNT_BITS BITS_PER_BYTE > > +#define ENTRY_SHADOW_MARK 0b1UL > > +#define ENTRY_PFN_MARK 0b10UL > > +#define ENTRY_PFN_LOW_MASK 0b11UL > > +#define ENTRY_PFN_SHIFT 2 > > +#define ENTRY_PFN_MASK ((~0UL) >> ENTRY_COUNT_BITS) > > +#define ENTRY_COUNT_MASK (~((~0UL) >> ENTRY_COUNT_BITS)) > > +#define ENTRY_COUNT_SHIFT (BITS_PER_LONG - BITS_PER_BYTE) > > +#define ENTRY_COUNT_MAX ((1 << ENTRY_COUNT_BITS) - 2) > > +#define ENTRY_COUNT_BAD ((1 << ENTRY_COUNT_BITS) - 1) /* = ENTRY_BAD */ > > +#define ENTRY_BAD (~0UL) > > + > > +/* For shadow offset calculation */ > > +#define SWAP_COUNT_SHIFT ENTRY_COUNT_BITS > > + > > /* > > * Helpers for casting one type of info into a swap table entry. > > */ > > @@ -19,17 +51,27 @@ static inline swp_te_t null_swp_te(void) > > > > static inline swp_te_t folio_swp_te(struct folio *folio) > > { > > - BUILD_BUG_ON(sizeof(swp_te_t) !=3D sizeof(void *)); > > - swp_te_t swp_te =3D { .counter =3D (unsigned long)folio }; > > > + BUILD_BUG_ON((MAX_POSSIBLE_PHYSMEM_BITS - PAGE_SHIFT) > > > + (BITS_PER_LONG - ENTRY_PFN_SHIFT - ENTRY_COUNT_BITS)= ); > > MAX_POSSIBLE_PHYSMEM_BITS does not seem to be available on all > arches/configs. > > E.g. zsmalloc seems to set it to MAX_PHYSMEM_BITS when this is the case > but I don't know if that applies here. > Thanks, I think I'll just copy the snip from zsmalloc, it's basically doing the same check to ensure there are still enough bits left after embedding a PFN in a LONG.