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 6AAE8E77180 for ; Tue, 10 Dec 2024 13:53:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D5B3F6B01A5; Tue, 10 Dec 2024 08:53:54 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id D0B086B01A7; Tue, 10 Dec 2024 08:53:54 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BABE26B01A8; Tue, 10 Dec 2024 08:53:54 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 98CD36B01A5 for ; Tue, 10 Dec 2024 08:53:54 -0500 (EST) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 42458A0AF8 for ; Tue, 10 Dec 2024 13:53:54 +0000 (UTC) X-FDA: 82879191192.17.CD68BAF Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) by imf23.hostedemail.com (Postfix) with ESMTP id C1A66140009 for ; Tue, 10 Dec 2024 13:53:37 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=Tz8kmbCs; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf23.hostedemail.com: domain of 42.hyeyoo@gmail.com designates 209.85.210.177 as permitted sender) smtp.mailfrom=42.hyeyoo@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1733838822; a=rsa-sha256; cv=none; b=fmjEAnSCU20l9yNrYaj8tpHS9xPR+xmJEJcSljewIkWQqu9X/D31uBSvUoaeMODR6qy7RP rGAcWdNEYoeyaMZHsFMHOpnblyMwJQ3LKMavProSICItsQgoUTJYSAmBw+f5213yQhFk8x I44NTseO4BOVMcWS6yaVzzoa1BJ2TkM= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=Tz8kmbCs; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf23.hostedemail.com: domain of 42.hyeyoo@gmail.com designates 209.85.210.177 as permitted sender) smtp.mailfrom=42.hyeyoo@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1733838822; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=wzymS61eZoJtv/kpW9DofBjyc9ce0nJKhxPcQQQMQ0E=; b=1Ykdcl/XXZGLrSRNoh6Xr2ORw549rIMji/pP1NX+GP0jpkio2KwWHlCSow1VhF1NiM3KB3 JO01B/1iYqEnnNVggNhKR2KTXw8iptAt8rNxEKoMG/imfz+Cfjpm1PAK7xxAcaMOIF6hR9 ToxvFvqNj6VE0HhzZ7PgAY/zejBraDE= Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-725abf74334so4605119b3a.3 for ; Tue, 10 Dec 2024 05:53:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733838831; x=1734443631; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=wzymS61eZoJtv/kpW9DofBjyc9ce0nJKhxPcQQQMQ0E=; b=Tz8kmbCskEaNhxBwwzHXyG5Cy1FxM9XfUFNY0Q30z/b9eYkQRrX0d72XoLT0gOzoBv Yj8xlLR97YqJXrj9WlKfH4TzkV57BHtlJMDbHNEPfNV1SvQKcceXvvIFMHPz5uIO3tCm tE5frqXV9YqcmNUQfj7lmsRgssTMhgiKGngO0ZupWmzMHAOuNLlDQc4YPXKur9425Tyn o+WN9WhzHeKR+s/4/eWgUGh/ne4BHmX+yTPFqPCtCsPbMBguwKY1/nfOnDm7kgZ1g/2M 221Ua24Tq3WKP09OE+of6df9wMPjFoCFiJJKdmdxfdbJjZLTVSphClkOTIT6o1e0doKX FBlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733838831; x=1734443631; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=wzymS61eZoJtv/kpW9DofBjyc9ce0nJKhxPcQQQMQ0E=; b=RW/7TtCPsQWy8l3QJh4WCeXLsh7LY+NV/OyVtU+6z8DRseSGOihNfeHrKFqcG8zfyo xz1fk4LC1iOZUyQSXT56MeDAIc0qNbPwiNJ3HxIpoF8ggy17/guVVOtwnOVB+9IPxj7s 97RYyNg0dJS1ft3+qTAVzox3E8MKQEqw8sWqXnyw41pNECVMGQlilZfDEsB+Zl/m8MMV u7VHSJjI87RIjmkSbIwbiUx35eaALLYvXP3ryozpyDeNolyPWez7xDc/8JTv/z9mGzkg qm+TX2g0UEpbW1GhVvrOVDidhvGt8n+4plni86TxVX/1UW3cv1vyQu5yM0lJgNHj8hJ3 Dytw== X-Forwarded-Encrypted: i=1; AJvYcCWbXP+po1ItMXPna5HsAO3SBaiGN3GeBJkNcRa79ISvfLpz3i/IrG/ozQ/jRm1PwuAHIuBc3UYCvg==@kvack.org X-Gm-Message-State: AOJu0YxRtE+R8Ki3gIqf7NZD5GLcsY9JOL9GjTxwan2Cwh31W1GSEk0w zosfAweF7ilQ0BaVo1iiS90rISq3/PnQqDiNBsFkgEvLvWooQl8U X-Gm-Gg: ASbGnctwgbqVKJSU13T2Y2185lQNGCdvKsAgQsNB5/WZK/N9vztGh7b4XU4GJNJnBbE XmQ9gHiFpYsBmAUe466j7HOEHRfTu1gdYNAPfHbjMm8c43FpCgmT+Il4cmDm4BCxsmbHIy9/S9d PJJXTpu/yy88JAhasvWH8OeUP2GSXStPsCuD3szbrnpirOaDDjkVQB0/eOLrRY7X1Hs0Wh8iWKp VH+YTx84mzvnl5Dty6g8nYnvfwk9hsk+YqF9+lDkwQw2BoF6D7xiFaLKAangyGp7TFgbP5x89+4 bzDK2K0= X-Google-Smtp-Source: AGHT+IFaJstP57Ow7/tg25a+gge7wLKqle5O4mhYL+vyapWb+pSipoiDmq1mrD1QA5PCtI7xQ2Wa+Q== X-Received: by 2002:a05:6a00:9289:b0:725:e499:5b8b with SMTP id d2e1a72fcca58-725e4995cc6mr13179577b3a.17.1733838830895; Tue, 10 Dec 2024 05:53:50 -0800 (PST) Received: from MacBook-Air-5.local ([2001:2d8:690f:73f:d049:fbb4:193f:e539]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-725a2cc6eadsm9685888b3a.188.2024.12.10.05.53.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Dec 2024 05:53:50 -0800 (PST) Date: Tue, 10 Dec 2024 22:53:43 +0900 From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: "Matthew Wilcox (Oracle)" Cc: Minchan Kim , Sergey Senozhatsky , Alex Shi , linux-mm@kvack.org Subject: Re: [PATCH v8 06/21] mm/zsmalloc: convert create_page_chain() and its users to use zpdesc Message-ID: References: <20241205175000.3187069-1-willy@infradead.org> <20241205175000.3187069-7-willy@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20241205175000.3187069-7-willy@infradead.org> X-Rspam-User: X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: C1A66140009 X-Stat-Signature: g6niwwi6gzpcp4t14wcto7qzy5fu3pwt X-HE-Tag: 1733838817-931710 X-HE-Meta: U2FsdGVkX193H1tFbEHPa0+1Kck7PrKbo+kbzvms8yfmhutd4ANy8CSNIX6ty5rwJgF4qPz3/6HfNfs+B0GmULeKvKHA262eqFe3OHRlMd5wKfR9YeN7BooYtYGy9UhQsfVHAs0xOM1tb/y65hzQABmlRpchcaDsWs7fF7j+a09Q7RxYQ0WtMDA7eP/aZrojIat0luwWwg3qdZUl5Dh9cFYIrO835XrDHIcgnjNqBaXdCevZJfXgTD4pdbj/nDLnOhfWP+fh94JfiLmFrP3NLNgQddz8OhFVnWhUqsTa10vkIeKGC2ue55BNvi8TwRODTTc7NWiSnnSNq/1P1ByNSSwvZiufFqmmCc8x7Yi5RwKzYMpk0rz0hvlTFTU91nX4pKgnEhWPoZednFGlC7lxjD1Ut1L3J8Y4kdLiE+uhGRMAqr2aWy9SV7FUaOSklvfpLtW5Hxml+n4PpZjJ67C9Qlr9F2kCk8DoX7LuqBdf8+orIgHGmWJJ2snCmF4NUFvop3xLGY6OGPj44Q7dLr2UMoAD/9zPaXSx36HQZf6yDSUu2hM0ESjaTaM47e6qkJze3KpojIEenZeJZv/pQ3dhVsqD1fpHGvU7TtlmC1YUdOi/1SvSmPAXaUegQmyVFA0TjckhFAWrugDY57yDVFOImLR2gZN9iOiKyLXzfdY6tYZhHtqjDzbVJrgCNemyFW0Y2qEvdn/h4kRvaD79REt5m4l9leRSn1KIjfeB2ujUWUmNOWY7Cn4AsXijL8drMGNWrLCGHQUVD8TSdA2coRxhyv9Kr1l5sSccJ7G3o7nifYsqeAv+V3SSSBhYqFug/GuMb4ktWLpmZ3H2BgTy0fKYE/ZWIAcPw6sHTgAEH7JeKSwys8BgbmhqoNkkA/Dkv/nB51E4NANuF3uQU6c0aIMluuWLSY1EbUi/dPAYiTKmSRUxVrZjMJ1dQD4oBtj6mUpocvhRbgPFxKl2uBJEJZb oXgL/v/K Z7gVEytmXSfAwbPZi8lHaYIjviYOFJjPkYpMg+n6OH9/yyBsb+a1w6DIVyhO80uHGQq3Kx5OF6KxvXM08O9NWEOqSEG8/P3i2uFrMLAB1sZLlPT9l1uSTkqjOHbFSw5MtLkVh0R6T816ltG1a2rGwKjj8xzsyOKehZX2dHmkrLnvihLuOC5y5lZBS2xA63EV/LdL5+tQoiW3kAi01Om+kpEq7/m44mAPy0cAHGjtUtSrcdsJqZl45Je2584bwDWNcqzyN5Pe/WlnwuZE+FzVBewxZy6dhfgfcRQ35YZn3T9WgGU9MvEebtwQkHxsT2J9wSDsl/AGw72DB/HLBWXd8CNFaBLpwYq2iQRopDPOYMaCsQfhc79/jhLEwXef2o99zADWjuiWboM3ZtbANQKfm6sm6yE1u6uMko0kGhwLYS07alZsRbwMSoJ33I4qlVT0qR4GbNEYEaLQSYPdhCOjKtZFZiJ454sO3vjHzWG+Rk50xP6iXFdwJYdDooaeotN4kKocnAWY30s0yAyijII/C0Z5BAw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.281626, 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, Dec 05, 2024 at 05:49:43PM +0000, Matthew Wilcox (Oracle) wrote: > From: Alex Shi > > Introduce a few helper functions for conversion to convert create_page_chain() > to use zpdesc, then use zpdesc in replace_sub_page() too. > > Originally-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> > Signed-off-by: Alex Shi Reviewed-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> > --- > mm/zpdesc.h | 6 +++ > mm/zsmalloc.c | 109 ++++++++++++++++++++++++++++++++------------------ > 2 files changed, 76 insertions(+), 39 deletions(-) > > diff --git a/mm/zpdesc.h b/mm/zpdesc.h > index 937de815a4ac..0387f5771dc6 100644 > --- a/mm/zpdesc.h > +++ b/mm/zpdesc.h > @@ -110,4 +110,10 @@ static inline struct zpdesc *pfn_zpdesc(unsigned long pfn) > { > return page_zpdesc(pfn_to_page(pfn)); > } > + > +static inline void __zpdesc_set_movable(struct zpdesc *zpdesc, > + const struct movable_operations *mops) > +{ > + __SetPageMovable(zpdesc_page(zpdesc), mops); > +} > #endif > diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c > index af8a6cd6b814..6beb7cce4c31 100644 > --- a/mm/zsmalloc.c > +++ b/mm/zsmalloc.c > @@ -246,6 +246,35 @@ struct zs_pool { > atomic_t compaction_in_progress; > }; > > +static inline void zpdesc_set_first(struct zpdesc *zpdesc) > +{ > + SetPagePrivate(zpdesc_page(zpdesc)); > +} > + > +static inline void zpdesc_inc_zone_page_state(struct zpdesc *zpdesc) > +{ > + inc_zone_page_state(zpdesc_page(zpdesc), NR_ZSPAGES); > +} > + > +static inline void zpdesc_dec_zone_page_state(struct zpdesc *zpdesc) > +{ > + dec_zone_page_state(zpdesc_page(zpdesc), NR_ZSPAGES); > +} > + > +static inline struct zpdesc *alloc_zpdesc(gfp_t gfp) > +{ > + struct page *page = alloc_page(gfp); > + > + return page_zpdesc(page); > +} > + > +static inline void free_zpdesc(struct zpdesc *zpdesc) > +{ > + struct page *page = zpdesc_page(zpdesc); > + > + __free_page(page); > +} > + > struct zspage { > struct { > unsigned int huge:HUGE_BITS; > @@ -955,35 +984,35 @@ static void init_zspage(struct size_class *class, struct zspage *zspage) > } > > static void create_page_chain(struct size_class *class, struct zspage *zspage, > - struct page *pages[]) > + struct zpdesc *zpdescs[]) > { > int i; > - struct page *page; > - struct page *prev_page = NULL; > - int nr_pages = class->pages_per_zspage; > + struct zpdesc *zpdesc; > + struct zpdesc *prev_zpdesc = NULL; > + int nr_zpdescs = class->pages_per_zspage; > > /* > * Allocate individual pages and link them together as: > - * 1. all pages are linked together using page->index > - * 2. each sub-page point to zspage using page->private > + * 1. all pages are linked together using zpdesc->next > + * 2. each sub-page point to zspage using zpdesc->zspage > * > - * we set PG_private to identify the first page (i.e. no other sub-page > + * we set PG_private to identify the first zpdesc (i.e. no other zpdesc > * has this flag set). > */ > - for (i = 0; i < nr_pages; i++) { > - page = pages[i]; > - set_page_private(page, (unsigned long)zspage); > - page->index = 0; > + for (i = 0; i < nr_zpdescs; i++) { > + zpdesc = zpdescs[i]; > + zpdesc->zspage = zspage; > + zpdesc->next = NULL; > if (i == 0) { > - zspage->first_zpdesc = page_zpdesc(page); > - SetPagePrivate(page); > + zspage->first_zpdesc = zpdesc; > + zpdesc_set_first(zpdesc); > if (unlikely(class->objs_per_zspage == 1 && > class->pages_per_zspage == 1)) > SetZsHugePage(zspage); > } else { > - prev_page->index = (unsigned long)page; > + prev_zpdesc->next = zpdesc; > } > - prev_page = page; > + prev_zpdesc = zpdesc; > } > } > > @@ -995,7 +1024,7 @@ static struct zspage *alloc_zspage(struct zs_pool *pool, > gfp_t gfp) > { > int i; > - struct page *pages[ZS_MAX_PAGES_PER_ZSPAGE]; > + struct zpdesc *zpdescs[ZS_MAX_PAGES_PER_ZSPAGE]; > struct zspage *zspage = cache_alloc_zspage(pool, gfp); > > if (!zspage) > @@ -1005,25 +1034,25 @@ static struct zspage *alloc_zspage(struct zs_pool *pool, > migrate_lock_init(zspage); > > for (i = 0; i < class->pages_per_zspage; i++) { > - struct page *page; > + struct zpdesc *zpdesc; > > - page = alloc_page(gfp); > - if (!page) { > + zpdesc = alloc_zpdesc(gfp); > + if (!zpdesc) { > while (--i >= 0) { > - dec_zone_page_state(pages[i], NR_ZSPAGES); > - __ClearPageZsmalloc(pages[i]); > - __free_page(pages[i]); > + zpdesc_dec_zone_page_state(zpdescs[i]); > + __ClearPageZsmalloc(zpdesc_page(zpdescs[i])); > + free_zpdesc(zpdescs[i]); > } > cache_free_zspage(pool, zspage); > return NULL; > } > - __SetPageZsmalloc(page); > + __SetPageZsmalloc(zpdesc_page(zpdesc)); > > - inc_zone_page_state(page, NR_ZSPAGES); > - pages[i] = page; > + zpdesc_inc_zone_page_state(zpdesc); > + zpdescs[i] = zpdesc; > } > > - create_page_chain(class, zspage, pages); > + create_page_chain(class, zspage, zpdescs); > init_zspage(class, zspage); > zspage->pool = pool; > zspage->class = class->index; > @@ -1744,26 +1773,28 @@ static void migrate_write_unlock(struct zspage *zspage) > static const struct movable_operations zsmalloc_mops; > > static void replace_sub_page(struct size_class *class, struct zspage *zspage, > - struct page *newpage, struct page *oldpage) > + struct zpdesc *newzpdesc, struct zpdesc *oldzpdesc) > { > - struct page *page; > - struct page *pages[ZS_MAX_PAGES_PER_ZSPAGE] = {NULL, }; > + struct zpdesc *zpdesc; > + struct zpdesc *zpdescs[ZS_MAX_PAGES_PER_ZSPAGE] = {NULL, }; > + unsigned int first_obj_offset; > int idx = 0; > > - page = get_first_page(zspage); > + zpdesc = get_first_zpdesc(zspage); > do { > - if (page == oldpage) > - pages[idx] = newpage; > + if (zpdesc == oldzpdesc) > + zpdescs[idx] = newzpdesc; > else > - pages[idx] = page; > + zpdescs[idx] = zpdesc; > idx++; > - } while ((page = get_next_page(page)) != NULL); > + } while ((zpdesc = get_next_zpdesc(zpdesc)) != NULL); > > - create_page_chain(class, zspage, pages); > - set_first_obj_offset(newpage, get_first_obj_offset(oldpage)); > + create_page_chain(class, zspage, zpdescs); > + first_obj_offset = get_first_obj_offset(zpdesc_page(oldzpdesc)); > + set_first_obj_offset(zpdesc_page(newzpdesc), first_obj_offset); > if (unlikely(ZsHugePage(zspage))) > - newpage->index = oldpage->index; > - __SetPageMovable(newpage, &zsmalloc_mops); > + newzpdesc->handle = oldzpdesc->handle; > + __zpdesc_set_movable(newzpdesc, &zsmalloc_mops); > } > > static bool zs_page_isolate(struct page *page, isolate_mode_t mode) > @@ -1836,7 +1867,7 @@ static int zs_page_migrate(struct page *newpage, struct page *page, > } > kunmap_local(s_addr); > > - replace_sub_page(class, zspage, newpage, page); > + replace_sub_page(class, zspage, page_zpdesc(newpage), page_zpdesc(page)); > /* > * Since we complete the data copy and set up new zspage structure, > * it's okay to release migration_lock. > -- > 2.45.2 > >