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 A2A0EC282EC for ; Mon, 17 Mar 2025 17:00:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 83807280003; Mon, 17 Mar 2025 13:00:08 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7E722280001; Mon, 17 Mar 2025 13:00:08 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6D80E280003; Mon, 17 Mar 2025 13:00:08 -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 4D2C3280001 for ; Mon, 17 Mar 2025 13:00:08 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 9FB81140396 for ; Mon, 17 Mar 2025 17:00:09 +0000 (UTC) X-FDA: 83231655738.13.DAA41D4 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf29.hostedemail.com (Postfix) with ESMTP id D0A52120016 for ; Mon, 17 Mar 2025 17:00:06 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=FoTbU1KO; dmarc=none; spf=none (imf29.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742230807; a=rsa-sha256; cv=none; b=QT9h+T60f5nG6dkvyPHR/jXYeJEaXrBW4dQqbD/aLaCDBuZ54A3pPMOk6cGavUcqTjAJGA OnWc9Jah2BxuDLfN+U6lOqjhyQtuXJqNIfSWi+2iLTOuxmCiQKX9eXoZHPtXeGGIFfR9nW DNBRa9wRZ+Zq3j7H5pLEu/gAKG6hODc= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=FoTbU1KO; dmarc=none; spf=none (imf29.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742230807; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=zNG4bcGEdRCwNl4EQSDIDNCq92xkEbor8/YW5GOyBSg=; b=l/5qeTJrh53Z/TGV9Fl28O6arrtHzspEsWwFXGbiXHHaa3YhQHBkElFUECYmnzvVu2cXaH 7Vl0r+LBxIuKAp8TQiLk3oAWDTTlZmeLd5AP1WcyXdvDq2LeDoxvUp3vRxRuoezKHySYJT UPYtAGiCs4HmdF9uG+6sUpjJkZb9ZwU= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Type:MIME-Version:Message-ID: Subject:To:From:Date:Sender:Reply-To:Cc:Content-Transfer-Encoding:Content-ID: Content-Description:In-Reply-To:References; bh=zNG4bcGEdRCwNl4EQSDIDNCq92xkEbor8/YW5GOyBSg=; b=FoTbU1KOW+ofTlxFTTIATZgpvg ft6RkcQi31R09vzq0LoTuZdWlf68Trq4VbdtQzJPx6Yog+c2vyssk2ywQHt80iTKqUuCu9QXZ9ZWV iZq1+3qpc9rzqViF5VV60vbwPDTwv+gXrxbDa7aHNO21xWkFR/XOrxsPDBS1A+Lddq9wxvwER+6wV I7UQ3cIJJrWcN+0dPWCbgxj3fbXmBsp7g46zBEcXH+eJGLuCcPOhvmoOmQoiKsTLn3tKBU+yC973v 1CmERvzukQj/0mvnas4MA8zfxBHY9bT55ro97uD+0ZoZriXhSvvoZh8dQ1rHvc6Ru8v1x3FbyMXdn dJgxB+0A==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tuDop-000000099R1-2V7a for linux-mm@kvack.org; Mon, 17 Mar 2025 17:00:03 +0000 Date: Mon, 17 Mar 2025 17:00:03 +0000 From: Matthew Wilcox To: linux-mm@kvack.org Subject: A plan for supporting PageMovable in 2025 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Stat-Signature: c8cjcai3n9yineg96n839x7srgbrx8ng X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: D0A52120016 X-Rspam-User: X-HE-Tag: 1742230806-975447 X-HE-Meta: U2FsdGVkX19kABWuau9e/QLu5EeAW5/OsWiMS3jEZc045xDtB3LZ/6Jn2hmVed+ShjNKBcMYsOZh8BAZeO+4ZQA/cMxIeLfchan4xTEhYqQEWkJ2/AoCj7naVmnuKmvRuMiIJrWzcG0y1XaDDnR7JdB7F/LPTWgKhIJCjB4hJVwn9IaOciyldTm6NlxfTyuQNt56D9uggOZ0olk2uimYuUsL+zfUBqXOlo2U3gbmoSgo1wesfraapIs1GiYyKDcZXavk442vACComD4jHQVE7ZWL3X1AR2drfRs6G2MC3fTr3aK8ZlqyKeAyDkW5mkxu4iozWoCNGcBWiEjE550W2bBW7oA1Q5pKgk7BYer+h1KCO/MHuNdgDcSl8j9fMc648wQW6ha2jB8zUS2bCApQ2kojmPn80lvcKW6rpnRmtFuYUxA7ihkTqKQBcqaApOjaj0iJjaVQvESYz/kzcx4tStFZC1LMaGLpxEQdH6BmA9nmADWdS/I2z0YqvHNoKwReZjREl8BSFkE7/LJMdisF909MeA4YB8q3A2Y7C34JSFF0SEiZBTdiT/u8StOoTsPbtKcZmJxkrcHZLD7haAu2EjdypoK1RRWICK/9ZaBDa6L+bH/4o/Iwwq+tHDWmcRyQSAsKt/I4gXdYxbXlX+WsTewU5oX0ASRuUAjANrY7mYRLEGA6yJqs8YrlH7qd3hZN7ZhIHmopjZ0lT6xjLbwb7IhWxkBJqam8DmggGhPQYZYZTtbM9N6Rvv5BWM4RNE/iSM/+88lmjkFIPx9TVlLt9J+ytHpv4rgCCT7VVH2obwammKoGNupiRG2kXY1z4+ZZeEGRTFAMufPIfHH93V9xOPMsnmaRRurOApAQPT6x5jkmNsdJ/wz9JWKIv1juQF3uEcWNRPm52avGlDjngZkMb/ICQWJ+JGwejjvskpW/3TdsK7P5B5OIRyHFrCQKg4/wKBim7IaUTnUgTNChjdT rfq4lRPf O42XzWtX4raSSpnAaN5GrD/AX3pMHQ6BDw+cQDYiqBp5ArjASI0y5Wv+X8gLndc++/6rLG33rnu1D5ww8q664KZGXlPpdC4gTpQeOpfzrYXXeteOfL3NbyWw3e5EcbtFUHx4SCxVKcGWsjs2QkG9IGGbMeL59z/+fRJLJfgPkyJPGcGLSF1J+h3jonBPmgZG7YNTq3EEqU7nzSQEM4HnLafQ7NO0KDN+vp8nA 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: With the upcoming shrink of struct page to 4 words, we need a plan for handling PageMovable. Ideally this does not involve memory allocation, and is a relatively simple change from what we have now. To shrink struct page beyond 4 words, we'll need a better plan, but I think this will do for the next few months. The current proposed layout for struct page is: struct page { unsigned long flags; union { struct list_head buddy_list; struct list_head pcp_list; struct { unsigned long memdesc; union { unsigned long private; atomic_t _mapcount; }; }; }; int _refcount; }; My proposal for movable non-folio pages is: * memdesc is used to point to struct movable_operations (these will need to be aligned to 16 bytes, but I think that's fine) * private is used to point to the next page in the list * These pages are refcounted * We retain a "lock" bit in page->flags The most disruptive part of this is that we can't use a list_head any more. I don't think a singly-linked list is prohibitive, but either we need to switch folios to also use a singly-linked list, or we need to handle folios & movable pages separately. I think the former is probably best.