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 C847FC4167B for ; Thu, 30 Nov 2023 10:13:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 127106B0456; Thu, 30 Nov 2023 05:13:08 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 0D8446B0457; Thu, 30 Nov 2023 05:13:08 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E92666B0458; Thu, 30 Nov 2023 05:13:07 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id D72A96B0456 for ; Thu, 30 Nov 2023 05:13:07 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id A0FB1A0112 for ; Thu, 30 Nov 2023 10:13:07 +0000 (UTC) X-FDA: 81514207614.06.155A539 Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.173]) by imf01.hostedemail.com (Postfix) with ESMTP id C2C394001A for ; Thu, 30 Nov 2023 10:13:04 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=W2UuxcIB; spf=pass (imf01.hostedemail.com: domain of 42.hyeyoo@gmail.com designates 209.85.210.173 as permitted sender) smtp.mailfrom=42.hyeyoo@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1701339184; 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=AFLDlKBZImGeYvTOOkWXzANWKOiczdwVYdjtu1l9KXI=; b=5ErNFfHHNLJ4WB6EYaCZOX4JXNeLScQIX0NmllFuNkLw+OMYXmiwt/PpHV30hh4QOLnRu2 Z7XcNLrBPBhcvxeUk3JLSbWE8Ncbg2tXtCnNj/FkptFHx5wWbw0ENL+CPC/odETr6RvaqF mF4FLFU5trilFzbCFOIV24FfoINe1jQ= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1701339184; a=rsa-sha256; cv=none; b=RrligbAEkM3ijoSRKG6tmF6owQtvO76+MDB6H1MqJRIswLSWweF0g0GdEWqszfNZKLjmpX CWsOhgs4e3UFintJ6YviZvGZdDFtS0DEHJPpQ+5dehMdGujAjWlddF85H1pMXGhkwq/vpF Xy+NeHSt7dciUxnxaRBFrLaEQnk5DeI= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=W2UuxcIB; spf=pass (imf01.hostedemail.com: domain of 42.hyeyoo@gmail.com designates 209.85.210.173 as permitted sender) smtp.mailfrom=42.hyeyoo@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-6cbe5b6ec62so745982b3a.1 for ; Thu, 30 Nov 2023 02:13:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701339183; x=1701943983; 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=AFLDlKBZImGeYvTOOkWXzANWKOiczdwVYdjtu1l9KXI=; b=W2UuxcIBBAD/gveklOiYWHmtMQ2qy899Hvp2NHccVSkNQX/v09fhxSYIG29nCLFuin bRzLq63lX+4WLrnWsi8cMxWVhmm5EENnPko6G13/M9rwuE7m25wiT4soeE7POZ9ac1Um 2+T3mZGijqKCjj09qfwSkkRL3QmGTo1eNH1Q24UoMmkt7uSmnFIXMtxOmxQ/Qko9knHU soJV5BioV2FQVKm48Qs18NZmy1SGUmfaQRoPvb6tBBwcnZphm4Sz/kukKsYjF//8isqw 0VPFutUBNF62FY3B9nwL9dm16Wry6OWWEtOdB8eWYD/A2JMb5kRPMzjc/FipMMdrNNKV E39w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701339183; x=1701943983; 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=AFLDlKBZImGeYvTOOkWXzANWKOiczdwVYdjtu1l9KXI=; b=kZG/j5OgvYFUX0DDRp1ojrk1O+WUnqbcxEOacNlaJHOH1+1E3ykjE2CvMFLsp1pNtg t89xB0/6W4Rv8NAsCJLSwcx1PO9T1cS8AS74XI7Gzg1Stk6l3ClAs8lv05+eTh4QiaM8 bJznLE7KR6vSttjGbhb0xeosfVldj8V3wl7S222zi5dMlanzZuML48nnecF2erqhw8rk b844Ar/iQb65pZ6qZHsljxwRwsOOdrb+8eEvQ+URBQ5QcTZUxGLDQknKJYSYLMBBcS+5 nkOrgi3d48Zmnld5GANkFTqt1Z2Ca+D7+Dl/QD2z/Q59qUYUUXFoO+ajfqvykj8sg5yy NAsw== X-Gm-Message-State: AOJu0Yx/W/hZpkq1uHQvXgrIDifqrdGeE/opwxtpzp8P1NifE5xYVhpm 26Fu+Tds604Zwhz/lIwdYZE= X-Google-Smtp-Source: AGHT+IGObcMnYoNsBAZwY10OxxgNLh9BBg0u8VMJHj8UzkBGa+NGHjd9Tr2PQSL/C7blmd6+EQ1crA== X-Received: by 2002:aa7:9a87:0:b0:6bb:8982:411c with SMTP id x7-20020aa79a87000000b006bb8982411cmr20447348pfi.8.1701339183190; Thu, 30 Nov 2023 02:13:03 -0800 (PST) Received: from localhost.localdomain ([1.245.180.67]) by smtp.gmail.com with ESMTPSA id r27-20020aa78b9b000000b006900cb919b8sm841402pfd.53.2023.11.30.02.13.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Nov 2023 02:13:02 -0800 (PST) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Matthew Wilcox , Mike Rapoport , Yosry Ahmed , linux-mm@kvack.org, Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v3 01/21] mm/zsmalloc: create new struct zsdesc Date: Thu, 30 Nov 2023 19:12:22 +0900 Message-Id: <20231130101242.2590384-2-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20231130101242.2590384-1-42.hyeyoo@gmail.com> References: <20231130101242.2590384-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Stat-Signature: pxa1yqxagydrqigq7oqcyfo58ks45i4u X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: C2C394001A X-Rspam-User: X-HE-Tag: 1701339184-206869 X-HE-Meta: U2FsdGVkX19aTTpD2YHiYJPHU/5IUPg0V4iW9Yk7KzKBVSVjRCo+YZfOyXStEdie87Wk2sIralvoRA5ohZE76yLxLFOCX8TCx6wxMx4xcDBUWvcrIQ0dJy48lQngKM0qA0vm9d+9pKZiV/yMe3rw3DFTpkwwIdzBW/j/opkJnobumZki7cATQKvjjIcam+YdpteTOAwomKqjbSjU/92Dr2Y688KnPqWDFWQex7F74c4g93vE8C8u593gFVvPuGqoyqIhY0IuShWJeUpNHdGvPR9AhM1F1+2iQaWB3md0izJQstjpS0o+OcuMBg7MNftN8poZ4xQeTdSo/na5dLbJvOg6xNCMfRfUFO8BFvM3+JXV+0lawcqHTV9ESpZ9XDU8DWtQiteqjxvazkLe5o9+IkhLnYtbkKoTcay/v4RMe7ZwoSbodEahsNY6XFC8N6DUoiY4z+shXX4W8xpTZxDfM0bKUDgFeqmlM/iA2x3RX67o21sG7pUIx3935z2b2/bYQLkopumQ8ijgW6u0hpwp5bSZbufBFO21uVmbZLXO6GJo8pTxGWqtzIjBOmnSXvrtkoLYKysXe3rwvmz2fwg/6sTsPXe3pAaMxGnocpxcol+o+xjMD+Tyci7vmwQHzeOLOgnHyJPdJXai9PjoNRwsKE7evI712YLaMUThHoo9nN1p9lJgxLsZp1ne13kLEPA0OyOMB7tEyxcxDTVGJkXR8SyyhpnXIRx8QAzOsU/lS4c9d2MzvxScyWpV3lvy7H/9O8l7ltPPYyr9fizO5d5ydVlknd0AXNog0b32cFdEXyCQnt0FK/BJ+LWjbl/F8nTkcsaHrYBeKr5uBMJAf9fyIgmVNDFwDwzZr0z4WBxVfb6txs7WKxi02p0NSF3vhdiazhhoerWEa9x6s/xTIVX/eZ2fPkaO113kKkIWRWEgh4k5JyMdf7gJNaAifdP+s2asanzyXRA/YjWETbQww2C MdmNI/4b 0f6rar9pZ7mSwAckVpEupx8AJ8kBc6LageusjoEYz82ldIGbl516wCfvE/0XHp69n47t3U8n6ZatPrD9OIQdZe2w+b41RU1ncdIcsUhdYTlcRU4vJjmcm8XW0ZNFXLsM3F0vnHEZ+l5b2zOGO0n8I89CNirThMllVNn9deLq1JFjG0Pu6bE0D1Hkn1isABgWQHwJISDvT+1kd7/LgEj8tTGThu1VFVxDJOfCazu5u1kgZ3VonzPcxODU2urTW5Hc/j/RQpoMkul9CUHtmbA6JcGxn0NxOBAWKirtY5l/+hjfed/e9gcsKCJUteHetdBDx+a5t2xtI1mWOl7dpjQvrpzmtDBve+sb/h5qMlY7xkOTdJnef7ZigzevRfXfOqWUCLxcgLpzU9BOaXVIYyFTErzcGi0juLFnOhbdGczMyRPHKfuaG8vS7mg1oJ1El1Fa/NdF7XYpdbPEkfZ3deFKXCajjMgs7lCyacNx1j6XKcUKLSG8QRU2zNDgnA3xbuTt8wD8y92hIYlXnCANunNMk1b3ddEr6m+AppGDMwNyt4K+0qTU= 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: Currently zsmalloc reuses fields of struct page. As part of simplifying struct page, create own type for zsmalloc called zsdesc. Remove comments about how zsmalloc reuses fields of struct page, because zsdesc uses more intuitive names. Note that zsmalloc does not use PG_owner_priv_v1 after commit a41ec880aa7b ("zsmalloc: move huge compressed obj from page to zspage"). Thus only document how zsmalloc uses PG_private flag. It is very tempting to rearrange zsdesc, but the three words after flags field are not available for zsmalloc. Add comments about that. Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 67 ++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 50 insertions(+), 17 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index b1c0dad7f4cf..60ce2a4dfeeb 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -11,23 +11,6 @@ * Released under the terms of GNU General Public License Version 2.0 */ -/* - * Following is how we use various fields and flags of underlying - * struct page(s) to form a zspage. - * - * Usage of struct page fields: - * page->private: points to zspage - * page->index: links together all component pages of a zspage - * For the huge page, this is always 0, so we use this field - * to store handle. - * page->page_type: first object offset in a subpage of zspage - * - * Usage of struct page flags: - * PG_private: identifies the first component page - * PG_owner_priv_1: identifies the huge component page - * - */ - #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt /* @@ -241,6 +224,56 @@ struct zs_pool { atomic_t compaction_in_progress; }; +/* + * struct zsdesc - memory descriptor for zsmalloc memory + * + * This struct overlays struct page for now. Do not modify without a + * good understanding of the issues. + * + * Usage of struct page flags on zsdesc: + * PG_private: identifies the first component zsdesc + */ +struct zsdesc { + unsigned long __page_flags; + + /* + * Although not used by zsmalloc, this field is used by + * non-LRU movable page migration code. Leave it unused. + */ + struct list_head __page_lru; + + /* Always points to zsmalloc_mops with PAGE_MAPPING_MOVABLE set */ + struct movable_operations *mops; + + union { + /* linked list of all zsdescs in a zspage */ + struct zsdesc *next; + /* for huge zspages */ + unsigned long handle; + }; + + struct zspage *zspage; + unsigned int first_obj_offset; + unsigned int __page_refcount; +#ifdef CONFIG_MEMCG + unsigned long __page_memcg_data; +#endif +}; + +#define ZSDESC_MATCH(pg, zs) \ + static_assert(offsetof(struct page, pg) == offsetof(struct zsdesc, zs)) + +ZSDESC_MATCH(flags, __page_flags); +ZSDESC_MATCH(lru, __page_lru); +ZSDESC_MATCH(mapping, mops); +ZSDESC_MATCH(index, next); +ZSDESC_MATCH(index, handle); +ZSDESC_MATCH(private, zspage); +ZSDESC_MATCH(page_type, first_obj_offset); +ZSDESC_MATCH(_refcount, __page_refcount); +#undef ZSDESC_MATCH +static_assert(sizeof(struct zsdesc) <= sizeof(struct page)); + struct zspage { struct { unsigned int huge:HUGE_BITS; -- 2.39.3