From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6C435C001B0 for ; Thu, 13 Jul 2023 04:21:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233798AbjGMEVI (ORCPT ); Thu, 13 Jul 2023 00:21:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60938 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233446AbjGMEU6 (ORCPT ); Thu, 13 Jul 2023 00:20:58 -0400 Received: from mail-oi1-x22f.google.com (mail-oi1-x22f.google.com [IPv6:2607:f8b0:4864:20::22f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5BFAD19BE for ; Wed, 12 Jul 2023 21:20:57 -0700 (PDT) Received: by mail-oi1-x22f.google.com with SMTP id 5614622812f47-3a337ddff16so286301b6e.0 for ; Wed, 12 Jul 2023 21:20:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222056; x=1691814056; 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=JDYdNA9lDVtoD8B2uXnOlmCKBsx14i431NGid1vWIJk=; b=OmNB2v7cPzjVbjCrPHesJGkG5OJ1x1rIpPnLFGkHy+8vUnmdOeiKvfhZnn6H9NJFu7 tjvfzbEKpbhx4EHl53IwQ9rpc1UZNnL1xzNCh5xu44eiS8/Xq+kyQUF0+xh6PU2Zg7Ej KwQhjbRoGatW4uiCRRA6RjICwcrolxwLBciT9JtjbWh/Z8HecM2mRJKFjspy2Q7x0oES PpLTX6U/XS/x2THUtSOszV9RZo0XzKKz+KoLi/FH7+fIwzNjLslWgoiBStNeNMKUYQ1U od21C3PGMosTsyePKwlzjYtOXcv5nFXdISwYjt7DfWwxEnq31xqijLaDKuRDUeC8kiBA GjpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222056; x=1691814056; 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=JDYdNA9lDVtoD8B2uXnOlmCKBsx14i431NGid1vWIJk=; b=M4pWwkICICfJyogg8NPHTmO2etNtOiKsjhay7IKuiWOLQ08vvVuLIaI/EoPUEntx2D Mw0MgiUMBiXDrDU4WzhzvnY0VVlvOGcGDuBy1quFSXSsMFIAm6Ia/EyvfskLOF7ANiN5 vkn3IRyxEV2FvztbBjSc9sWlxdatHG83h6L5yHvQi9tRMnB7b2FMLJ71zVdo6yV31Hz8 bIIw4eiuRYAlwBuBs5fj66XSFvEE1C2qw0mH9z11Nkq96uKZnEGZTeS1DS1Dx/tAnis3 Sldd3GaKvrrUUpFSZnfeMG8HoOx4HCu0aRzTGBuUmYwfab42BihirqDKiVuOCZkC6xJh MKeA== X-Gm-Message-State: ABy/qLYteyhUg556pVx+TqaCs75ZKHVejroU0diDqG14N+d/ZiC8QWvk rfyD3U58RB1NU+xCEaUZxH8= X-Google-Smtp-Source: APBJJlHQxzKWeFUb/2UkMXGmNGKuylqY/krdL/0xjSDkichAxJjhqdaXBt4aeDVvXdaDtSe6XlZmbw== X-Received: by 2002:a05:6808:1b1e:b0:3a1:c841:f026 with SMTP id bx30-20020a0568081b1e00b003a1c841f026mr675089oib.27.1689222056477; Wed, 12 Jul 2023 21:20:56 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.20.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:20:55 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 01/21] mm/zsmalloc: create new struct zsdesc Date: Thu, 13 Jul 2023 13:20:16 +0900 Message-ID: <20230713042037.980211-2-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" 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 | 63 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 46 insertions(+), 17 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 32f5bc4074df..2204bea4f289 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 */ =20 -/* - * 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 =20 /* @@ -264,6 +247,52 @@ struct mapping_area { enum zs_mapmode vm_mm; /* mapping mode */ }; =20 +/* + * 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 flags; + + /* + * Although not used by zsmalloc, this field is used by non-LRU page migr= ation + * code. Leave it unused. + */ + struct list_head 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 _refcount; +}; + +#define ZSDESC_MATCH(pg, zs) \ + static_assert(offsetof(struct page, pg) =3D=3D offsetof(struct zsdesc, zs= )) + +ZSDESC_MATCH(flags, flags); +ZSDESC_MATCH(lru, 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, _refcount); +#undef ZSDESC_MATCH +static_assert(sizeof(struct zsdesc) <=3D sizeof(struct page)); + /* huge object: pages_per_zspage =3D=3D 1 && maxobj_per_zspage =3D=3D 1 */ static void SetZsHugePage(struct zspage *zspage) { --=20 2.41.0 From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 60CB6C001DF for ; Thu, 13 Jul 2023 04:21:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233825AbjGMEVN (ORCPT ); Thu, 13 Jul 2023 00:21:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60948 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233605AbjGMEVA (ORCPT ); Thu, 13 Jul 2023 00:21:00 -0400 Received: from mail-pf1-x42e.google.com (mail-pf1-x42e.google.com [IPv6:2607:f8b0:4864:20::42e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2521219BE for ; Wed, 12 Jul 2023 21:21:00 -0700 (PDT) Received: by mail-pf1-x42e.google.com with SMTP id d2e1a72fcca58-668704a5b5bso331888b3a.0 for ; Wed, 12 Jul 2023 21:21:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222059; x=1691814059; 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=2uyb10W8xRjD9R6Hckb+QVobZc3eb265x7Mbz+pRkDU=; b=YRSuxrIH8XKdAW0kQO3SmDGmJ+pvEqfPMHAcG7+sFafS/d+jT6N/m/StdjuFthkODl J9x6h1BvoAUJ2/0Py77CgQKA0V45/7UT3CCDyVErHqZgssLwbka39ahmK//VnFw5/Orb u0FUM5IpQcO6CKHS4DkgDUp2nPGIBzpSrAY+ckKGMG4p38UniHiXjXuVMY+sZQxK+UZx vqyB7eU1ay5ZD3cGjO/STbrR2/GjTvwsX3rqjh6UdhYbBju5LjFgBHJsB+MbMl4166hd 6hKN3Duy7Ko+5Jjf6CxkWYuosaPbu1WsOpO+6fO+x22OsbfGPNaUxGejvj3lD+1UlVTN +AFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222059; x=1691814059; 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=2uyb10W8xRjD9R6Hckb+QVobZc3eb265x7Mbz+pRkDU=; b=jQX5baY9mn96GctUux8uD+5I4G2x3DbyW/FdtCsyKmXJPoxCfigyJADsIw9uqRAAcz 52coL8yk19SuYpVbMCWbK2kkX7DwpdHd4oJKBzs8BR/RaPcb6u2Mk4Kywqdk4ape1RCZ lmWjLGhVWsStm2CQfMvmiVUQA12IGK88doJLa7RBhV2B/aZZirVHCyzceB/Psyb11p6n aqpTKMzcRtzqi1+aVwED9vnHDXfvCEghrCwmCq8/AOXP1Q8tB6Mx+q6/qA3NrIyFD3YF 2tZdA9yn+z656TZugilPglsM+FIE4sWF0VtklV4zPiTncDkq/1QnRPPlkcgbG2m3p4fO n5GA== X-Gm-Message-State: ABy/qLYXeNSXPkxr3vfHhOHVRt8giIAxB/kTNN0Zc+P0VorrUEisoYmJ dJJmYwTCbC9qL8EWgyR6jOc= X-Google-Smtp-Source: APBJJlFngfTCIZX6kEzbBCWxzo+TpDlnPYvBK4wEL/QFsnQzudRdGVDSAK30ILKKi++2X8hEX7YykA== X-Received: by 2002:a05:6a20:4291:b0:133:21c3:115e with SMTP id o17-20020a056a20429100b0013321c3115emr442265pzj.48.1689222059554; Wed, 12 Jul 2023 21:20:59 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.20.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:20:58 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 02/21] mm/zsmalloc: add utility functions for zsdesc Date: Thu, 13 Jul 2023 13:20:17 +0900 Message-ID: <20230713042037.980211-3-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Introduce basic utility functions for zsdesc to avoid directly accessing fields of struct page. More helpers will be defined later. zsdesc_page() is defined with _Generic to preserve constness. page_zsdesc() does not call compound_head() because zsdesc is always a base page. Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 2204bea4f289..11c203e79c39 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -293,6 +293,39 @@ ZSDESC_MATCH(_refcount, _refcount); #undef ZSDESC_MATCH static_assert(sizeof(struct zsdesc) <=3D sizeof(struct page)); =20 +#define zsdesc_page(zdesc) (_Generic((zdesc), \ + const struct zsdesc *: (const struct page *)zdesc, \ + struct zsdesc *: (struct page *)zdesc)) + +static inline struct zsdesc *page_zsdesc(struct page *page) +{ + return (struct zsdesc *)page; +} + +static inline unsigned long zsdesc_pfn(const struct zsdesc *zsdesc) +{ + return page_to_pfn(zsdesc_page(zsdesc)); +} + +static inline struct zsdesc *pfn_zsdesc(unsigned long pfn) +{ + return page_zsdesc(pfn_to_page(pfn)); +} + +static inline void zsdesc_get(struct zsdesc *zsdesc) +{ + struct folio *folio =3D (struct folio *)zsdesc; + + folio_get(folio); +} + +static inline void zsdesc_put(struct zsdesc *zsdesc) +{ + struct folio *folio =3D (struct folio *)zsdesc; + + folio_put(folio); +} + /* huge object: pages_per_zspage =3D=3D 1 && maxobj_per_zspage =3D=3D 1 */ static void SetZsHugePage(struct zspage *zspage) { --=20 2.41.0 From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D8482C001DF for ; Thu, 13 Jul 2023 04:21:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233831AbjGMEVS (ORCPT ); Thu, 13 Jul 2023 00:21:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60974 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233719AbjGMEVE (ORCPT ); Thu, 13 Jul 2023 00:21:04 -0400 Received: from mail-pf1-x434.google.com (mail-pf1-x434.google.com [IPv6:2607:f8b0:4864:20::434]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 179AE210A for ; Wed, 12 Jul 2023 21:21:03 -0700 (PDT) Received: by mail-pf1-x434.google.com with SMTP id d2e1a72fcca58-66c729f5618so324046b3a.1 for ; Wed, 12 Jul 2023 21:21:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222062; x=1691814062; 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=Fp6PZAIRFvwp6nXKJbH8kpHOkBbqGND+2E3aTyuENRc=; b=beHvFnUzX8qISZCLCnJid1ohVYLhkgcwmfXqTrvDAtYU+uy5Ztlr+SfvlDI6cKoJtE iskvrecQA0bZlZDRwbgVQ/g0J8Ut1SML5FIOq+0eqy2Ai4g2gpA5Ox886og6Bj8JqBFi sjI/ULVjLyBzR4xJcQL4vrDSQDjpBAQYJ4PhWsz/JEJdXAkSZMREN/u8JelZdypkyQyP 4GH04a4CugoAB2zIdF8O/gijVzuTdNJit+bFzqRN5hyYOdK9hIryfuvUludPF6xLzVrV nGDS9XIWOlCAvE5/ZdkX/fU2CE9ooGRBeoqkeqU/LhoRvMHmj81pl+Q1+6Hl9v4bRPFW WFYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222062; x=1691814062; 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=Fp6PZAIRFvwp6nXKJbH8kpHOkBbqGND+2E3aTyuENRc=; b=JYY8QvCw6Bce4+WMKTw+1YHaTpKdnIOc2Sp+UDcFeUSnjqkGeSz2W7J7oCSL9AukiA AWk5nv/GJPcbx3KI0vSPngWXZWdwBTH89I+GQ9Kut6WI34/PRPTPWP/dNXRFjr9uAtUT 2+9EG6bfLOqpe+tn3XjOHVYqJry35uAuMfcnxVthfokKFWGilIjzjOoCrHMMZckQU7bH rVe9BRcBQyfDU6zUwEX2dEPIgQ0vJNthOIuVtFN7OAqYQvCDtQzLg2Y/2G+Fc7eUIFTd AcqvTRXybBL08dB6aXFxf+qXIy+hzHeAg/iGcytMyEvFBANdgb1C440FSe+2IPn+WU19 YZuA== X-Gm-Message-State: ABy/qLYq99XTeRx4JbvqE6Eci+/MZAseKye88KtSWXbooGTbe4dQlTl7 5N7Tx7u+3/B8q7JfNlAcz0U= X-Google-Smtp-Source: APBJJlEdRUxFFFRpu7uJbEt4B2QPnF0T3XjBRUtDhiNmPbHRgO1w2Gtj/dHOyvp3B96gwDB8K4OapQ== X-Received: by 2002:a05:6a00:150a:b0:680:2b80:8479 with SMTP id q10-20020a056a00150a00b006802b808479mr876923pfu.19.1689222062432; Wed, 12 Jul 2023 21:21:02 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.20.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:21:01 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 03/21] mm/zsmalloc: replace first_page to first_zsdesc in struct zspage Date: Thu, 13 Jul 2023 13:20:18 +0900 Message-ID: <20230713042037.980211-4-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Replace first_page to first_zsdesc in struct zspage for further conversion. Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 11c203e79c39..8f7d9b79d849 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -234,7 +234,7 @@ struct zspage { }; unsigned int inuse; unsigned int freeobj; - struct page *first_page; + struct zsdesc *first_zsdesc; struct list_head list; /* fullness list */ struct zs_pool *pool; rwlock_t lock; @@ -512,7 +512,7 @@ static inline void mod_zspage_inuse(struct zspage *zspa= ge, int val) =20 static inline struct page *get_first_page(struct zspage *zspage) { - struct page *first_page =3D zspage->first_page; + struct page *first_page =3D zsdesc_page(zspage->first_zsdesc); =20 VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); return first_page; @@ -1024,7 +1024,7 @@ static void create_page_chain(struct size_class *clas= s, struct zspage *zspage, set_page_private(page, (unsigned long)zspage); page->index =3D 0; if (i =3D=3D 0) { - zspage->first_page =3D page; + zspage->first_zsdesc =3D page_zsdesc(page); SetPagePrivate(page); if (unlikely(class->objs_per_zspage =3D=3D 1 && class->pages_per_zspage =3D=3D 1)) @@ -1398,7 +1398,7 @@ static unsigned long obj_malloc(struct zs_pool *pool, link->handle =3D handle; else /* record handle to page->index */ - zspage->first_page->index =3D handle; + zspage->first_zsdesc->handle =3D handle; =20 kunmap_atomic(vaddr); mod_zspage_inuse(zspage, 1); --=20 2.41.0 From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5321EC001DF for ; Thu, 13 Jul 2023 04:21:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233839AbjGMEV1 (ORCPT ); Thu, 13 Jul 2023 00:21:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32806 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233813AbjGMEVJ (ORCPT ); Thu, 13 Jul 2023 00:21:09 -0400 Received: from mail-oi1-x22a.google.com (mail-oi1-x22a.google.com [IPv6:2607:f8b0:4864:20::22a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 653512683 for ; Wed, 12 Jul 2023 21:21:06 -0700 (PDT) Received: by mail-oi1-x22a.google.com with SMTP id 5614622812f47-3a425ef874dso297862b6e.0 for ; Wed, 12 Jul 2023 21:21:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222065; x=1691814065; 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=jcE2YmIW31bFO7IyE1TbOouyqUx4815Ufga9qggKlmE=; b=mYhOCoF5+AgtodxdPh9hQADQfzcGGFdPKxTugVcu2Qs0e1yVg+0UkvCcRf/X3w/74s Kyz6ifXK6zTs2BFM00E8ADWIYlLRhhPSNmHbMUUZlBj8VJNziwCjHk5q1W5JoGbozIkM qI8cO56rtKm63AxeFVfIB07C8I5KBI7+H5+WeFGDdYzbEUHEYPgAoPksrpjWn3Ox9zJz BMPH5pv3QTN4UVgD9QNi87H5RnXLR/nsxOoAuPs2SRz6Ey0ejYmkLYeUBccuiFTR0Oqh q7//HZplNbzxfarT1/+PAPdpS1Cq6urRz8/Ed7OiPdOVBDo5/1Ub5DlQn/PxPVvuBZ4M +pKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222065; x=1691814065; 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=jcE2YmIW31bFO7IyE1TbOouyqUx4815Ufga9qggKlmE=; b=HPJfEIsoD4pf9fW+JwjfBNB5tzd/b0JqD8/MGXEEn5ozwNcb9fEKasdaNyogN58CZh 45qOqWCGjsvvbN92+o/79KwNLYrtPfaCGyLwdKy+IUYP2V7MSq9N1Fmn3jcKYVXMVKSD 9Yzj1k60MnAAAQ+TafM/6AAT51+XY9mRdgypfU0U5CtiyJOJMJ7URbSUvWDtI9M+yIlI /YwHhageQnP6IX4nEwm7atGz7XeTose3LF/EPWfgt3Tanuj6wp6UWfgv4R9CwMmDppF+ +eMyh4EPkdXT4Xt6NZ4fps5w9eg674VhvOA/gNTIXq3zlTASVLO9YlhQ83RFcXET7R+h D3sQ== X-Gm-Message-State: ABy/qLYubrYZ9r8l7nLeBLBBe8+E/rjYN0OJoQgYnFjALpId1P2kQsBc S1qgs0c7IKAcHuuqUfqDm/4= X-Google-Smtp-Source: APBJJlHn+GjEfwkeFf3et/qnGrOvXvkqgNMp79oM2A97NPAz4SPID9PPqYp6PTsedEbPVJXbuLD/Bg== X-Received: by 2002:a05:6808:1286:b0:3a3:baf8:5b8a with SMTP id a6-20020a056808128600b003a3baf85b8amr908456oiw.13.1689222065353; Wed, 12 Jul 2023 21:21:05 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.21.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:21:04 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 04/21] mm/zsmalloc: add alternatives of frequently used helper functions Date: Thu, 13 Jul 2023 13:20:19 +0900 Message-ID: <20230713042037.980211-5-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" get_first_page(), get_next_page(), is_first_page() are frequently used throughout zsmalloc code. As replacing them all at once would be hard to review, add alternative helpers and gradually replace its users to use new functions. Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 8f7d9b79d849..f44a2d8a36b5 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -498,6 +498,11 @@ static __maybe_unused int is_first_page(struct page *p= age) return PagePrivate(page); } =20 +static __maybe_unused int is_first_zsdesc(struct zsdesc *zsdesc) +{ + return PagePrivate(zsdesc_page(zsdesc)); +} + /* Protected by pool->lock */ static inline int get_zspage_inuse(struct zspage *zspage) { @@ -510,7 +515,7 @@ static inline void mod_zspage_inuse(struct zspage *zspa= ge, int val) zspage->inuse +=3D val; } =20 -static inline struct page *get_first_page(struct zspage *zspage) +static __maybe_unused inline struct page *get_first_page(struct zspage *zs= page) { struct page *first_page =3D zsdesc_page(zspage->first_zsdesc); =20 @@ -518,6 +523,14 @@ static inline struct page *get_first_page(struct zspag= e *zspage) return first_page; } =20 +static __maybe_unused struct zsdesc *get_first_zsdesc(struct zspage *zspag= e) +{ + struct zsdesc *first_zsdesc =3D zspage->first_zsdesc; + + VM_BUG_ON_PAGE(!is_first_zsdesc(first_zsdesc), zsdesc_page(first_zsdesc)); + return first_zsdesc; +} + static inline unsigned int get_first_obj_offset(struct page *page) { return page->page_type; @@ -806,7 +819,7 @@ static struct zspage *get_zspage(struct page *page) return zspage; } =20 -static struct page *get_next_page(struct page *page) +static __maybe_unused struct page *get_next_page(struct page *page) { struct zspage *zspage =3D get_zspage(page); =20 @@ -816,6 +829,16 @@ static struct page *get_next_page(struct page *page) return (struct page *)page->index; } =20 +static __maybe_unused struct zsdesc *get_next_zsdesc(struct zsdesc *zsdesc) +{ + struct zspage *zspage =3D get_zspage(zsdesc_page(zsdesc)); + + if (unlikely(ZsHugePage(zspage))) + return NULL; + + return zsdesc->next; +} + /** * obj_to_location - get (, ) from encoded object value * @obj: the encoded object value --=20 2.41.0 From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0B342C001B0 for ; Thu, 13 Jul 2023 04:21:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233879AbjGMEVd (ORCPT ); Thu, 13 Jul 2023 00:21:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33028 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233800AbjGMEVS (ORCPT ); Thu, 13 Jul 2023 00:21:18 -0400 Received: from mail-pf1-x434.google.com (mail-pf1-x434.google.com [IPv6:2607:f8b0:4864:20::434]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E46632106 for ; Wed, 12 Jul 2023 21:21:08 -0700 (PDT) Received: by mail-pf1-x434.google.com with SMTP id d2e1a72fcca58-666ecf9a081so313494b3a.2 for ; Wed, 12 Jul 2023 21:21:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222068; x=1691814068; 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=uhaPI5HZCviIKmkdgH7KFJDdrqT6GNzpynmu4YA1d+4=; b=Jt6o06lRegWfpT6s7u556O96jLXuVWenL3j7rdCJMMEZJSxbKfdLZdvetPddoF/DHX PAMG0XVW/6owS3g4G4hGDuiYl5Weo+v61dNqznEhQrdjvfHaNR0Uz3Xhg37UAFAsNb7U ZH7JKwt8s7tvmf6jfRAoe5445IXGboDowduaXGoJduEmrtA/Gs04jyb+QhdGq2tCblsB VilcMo/Li/bBOTmGNGKEK+fobdvYvHTEEULz0+R5qEX5V9BHphgzBgL0oa3cqLS5uL+S wcdF4m7jBn35fTjxbHwyr18gTW56GA0WU5LMGze94rRKwRwLwPSLNaPW6F1EdVP1tc72 Ad2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222068; x=1691814068; 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=uhaPI5HZCviIKmkdgH7KFJDdrqT6GNzpynmu4YA1d+4=; b=EdRqp5IhNbmBu+0LOJuxkSHZkcZsPBuqw7UQEMIuFq6oezHrILPtfbO0ximUw0j+D1 qygkVLZs0pNa+D+6Ik34C35HV78YQCZmWSqGU/rrr8/Tq/5zshLrL1XthVNrkQ1Nex5f dYg1iIBj1IRfCYF/vYEMeLyl4t5hneiYfq5J6vBbto47n1TIFmaUP5rTTNVK7rudFBe4 2UJRypW+rV+tcAG+s5+RgOx4q6cO+UphEqFOk+P6I+HxKHAzy1WXviMpgUxFzL14aii2 /Zr7xTu07aVhbgIZCXx4mWTdP4denpKf5ig04rLJQc7kpIY2yvU5IplbUjhUCUfCz1C7 8rpQ== X-Gm-Message-State: ABy/qLZvpeForXm1tKnOqDIbwfACnVj7R6IeVYwc2VOmVEaCUwYXdA9f R5qli9CU8JCddrNXk6bzB2Y= X-Google-Smtp-Source: APBJJlEe7OIMuJtVjHfXHkehY78DJUMXlwp6taFHwT6PsouXRsh0IpuGtqw7vkbfdP9Ouwmze4dUZA== X-Received: by 2002:a05:6a00:1692:b0:668:6445:8931 with SMTP id k18-20020a056a00169200b0066864458931mr807724pfc.29.1689222068309; Wed, 12 Jul 2023 21:21:08 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.21.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:21:07 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 05/21] mm/zsmalloc: convert {try,}lock_zspage() to use zsdesc Date: Thu, 13 Jul 2023 13:20:20 +0900 Message-ID: <20230713042037.980211-6-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Introduce trylock_zsdesc(), unlock_zsdesc(), wait_on_zsdesc_locked() and convert trylock_zspage() and lock_zspage() to use zsdesc. Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 55 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index f44a2d8a36b5..2cce76a19a1e 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -326,6 +326,21 @@ static inline void zsdesc_put(struct zsdesc *zsdesc) folio_put(folio); } =20 +static inline int trylock_zsdesc(struct zsdesc *zsdesc) +{ + return trylock_page(zsdesc_page(zsdesc)); +} + +static inline void unlock_zsdesc(struct zsdesc *zsdesc) +{ + unlock_page(zsdesc_page(zsdesc)); +} + +static inline void wait_on_zsdesc_locked(struct zsdesc *zsdesc) +{ + wait_on_page_locked(zsdesc_page(zsdesc)); +} + /* huge object: pages_per_zspage =3D=3D 1 && maxobj_per_zspage =3D=3D 1 */ static void SetZsHugePage(struct zspage *zspage) { @@ -911,11 +926,11 @@ static void reset_page(struct page *page) =20 static int trylock_zspage(struct zspage *zspage) { - struct page *cursor, *fail; + struct zsdesc *cursor, *fail; =20 - for (cursor =3D get_first_page(zspage); cursor !=3D NULL; cursor =3D - get_next_page(cursor)) { - if (!trylock_page(cursor)) { + for (cursor =3D get_first_zsdesc(zspage); cursor !=3D NULL; cursor =3D + get_next_zsdesc(cursor)) { + if (!trylock_zsdesc(cursor)) { fail =3D cursor; goto unlock; } @@ -923,9 +938,9 @@ static int trylock_zspage(struct zspage *zspage) =20 return 1; unlock: - for (cursor =3D get_first_page(zspage); cursor !=3D fail; cursor =3D - get_next_page(cursor)) - unlock_page(cursor); + for (cursor =3D get_first_zsdesc(zspage); cursor !=3D fail; cursor =3D + get_next_zsdesc(cursor)) + unlock_zsdesc(cursor); =20 return 0; } @@ -1755,7 +1770,7 @@ static int putback_zspage(struct size_class *class, s= truct zspage *zspage) */ static void lock_zspage(struct zspage *zspage) { - struct page *curr_page, *page; + struct zsdesc *curr_zsdesc, *zsdesc; =20 /* * Pages we haven't locked yet can be migrated off the list while we're @@ -1767,24 +1782,24 @@ static void lock_zspage(struct zspage *zspage) */ while (1) { migrate_read_lock(zspage); - page =3D get_first_page(zspage); - if (trylock_page(page)) + zsdesc =3D get_first_zsdesc(zspage); + if (trylock_zsdesc(zsdesc)) break; - get_page(page); + zsdesc_get(zsdesc); migrate_read_unlock(zspage); - wait_on_page_locked(page); - put_page(page); + wait_on_zsdesc_locked(zsdesc); + zsdesc_put(zsdesc); } =20 - curr_page =3D page; - while ((page =3D get_next_page(curr_page))) { - if (trylock_page(page)) { - curr_page =3D page; + curr_zsdesc =3D zsdesc; + while ((zsdesc =3D get_next_zsdesc(curr_zsdesc))) { + if (trylock_zsdesc(zsdesc)) { + curr_zsdesc =3D zsdesc; } else { - get_page(page); + zsdesc_get(zsdesc); migrate_read_unlock(zspage); - wait_on_page_locked(page); - put_page(page); + wait_on_zsdesc_locked(zsdesc); + zsdesc_put(zsdesc); migrate_read_lock(zspage); } } --=20 2.41.0 From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E0475C001DD for ; Thu, 13 Jul 2023 04:21:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233881AbjGMEVi (ORCPT ); Thu, 13 Jul 2023 00:21:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33074 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233849AbjGMEVU (ORCPT ); Thu, 13 Jul 2023 00:21:20 -0400 Received: from mail-oi1-x22d.google.com (mail-oi1-x22d.google.com [IPv6:2607:f8b0:4864:20::22d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5FC3A26A2 for ; Wed, 12 Jul 2023 21:21:12 -0700 (PDT) Received: by mail-oi1-x22d.google.com with SMTP id 5614622812f47-3a1ebb85f99so321256b6e.2 for ; Wed, 12 Jul 2023 21:21:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222071; x=1691814071; 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=ngawLjUhlg0gVz5P0h4QP2p0Jiq//HK+SFvWsbVxntw=; b=miEYIZPddB/Lztm+8sp7zafciwuYzQBUl4vbQGbauqTEcHNn1gEDiWgi3y0NgODIfO KRfT+s1Unu3fijwGFRA6MVzyG+GUTrtnozO/iijdLuLlverMdvhbbTy4KwFmhEM5G9I5 6H4sT2yoo+nLtShyHPAgT2TLEkXkcqjkOYo5zSs8l+iYRqrwf6iFewKlwX+tu7MIZZUj uKbOvKvpFprsduIHAWTp/zGNXtqmvpQcnFs8GoLU8Q5hhYMS/VT3SNJrpvkAwpLFA2l4 hZJN2f5WCfZZdlO9fOSko+tMYv92fmCpNUo+GPxTMo2dQXPG6ljyZ6MIxVd4qMqUDoys U4PA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222071; x=1691814071; 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=ngawLjUhlg0gVz5P0h4QP2p0Jiq//HK+SFvWsbVxntw=; b=JBQhIF7P5Yy8NTovYIxAOMsGRjSwQgttVPH9UPpekzctp30mamhaw/fDvJDKMWPlgr jmQfqkeC1F/ltGe89D9rlWsImOATjjl0No0fJ0bG+aDGwq+PRJxnP5xfAMMsamcHXvlS ppmLRVYYhca2HJFAehUReXCYUji2wNjHDWQAn4FQHnP7337g3jHH5MQAZAQF2XbPO+AE vy7e1BwJaxSxjgnpxbnuFiKhBIo/r6Y5B5/oGDRU7L1myUVQFtDrFgI+UuXuaepLGJ9B zW3DcAjwjsEy8QnCh+Jw8esM8yRXR2C6u/g7uMBzpNYfFB1dzCFABxkX3fruie+NpwGT ag+w== X-Gm-Message-State: ABy/qLbEZGYjBdVslq+khel3AfymRVo975Cr4A935wpMRbgtJyLlm3Hu ql+5wuwfRyTntLZ0SlEI/HQ= X-Google-Smtp-Source: APBJJlGDVBDJqg7HpEytgDXKLoXjRZHg1FxttzevCADnVlsFukqWkseGrbnLv60ArIu2kkBe91QxcQ== X-Received: by 2002:a54:4d85:0:b0:39e:940c:2a58 with SMTP id y5-20020a544d85000000b0039e940c2a58mr682388oix.5.1689222071167; Wed, 12 Jul 2023 21:21:11 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.21.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:21:10 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 06/21] mm/zsmalloc: convert __zs_{map,unmap}_object() to use zsdesc Date: Thu, 13 Jul 2023 13:20:21 +0900 Message-ID: <20230713042037.980211-7-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" These two functions take array of pointer to struct page. Introduce zsdesc_kmap_atomic() and make them take array of pointer to zsdesc instead of page. Add silly type casting when calling them which. Casting will be removed in the next patch. Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 2cce76a19a1e..4c0563fce3d0 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -341,6 +341,11 @@ static inline void wait_on_zsdesc_locked(struct zsdesc= *zsdesc) wait_on_page_locked(zsdesc_page(zsdesc)); } =20 +static inline void *zsdesc_kmap_atomic(struct zsdesc *zsdesc) +{ + return kmap_atomic(zsdesc_page(zsdesc)); +} + /* huge object: pages_per_zspage =3D=3D 1 && maxobj_per_zspage =3D=3D 1 */ static void SetZsHugePage(struct zspage *zspage) { @@ -1151,7 +1156,7 @@ static inline void __zs_cpu_down(struct mapping_area = *area) } =20 static void *__zs_map_object(struct mapping_area *area, - struct page *pages[2], int off, int size) + struct zsdesc *zsdescs[2], int off, int size) { int sizes[2]; void *addr; @@ -1168,10 +1173,10 @@ static void *__zs_map_object(struct mapping_area *a= rea, sizes[1] =3D size - sizes[0]; =20 /* copy object to per-cpu buffer */ - addr =3D kmap_atomic(pages[0]); + addr =3D zsdesc_kmap_atomic(zsdescs[0]); memcpy(buf, addr + off, sizes[0]); kunmap_atomic(addr); - addr =3D kmap_atomic(pages[1]); + addr =3D zsdesc_kmap_atomic(zsdescs[1]); memcpy(buf + sizes[0], addr, sizes[1]); kunmap_atomic(addr); out: @@ -1179,7 +1184,7 @@ static void *__zs_map_object(struct mapping_area *are= a, } =20 static void __zs_unmap_object(struct mapping_area *area, - struct page *pages[2], int off, int size) + struct zsdesc *zsdescs[2], int off, int size) { int sizes[2]; void *addr; @@ -1198,10 +1203,10 @@ static void __zs_unmap_object(struct mapping_area *= area, sizes[1] =3D size - sizes[0]; =20 /* copy per-cpu buffer to object */ - addr =3D kmap_atomic(pages[0]); + addr =3D zsdesc_kmap_atomic(zsdescs[0]); memcpy(addr + off, buf, sizes[0]); kunmap_atomic(addr); - addr =3D kmap_atomic(pages[1]); + addr =3D zsdesc_kmap_atomic(zsdescs[1]); memcpy(addr, buf + sizes[0], sizes[1]); kunmap_atomic(addr); =20 @@ -1342,7 +1347,7 @@ void *zs_map_object(struct zs_pool *pool, unsigned lo= ng handle, pages[1] =3D get_next_page(page); BUG_ON(!pages[1]); =20 - ret =3D __zs_map_object(area, pages, off, class->size); + ret =3D __zs_map_object(area, (struct zsdesc **)pages, off, class->size); out: if (likely(!ZsHugePage(zspage))) ret +=3D ZS_HANDLE_SIZE; @@ -1377,7 +1382,7 @@ void zs_unmap_object(struct zs_pool *pool, unsigned l= ong handle) pages[1] =3D get_next_page(page); BUG_ON(!pages[1]); =20 - __zs_unmap_object(area, pages, off, class->size); + __zs_unmap_object(area, (struct zsdesc **)pages, off, class->size); } local_unlock(&zs_map_area.lock); =20 --=20 2.41.0 From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A1217C001DF for ; Thu, 13 Jul 2023 04:21:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233833AbjGMEVy (ORCPT ); Thu, 13 Jul 2023 00:21:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33048 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233787AbjGMEVX (ORCPT ); Thu, 13 Jul 2023 00:21:23 -0400 Received: from mail-pf1-x42a.google.com (mail-pf1-x42a.google.com [IPv6:2607:f8b0:4864:20::42a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0200D26B9 for ; Wed, 12 Jul 2023 21:21:14 -0700 (PDT) Received: by mail-pf1-x42a.google.com with SMTP id d2e1a72fcca58-68336d06620so307344b3a.1 for ; Wed, 12 Jul 2023 21:21:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222074; x=1691814074; 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=T5CtvWZNM/arT1DeaLF8JN33bJjE1wRpWQ+2TM1opec=; b=i+W/NFohhvOCvKpcJMP9qgQqqgnP2EXS+qk6DRkcwUUbYvBlyO+0QzIrnCeCsGQzeG cYvSyZ09QP9qbQQXIlMXW8GJC9lCe0pdff6yWizEWhJGTSkLi4FfqcLNSlrIhbSp8wXZ h0fGuGyJO0H/0xTNTKH5YJCZnp3LI+99cDo9UlXjpTtxpQq0Q7rVV340Iv1F+/Q8nHSh aOTaBulsJzrhGj0kdl84YslsnY5LBVi0yVEhoS5Yq9IlgP8hnE79x8MaMNWqPTBDzDR3 70+Pn244J5aXK8AMhsA4BKwrtQ+ItypDMjw2JTBzWvaf7nbZi/QZhOpx9etOSHV+dYxI Tr7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222074; x=1691814074; 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=T5CtvWZNM/arT1DeaLF8JN33bJjE1wRpWQ+2TM1opec=; b=VmrPwYjimUPz4NZYcbbX1V14pDoNxPd7Hh+JCorHUKOIe2bJagyac/CJlfCs5sMAOq 65mtoxP9xrM7jNbMDg+kcPg+bbs1JlYacFYhhZ7Id2D6wzwYSvTHNqqJ08t91eWxqq7q 40DdiqUgOULJaBDjK9UTdLsPw31URMqjGqqzrbhDioJYKbfVaoeIPRY1mDo8XTYY0B9P MKhwosEIxdQzmdSL0LsXaxdBSdWUItX39WrtaUSQqSqSnatBk/UGBVlI+4HaKnUiOSh8 XIWU9kbH3fhYlQJTEdexpvOh9B2YdDfiw5LBD3VAgk3Z6WA9HoQvlYrrQ1MffZczN8pM 3faA== X-Gm-Message-State: ABy/qLZMOZGfW4RlAt1uuTxMw9PnyFD3ttRwaXPjV2OFXDt5wHzyx+zu UZSBNUkguaH3lSXaM+mkDcY= X-Google-Smtp-Source: APBJJlHjxNeh9XNM9Xg49rVHdiHhgRhHwEZjBVTmC7d2ywHYqshe0HtbWG6bkIYM6hqzf+06oaFONQ== X-Received: by 2002:a05:6a00:851:b0:668:9fb6:b311 with SMTP id q17-20020a056a00085100b006689fb6b311mr723443pfk.32.1689222074040; Wed, 12 Jul 2023 21:21:14 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.21.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:21:13 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 07/21] mm/zsmalloc: convert obj_to_location() and its users to use zsdesc Date: Thu, 13 Jul 2023 13:20:22 +0900 Message-ID: <20230713042037.980211-8-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Convert obj_to_location() to take zsdesc and also convert its users to use zsdesc. Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 75 ++++++++++++++++++++++++++------------------------- 1 file changed, 38 insertions(+), 37 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 4c0563fce3d0..be9762a49237 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -860,16 +860,16 @@ static __maybe_unused struct zsdesc *get_next_zsdesc(= struct zsdesc *zsdesc) } =20 /** - * obj_to_location - get (, ) from encoded object value + * obj_to_location - get (, ) from encoded object value * @obj: the encoded object value - * @page: page object resides in zspage + * @zsdesc: zsdesc object resides in zspage * @obj_idx: object index */ -static void obj_to_location(unsigned long obj, struct page **page, +static void obj_to_location(unsigned long obj, struct zsdesc **zsdesc, unsigned int *obj_idx) { obj >>=3D OBJ_TAG_BITS; - *page =3D pfn_to_page(obj >> OBJ_INDEX_BITS); + *zsdesc =3D pfn_zsdesc(obj >> OBJ_INDEX_BITS); *obj_idx =3D (obj & OBJ_INDEX_MASK); } =20 @@ -1298,13 +1298,13 @@ void *zs_map_object(struct zs_pool *pool, unsigned = long handle, enum zs_mapmode mm) { struct zspage *zspage; - struct page *page; + struct zsdesc *zsdesc; unsigned long obj, off; unsigned int obj_idx; =20 struct size_class *class; struct mapping_area *area; - struct page *pages[2]; + struct zsdesc *zsdescs[2]; void *ret; =20 /* @@ -1317,8 +1317,8 @@ void *zs_map_object(struct zs_pool *pool, unsigned lo= ng handle, /* It guarantees it can get zspage from handle safely */ spin_lock(&pool->lock); obj =3D handle_to_obj(handle); - obj_to_location(obj, &page, &obj_idx); - zspage =3D get_zspage(page); + obj_to_location(obj, &zsdesc, &obj_idx); + zspage =3D get_zspage(zsdesc_page(zsdesc)); =20 /* * migration cannot move any zpages in this zspage. Here, pool->lock @@ -1337,17 +1337,17 @@ void *zs_map_object(struct zs_pool *pool, unsigned = long handle, area->vm_mm =3D mm; if (off + class->size <=3D PAGE_SIZE) { /* this object is contained entirely within a page */ - area->vm_addr =3D kmap_atomic(page); + area->vm_addr =3D zsdesc_kmap_atomic(zsdesc); ret =3D area->vm_addr + off; goto out; } =20 /* this object spans two pages */ - pages[0] =3D page; - pages[1] =3D get_next_page(page); - BUG_ON(!pages[1]); + zsdescs[0] =3D zsdesc; + zsdescs[1] =3D get_next_zsdesc(zsdesc); + BUG_ON(!zsdescs[1]); =20 - ret =3D __zs_map_object(area, (struct zsdesc **)pages, off, class->size); + ret =3D __zs_map_object(area, zsdescs, off, class->size); out: if (likely(!ZsHugePage(zspage))) ret +=3D ZS_HANDLE_SIZE; @@ -1359,7 +1359,7 @@ EXPORT_SYMBOL_GPL(zs_map_object); void zs_unmap_object(struct zs_pool *pool, unsigned long handle) { struct zspage *zspage; - struct page *page; + struct zsdesc *zsdesc; unsigned long obj, off; unsigned int obj_idx; =20 @@ -1367,8 +1367,8 @@ void zs_unmap_object(struct zs_pool *pool, unsigned l= ong handle) struct mapping_area *area; =20 obj =3D handle_to_obj(handle); - obj_to_location(obj, &page, &obj_idx); - zspage =3D get_zspage(page); + obj_to_location(obj, &zsdesc, &obj_idx); + zspage =3D get_zspage(zsdesc_page(zsdesc)); class =3D zspage_class(pool, zspage); off =3D offset_in_page(class->size * obj_idx); =20 @@ -1376,13 +1376,13 @@ void zs_unmap_object(struct zs_pool *pool, unsigned= long handle) if (off + class->size <=3D PAGE_SIZE) kunmap_atomic(area->vm_addr); else { - struct page *pages[2]; + struct zsdesc *zsdescs[2]; =20 - pages[0] =3D page; - pages[1] =3D get_next_page(page); - BUG_ON(!pages[1]); + zsdescs[0] =3D zsdesc; + zsdescs[1] =3D get_next_zsdesc(zsdesc); + BUG_ON(!zsdescs[1]); =20 - __zs_unmap_object(area, (struct zsdesc **)pages, off, class->size); + __zs_unmap_object(area, zsdescs, off, class->size); } local_unlock(&zs_map_area.lock); =20 @@ -1524,23 +1524,24 @@ static void obj_free(int class_size, unsigned long = obj) { struct link_free *link; struct zspage *zspage; - struct page *f_page; + struct zsdesc *f_zsdesc; unsigned long f_offset; unsigned int f_objidx; void *vaddr; =20 - obj_to_location(obj, &f_page, &f_objidx); + + obj_to_location(obj, &f_zsdesc, &f_objidx); f_offset =3D offset_in_page(class_size * f_objidx); - zspage =3D get_zspage(f_page); + zspage =3D get_zspage(zsdesc_page(f_zsdesc)); =20 - vaddr =3D kmap_atomic(f_page); + vaddr =3D zsdesc_kmap_atomic(f_zsdesc); link =3D (struct link_free *)(vaddr + f_offset); =20 /* Insert this object in containing zspage's freelist */ if (likely(!ZsHugePage(zspage))) link->next =3D get_freeobj(zspage) << OBJ_TAG_BITS; else - f_page->index =3D 0; + f_zsdesc->next =3D NULL; set_freeobj(zspage, f_objidx); =20 kunmap_atomic(vaddr); @@ -1583,7 +1584,7 @@ EXPORT_SYMBOL_GPL(zs_free); static void zs_object_copy(struct size_class *class, unsigned long dst, unsigned long src) { - struct page *s_page, *d_page; + struct zsdesc *s_zsdesc, *d_zsdesc; unsigned int s_objidx, d_objidx; unsigned long s_off, d_off; void *s_addr, *d_addr; @@ -1592,8 +1593,8 @@ static void zs_object_copy(struct size_class *class, = unsigned long dst, =20 s_size =3D d_size =3D class->size; =20 - obj_to_location(src, &s_page, &s_objidx); - obj_to_location(dst, &d_page, &d_objidx); + obj_to_location(src, &s_zsdesc, &s_objidx); + obj_to_location(dst, &d_zsdesc, &d_objidx); =20 s_off =3D offset_in_page(class->size * s_objidx); d_off =3D offset_in_page(class->size * d_objidx); @@ -1604,8 +1605,8 @@ static void zs_object_copy(struct size_class *class, = unsigned long dst, if (d_off + class->size > PAGE_SIZE) d_size =3D PAGE_SIZE - d_off; =20 - s_addr =3D kmap_atomic(s_page); - d_addr =3D kmap_atomic(d_page); + s_addr =3D zsdesc_kmap_atomic(s_zsdesc); + d_addr =3D zsdesc_kmap_atomic(d_zsdesc); =20 while (1) { size =3D min(s_size, d_size); @@ -1630,17 +1631,17 @@ static void zs_object_copy(struct size_class *class= , unsigned long dst, if (s_off >=3D PAGE_SIZE) { kunmap_atomic(d_addr); kunmap_atomic(s_addr); - s_page =3D get_next_page(s_page); - s_addr =3D kmap_atomic(s_page); - d_addr =3D kmap_atomic(d_page); + s_zsdesc =3D get_next_zsdesc(s_zsdesc); + s_addr =3D zsdesc_kmap_atomic(s_zsdesc); + d_addr =3D zsdesc_kmap_atomic(d_zsdesc); s_size =3D class->size - written; s_off =3D 0; } =20 if (d_off >=3D PAGE_SIZE) { kunmap_atomic(d_addr); - d_page =3D get_next_page(d_page); - d_addr =3D kmap_atomic(d_page); + d_zsdesc =3D get_next_zsdesc(d_zsdesc); + d_addr =3D zsdesc_kmap_atomic(d_zsdesc); d_size =3D class->size - written; d_off =3D 0; } @@ -1904,7 +1905,7 @@ static int zs_page_migrate(struct page *newpage, stru= ct page *page, struct zs_pool *pool; struct size_class *class; struct zspage *zspage; - struct page *dummy; + struct zsdesc *dummy; void *s_addr, *d_addr, *addr; unsigned int offset; unsigned long handle; --=20 2.41.0 From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3ED16EB64DD for ; Thu, 13 Jul 2023 04:22:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233843AbjGMEWA (ORCPT ); Thu, 13 Jul 2023 00:22:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32806 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233838AbjGMEV1 (ORCPT ); Thu, 13 Jul 2023 00:21:27 -0400 Received: from mail-oi1-x22c.google.com (mail-oi1-x22c.google.com [IPv6:2607:f8b0:4864:20::22c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EC914270F for ; Wed, 12 Jul 2023 21:21:17 -0700 (PDT) Received: by mail-oi1-x22c.google.com with SMTP id 5614622812f47-3a04e5baffcso281647b6e.3 for ; Wed, 12 Jul 2023 21:21:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222077; x=1691814077; 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=x4zzHPL0k6H0MdOKWy9H+XqQmDxwRKjupee59FsBT9w=; b=LBEyRpU8G6PNHITLYWQWY9IyEPJyBkyQ5+FvSpkPn/XDu4Dao59DBpPH/zWMmJUshw lq0kdCLAyTLvXPRb/y+83fvqbRcDI/W+LuQaPuNH3C+pY8AU4jRsRBWwzik8OP0E5MYJ PLiAqFM/MrZKLDfuQYnYD93VG+rfaatGql8SPpIviN7wELQguFKteyX1AeorHVMmxNPn Dez/e+bAAstVLLoChOoqn9Uzy/cGstHq6rZ1lRNBHeKGx45FkUpllKlYAJDdihR1tDxk aA2G7wm5jd0vkB34MMv+IA+CCV9qlxehsMStgJw+N7ZnVOnzXTdoq5hxDAEmnVkUZ8Pj TUKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222077; x=1691814077; 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=x4zzHPL0k6H0MdOKWy9H+XqQmDxwRKjupee59FsBT9w=; b=acAnTfycF/NEKusufq/KfqC6ZQfluAr0IXcKttuukiDjU5+0V49nSZfRVsVCiSTWcq zmkt23YUnd2BWXU6sPfFkKPGrDHUA48cv8FDMEY0ZsK9IORRHvnfVA8F4RIqVfEAUVHE o+CpQsqPULY+ssB/gNz4EAsav4fU14bfj+hHNRr21F24DJCe0x4RovzzwIbDJ8oCTLhT rZRQHPOv4v2hC1THlb4ztjPR5Ue/N1udpCWaizUk7U47V1e6gesFsvY57CuhJkTWyzWZ fvyG3ki/CVo+mtFQjis5/TOuyMd4bvCLGizOxMWs0+qFgv1A0DjhK1cWEnDfS+eGFtD/ 9AfQ== X-Gm-Message-State: ABy/qLaRLGSyRO7a+2CQ66JYqKxKnMMzNnONbMIoj2xZtUiS0W/0wIL+ zzebKKFCpC2e+2G3DRC9LFaCU+BtouzhG+5cji1YZA== X-Google-Smtp-Source: APBJJlFywht9zcExknT1dtSzacVpV7iePijCw8nKXr7IhX52uQwv585dT1T9ycEkrhz/WrX75xHfuw== X-Received: by 2002:a05:6808:573:b0:3a3:6536:dd89 with SMTP id j19-20020a056808057300b003a36536dd89mr525184oig.49.1689222076949; Wed, 12 Jul 2023 21:21:16 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.21.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:21:16 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 08/21] mm/zsmalloc: convert obj_malloc() to use zsdesc Date: Thu, 13 Jul 2023 13:20:23 +0900 Message-ID: <20230713042037.980211-9-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index be9762a49237..06227da86afc 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -1412,12 +1412,12 @@ EXPORT_SYMBOL_GPL(zs_huge_class_size); static unsigned long obj_malloc(struct zs_pool *pool, struct zspage *zspage, unsigned long handle) { - int i, nr_page, offset; + int i, nr_zsdesc, offset; unsigned long obj; struct link_free *link; struct size_class *class; =20 - struct page *m_page; + struct zsdesc *m_zsdesc; unsigned long m_offset; void *vaddr; =20 @@ -1426,14 +1426,14 @@ static unsigned long obj_malloc(struct zs_pool *poo= l, obj =3D get_freeobj(zspage); =20 offset =3D obj * class->size; - nr_page =3D offset >> PAGE_SHIFT; + nr_zsdesc =3D offset >> PAGE_SHIFT; m_offset =3D offset_in_page(offset); - m_page =3D get_first_page(zspage); + m_zsdesc =3D get_first_zsdesc(zspage); =20 - for (i =3D 0; i < nr_page; i++) - m_page =3D get_next_page(m_page); + for (i =3D 0; i < nr_zsdesc; i++) + m_zsdesc =3D get_next_zsdesc(m_zsdesc); =20 - vaddr =3D kmap_atomic(m_page); + vaddr =3D zsdesc_kmap_atomic(m_zsdesc); link =3D (struct link_free *)vaddr + m_offset / sizeof(*link); set_freeobj(zspage, link->next >> OBJ_TAG_BITS); if (likely(!ZsHugePage(zspage))) @@ -1446,7 +1446,7 @@ static unsigned long obj_malloc(struct zs_pool *pool, kunmap_atomic(vaddr); mod_zspage_inuse(zspage, 1); =20 - obj =3D location_to_obj(m_page, obj); + obj =3D location_to_obj(zsdesc_page(m_zsdesc), obj); =20 return obj; } --=20 2.41.0 From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0DE5DEB64DD for ; Thu, 13 Jul 2023 04:22:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233856AbjGMEWL (ORCPT ); Thu, 13 Jul 2023 00:22:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33282 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233871AbjGMEVa (ORCPT ); Thu, 13 Jul 2023 00:21:30 -0400 Received: from mail-pf1-x42c.google.com (mail-pf1-x42c.google.com [IPv6:2607:f8b0:4864:20::42c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A6519212D for ; Wed, 12 Jul 2023 21:21:20 -0700 (PDT) Received: by mail-pf1-x42c.google.com with SMTP id d2e1a72fcca58-666eb03457cso177677b3a.1 for ; Wed, 12 Jul 2023 21:21:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222080; x=1691814080; 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=LP5xQ6efjwHS47Oxl1IdTrKCp1PjMTJw03NOJIq6Awg=; b=lf7AZa8eID+bpbDGYm/7QEvzwEHh6v4zg3kNCWj8c5QyXrfMVbJVNMyjrKhdjmIr6t n+bP+RtxPOH6barvlyqo1EADq8+88sVBaIXeOtY8d4CbOu4dvt5MEfQrfWMNcwou+DGu BXBA5OPPHaMvCSejIv4nOX2PVYomkk7yshU0mCGwH8csmbEDebanQEvkyDqaTeKh7PmL WB1wJ275RzFYYecOIfu9U+tkcobqAn9P1hmhpJT+SsJQ0oOKgsbBJwoL5Ar6zPV5RJYh 9iaCciIY2AOdQZIpIVAH1JrqhDPoAjY80UBAmlXDDID8R4efwMaF9T5xCpseUc46O13L rxjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222080; x=1691814080; 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=LP5xQ6efjwHS47Oxl1IdTrKCp1PjMTJw03NOJIq6Awg=; b=F5S1T2HZd2DoE5kFYgYJjnis0BR6yHdUt///BtNYKOi1qKxBBj/fj4nbZGu6c9Amsi dhYa6UemmtElfDLK4jungKMxkaAVoA7qdv16biXoKNXy0sEBki5mM93oR11nowjWUKbG RLHkx8r16tIc3WBPjZpYcRlGJfY5qndmFTrX1Sp8LO/jymJeucA1HaSgb9E9IxfrL/wu kyKr0oPnGTdug0bRwT/17YxcrHAIlG/yhF+wA2Qse0YzPohh2nLgCO1TF9d1SBZshM5J 4CLcmnCm79wY39WBe59em1PPZ4ioAJkvJ3CeVz5walnvWKlF5GtIcDcgKmDeSawIx2jJ XkNQ== X-Gm-Message-State: ABy/qLa8D+6YlHXFb/DWwa40/y4bAwQecBhbUEYFe1LSTFsgl+klvQsF pbRO2mJEhGjZeYSA3Xq6eDI= X-Google-Smtp-Source: APBJJlE3EDMrVhGu2+w99ghcjkXTfEgbRvc6vMguhTPtHAU43UkedDKKOy9zY8oR+2dKf2q4n7r4QQ== X-Received: by 2002:a05:6a00:2401:b0:666:ba76:eef5 with SMTP id z1-20020a056a00240100b00666ba76eef5mr364274pfh.8.1689222079876; Wed, 12 Jul 2023 21:21:19 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.21.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:21:19 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 09/21] mm/zsmalloc: convert create_page_chain() and its user to use zsdesc Date: Thu, 13 Jul 2023 13:20:24 +0900 Message-ID: <20230713042037.980211-10-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Introduce a few helper functions for conversion. Convert create_page_chain() and its user replace_sub_page() to use zsdesc. Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 120 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 81 insertions(+), 39 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 06227da86afc..48bfdbbe3b1e 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -346,6 +346,48 @@ static inline void *zsdesc_kmap_atomic(struct zsdesc *= zsdesc) return kmap_atomic(zsdesc_page(zsdesc)); } =20 +static inline void zsdesc_set_zspage(struct zsdesc *zsdesc, + struct zspage *zspage) +{ + zsdesc->zspage =3D zspage; +} + +static inline void zsdesc_set_first(struct zsdesc *zsdesc) +{ + SetPagePrivate(zsdesc_page(zsdesc)); +} + +static const struct movable_operations zsmalloc_mops; + +static inline void zsdesc_set_movable(struct zsdesc *zsdesc) +{ + __SetPageMovable(zsdesc_page(zsdesc), &zsmalloc_mops); +} + +static inline void zsdesc_inc_zone_page_state(struct zsdesc *zsdesc) +{ + inc_zone_page_state(zsdesc_page(zsdesc), NR_ZSPAGES); +} + +static inline void zsdesc_dec_zone_page_state(struct zsdesc *zsdesc) +{ + dec_zone_page_state(zsdesc_page(zsdesc), NR_ZSPAGES); +} + +static inline struct zsdesc *alloc_zsdesc(gfp_t gfp) +{ + struct page *page =3D alloc_page(gfp); + + return page_zsdesc(page); +} + +static inline void free_zsdesc(struct zsdesc *zsdesc) +{ + struct page *page =3D zsdesc_page(zsdesc); + + __free_page(page); +} + /* huge object: pages_per_zspage =3D=3D 1 && maxobj_per_zspage =3D=3D 1 */ static void SetZsHugePage(struct zspage *zspage) { @@ -1047,35 +1089,35 @@ static void init_zspage(struct size_class *class, s= truct zspage *zspage) } =20 static void create_page_chain(struct size_class *class, struct zspage *zsp= age, - struct page *pages[]) + struct zsdesc *zsdescs[]) { int i; - struct page *page; - struct page *prev_page =3D NULL; - int nr_pages =3D class->pages_per_zspage; + struct zsdesc *zsdesc; + struct zsdesc *prev_zsdesc =3D NULL; + int nr_zsdescs =3D class->pages_per_zspage; =20 /* * 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 zsdesc->next + * 2. each sub-page point to zspage using zsdesc->zspage * - * we set PG_private to identify the first page (i.e. no other sub-page + * we set PG_private to identify the first zsdesc (i.e. no other zsdesc * has this flag set). */ - for (i =3D 0; i < nr_pages; i++) { - page =3D pages[i]; - set_page_private(page, (unsigned long)zspage); - page->index =3D 0; + for (i =3D 0; i < nr_zsdescs; i++) { + zsdesc =3D zsdescs[i]; + zsdesc_set_zspage(zsdesc, zspage); + zsdesc->next =3D NULL; if (i =3D=3D 0) { - zspage->first_zsdesc =3D page_zsdesc(page); - SetPagePrivate(page); + zspage->first_zsdesc =3D zsdesc; + zsdesc_set_first(zsdesc); if (unlikely(class->objs_per_zspage =3D=3D 1 && class->pages_per_zspage =3D=3D 1)) SetZsHugePage(zspage); } else { - prev_page->index =3D (unsigned long)page; + prev_zsdesc->next =3D zsdesc; } - prev_page =3D page; + prev_zsdesc =3D zsdesc; } } =20 @@ -1087,7 +1129,7 @@ static struct zspage *alloc_zspage(struct zs_pool *po= ol, gfp_t gfp) { int i; - struct page *pages[ZS_MAX_PAGES_PER_ZSPAGE]; + struct zsdesc *zsdescs[ZS_MAX_PAGES_PER_ZSPAGE]; struct zspage *zspage =3D cache_alloc_zspage(pool, gfp); =20 if (!zspage) @@ -1097,23 +1139,23 @@ static struct zspage *alloc_zspage(struct zs_pool *= pool, migrate_lock_init(zspage); =20 for (i =3D 0; i < class->pages_per_zspage; i++) { - struct page *page; + struct zsdesc *zsdesc; =20 - page =3D alloc_page(gfp); - if (!page) { + zsdesc =3D alloc_zsdesc(gfp); + if (!zsdesc) { while (--i >=3D 0) { - dec_zone_page_state(pages[i], NR_ZSPAGES); - __free_page(pages[i]); + zsdesc_dec_zone_page_state(zsdescs[i]); + free_zsdesc(zsdescs[i]); } cache_free_zspage(pool, zspage); return NULL; } =20 - inc_zone_page_state(page, NR_ZSPAGES); - pages[i] =3D page; + zsdesc_inc_zone_page_state(zsdesc); + zsdescs[i] =3D zsdesc; } =20 - create_page_chain(class, zspage, pages); + create_page_chain(class, zspage, zsdescs); init_zspage(class, zspage); zspage->pool =3D pool; =20 @@ -1856,29 +1898,29 @@ static void dec_zspage_isolation(struct zspage *zsp= age) zspage->isolated--; } =20 -static const struct movable_operations zsmalloc_mops; - static void replace_sub_page(struct size_class *class, struct zspage *zspa= ge, - struct page *newpage, struct page *oldpage) + struct zsdesc *new_zsdesc, struct zsdesc *old_zsdesc) { - struct page *page; - struct page *pages[ZS_MAX_PAGES_PER_ZSPAGE] =3D {NULL, }; + struct zsdesc *zsdesc; + struct zsdesc *zsdescs[ZS_MAX_PAGES_PER_ZSPAGE] =3D {NULL, }; + unsigned int first_obj_offset; int idx =3D 0; =20 - page =3D get_first_page(zspage); + zsdesc =3D get_first_zsdesc(zspage); do { - if (page =3D=3D oldpage) - pages[idx] =3D newpage; + if (zsdesc =3D=3D old_zsdesc) + zsdescs[idx] =3D new_zsdesc; else - pages[idx] =3D page; + zsdescs[idx] =3D zsdesc; idx++; - } while ((page =3D get_next_page(page)) !=3D NULL); + } while ((zsdesc =3D get_next_zsdesc(zsdesc)) !=3D NULL); =20 - create_page_chain(class, zspage, pages); - set_first_obj_offset(newpage, get_first_obj_offset(oldpage)); + create_page_chain(class, zspage, zsdescs); + first_obj_offset =3D get_first_obj_offset(zsdesc_page(old_zsdesc)); + set_first_obj_offset(zsdesc_page(new_zsdesc), first_obj_offset); if (unlikely(ZsHugePage(zspage))) - newpage->index =3D oldpage->index; - __SetPageMovable(newpage, &zsmalloc_mops); + new_zsdesc->handle =3D old_zsdesc->handle; + zsdesc_set_movable(new_zsdesc); } =20 static bool zs_page_isolate(struct page *page, isolate_mode_t mode) @@ -1959,7 +2001,7 @@ static int zs_page_migrate(struct page *newpage, stru= ct page *page, } kunmap_atomic(s_addr); =20 - replace_sub_page(class, zspage, newpage, page); + replace_sub_page(class, zspage, page_zsdesc(newpage), page_zsdesc(page)); /* * Since we complete the data copy and set up new zspage structure, * it's okay to release the pool's lock. --=20 2.41.0 From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 94EA5C001B0 for ; Thu, 13 Jul 2023 04:22:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233894AbjGMEWR (ORCPT ); Thu, 13 Jul 2023 00:22:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32820 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233883AbjGMEVr (ORCPT ); Thu, 13 Jul 2023 00:21:47 -0400 Received: from mail-pf1-x432.google.com (mail-pf1-x432.google.com [IPv6:2607:f8b0:4864:20::432]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 72C6319BE for ; Wed, 12 Jul 2023 21:21:23 -0700 (PDT) Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-6687446eaccso311460b3a.3 for ; Wed, 12 Jul 2023 21:21:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222083; x=1691814083; 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=ItG8ksrwK8WHStX9MB/fUTZvwyuLsvIlM15e1efhXFY=; b=J0aXa+ktFUJkOdgZrLc2eH6P3UkQshHs83zm1+lxcabnZXxw2S3zbeIJMrU5IqnQpz 9OWtyPzFeDJ4eBoHQ5EtdlGXLMuCMCuJ8hWmDjHw3Uq+mwo18ozEHn2PrQm1PwV3zKQQ oewcfr0RJEamddaDOUGXzRu7FE+s2Eos0q//ZjWC5KNiJlFWWdXzJuhRR8/St6pZAkdK XLqCjS/iraG+Go+7sFNvQk18yZkdFi53LwyuJns0hwEG6WlIUi7gf2eN/K3k1WI9sz+x YYH3R2RtRgQq6xMHMd9aTAiq4LdFyBW1/+DSz99YmQKagn19cx4MSPATRiNhSbI/I0ag 2gRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222083; x=1691814083; 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=ItG8ksrwK8WHStX9MB/fUTZvwyuLsvIlM15e1efhXFY=; b=U/iqP5ihtRRpoViBHNKFFaI4rhBl5kIWwRngIdTfFcBzmT3pXxJVGzqsIgPY1rRdOd pQ+13zIBSzEzZ6R4our4k+LPoMQWtmu93LgBcNufcsZ8l6yTMQhbraD2b61xG9TRiKi2 2Hf5ALAQQn0q+aqkxsx2f+L1e1j83+bhCGYXXPHqSxgtBYnRGuix2aE+YhpIpdBjJBaF p+sVrpqpKA/F6tjAGZpj3n2KBbtYAceIMVouRPtQsYuplR2muqhZptrvev85+XGC5bbB C2s4RpQNP74+rk0lkGRtXKSiv9LZB20BlSlHLySWkhtOWB98Rm0XY/vo1d/7bEksifc9 cr0A== X-Gm-Message-State: ABy/qLaG7Y6qLPgvYlgYxY0FVO+WUAHt6J1HXn3TZf228g8JdIeFrgVE Vxcr4PSOkJhMlVRdzp7P9Vo= X-Google-Smtp-Source: APBJJlHv1tRh9q0qQqBjcFbXSS+jcB852joeQND+bRafSNcpiomPGfwhEemort4fhA+14tH0PTb7cA== X-Received: by 2002:a05:6a00:ac7:b0:674:6dd4:8337 with SMTP id c7-20020a056a000ac700b006746dd48337mr934769pfl.12.1689222082858; Wed, 12 Jul 2023 21:21:22 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.21.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:21:22 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 10/21] mm/zsmalloc: convert obj_allocated() and related helpers to use zsdesc Date: Thu, 13 Jul 2023 13:20:25 +0900 Message-ID: <20230713042037.980211-11-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Convert obj_allocated(), and related helpers to take zsdesc. Also make its callers to cast (struct page *) to (struct zsdesc *) when calling them. The users will be converted gradually as there are many. Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 48bfdbbe3b1e..efd7a0f78962 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -942,15 +942,15 @@ static unsigned long handle_to_obj(unsigned long hand= le) return *(unsigned long *)handle; } =20 -static inline bool obj_allocated(struct page *page, void *obj, +static inline bool obj_allocated(struct zsdesc *zsdesc, void *obj, unsigned long *phandle) { unsigned long handle; - struct zspage *zspage =3D get_zspage(page); + struct zspage *zspage =3D get_zspage(zsdesc_page(zsdesc)); =20 if (unlikely(ZsHugePage(zspage))) { - VM_BUG_ON_PAGE(!is_first_page(page), page); - handle =3D page->index; + VM_BUG_ON_PAGE(!is_first_zsdesc(zsdesc), zsdesc_page(zsdesc)); + handle =3D zsdesc->handle; } else handle =3D *(unsigned long *)obj; =20 @@ -1698,18 +1698,18 @@ static void zs_object_copy(struct size_class *class= , unsigned long dst, * return handle. */ static unsigned long find_alloced_obj(struct size_class *class, - struct page *page, int *obj_idx) + struct zsdesc *zsdesc, int *obj_idx) { unsigned int offset; int index =3D *obj_idx; unsigned long handle =3D 0; - void *addr =3D kmap_atomic(page); + void *addr =3D zsdesc_kmap_atomic(zsdesc); =20 - offset =3D get_first_obj_offset(page); + offset =3D get_first_obj_offset(zsdesc_page(zsdesc)); offset +=3D class->size * index; =20 while (offset < PAGE_SIZE) { - if (obj_allocated(page, addr + offset, &handle)) + if (obj_allocated(zsdesc, addr + offset, &handle)) break; =20 offset +=3D class->size; @@ -1733,7 +1733,7 @@ static void migrate_zspage(struct zs_pool *pool, stru= ct zspage *src_zspage, struct size_class *class =3D pool->size_class[src_zspage->class]; =20 while (1) { - handle =3D find_alloced_obj(class, s_page, &obj_idx); + handle =3D find_alloced_obj(class, page_zsdesc(s_page), &obj_idx); if (!handle) { s_page =3D get_next_page(s_page); if (!s_page) @@ -1990,7 +1990,7 @@ static int zs_page_migrate(struct page *newpage, stru= ct page *page, =20 for (addr =3D s_addr + offset; addr < s_addr + PAGE_SIZE; addr +=3D class->size) { - if (obj_allocated(page, addr, &handle)) { + if (obj_allocated(page_zsdesc(page), addr, &handle)) { =20 old_obj =3D handle_to_obj(handle); obj_to_location(old_obj, &dummy, &obj_idx); --=20 2.41.0 From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 26DAAEB64DD for ; Thu, 13 Jul 2023 04:22:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231748AbjGMEWU (ORCPT ); Thu, 13 Jul 2023 00:22:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33676 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233860AbjGMEVt (ORCPT ); Thu, 13 Jul 2023 00:21:49 -0400 Received: from mail-pf1-x42f.google.com (mail-pf1-x42f.google.com [IPv6:2607:f8b0:4864:20::42f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 617F92693 for ; Wed, 12 Jul 2023 21:21:26 -0700 (PDT) Received: by mail-pf1-x42f.google.com with SMTP id d2e1a72fcca58-666eec46206so311195b3a.3 for ; Wed, 12 Jul 2023 21:21:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222086; x=1691814086; 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=KN/0UQ5A23ju1GQxKe5y1Dsl+buU4Kky6wfdVIYQXVw=; b=QaglxJ5/4DXjaQRW99wAX/gu3nfKdLqbbfoLZYjSPiZByNoZNuaSdKjd3TkB7SCXyb 9ehVOxCsLkwO4vuHp5ToaaXKVIGUzxQ0Xc9BVAejByY2cbduYp7MEgSHy3QXB14VaKJu /dQ0TVVhsehk0MF70CW/lmLy+DXRf72UlGYPhjyvFIavnPXAU9WS1TRF/1K5Tegr+t0I qYRZaVa02qwoX7CwbvkyUENFWVyK/X4roOk9f3PKyKmrpS0lq1ImDkXWV+rL6BZWGEta hyb+fgRMQ//JMKjUB80tVxa0Ad7ciBFGNKOG/gFD0rBbAhL4VGHGMzWqsWVYi0c10LpV wOBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222086; x=1691814086; 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=KN/0UQ5A23ju1GQxKe5y1Dsl+buU4Kky6wfdVIYQXVw=; b=bo9BdbxYqn30GWAvDzdqWUfAxJEFB383lbzaPUBXfls3EK+OPv2qT33AZLphRhVCaB +yLPADfUWRV2FGBZYfskDkF6ySNZsJL1+CkFyoBo+RZjAQ5klvrCeEuHefrmOLFHLmfy PEZULKxXrLtlvw9XUbth4GYiRfXhZCU6PL+YRbv5488Fbr0pHvneCdU/Gdg6fGBF+LnL Pi5UQmG30kbcpd8wZmWG7rZvp/PNgzao9QpNp/3bqqj3EO1ZbxSjV551tYaNSF2fHGKb AW+HJTTWH05yrsJDT4BkvVTwGrTZcpP5PwSx65hCfsXG45UHE5eUaAgj1gIAf8WHKsjg QkzQ== X-Gm-Message-State: ABy/qLYvYJO62QflB1qaowuEOT+dmm9BIG7r0AUQ68Vu7u2RfyP28MLX OfRw5uKi6qI6mW06pnCA3K5eYGAZ8/QAhQBL75qkKg== X-Google-Smtp-Source: APBJJlG8kddUlSs/CeJcZNRjhBskayUfvYWIuJ8jWcHhX3qWsCgb/Vp6nYOC/llo4VEovjRzZW4bzw== X-Received: by 2002:a05:6a00:b51:b0:641:3bf8:6514 with SMTP id p17-20020a056a000b5100b006413bf86514mr775304pfo.10.1689222085708; Wed, 12 Jul 2023 21:21:25 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.21.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:21:25 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 11/21] mm/zsmalloc: convert init_zspage() to use zsdesc Date: Thu, 13 Jul 2023 13:20:26 +0900 Message-ID: <20230713042037.980211-12-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index efd7a0f78962..c8c3039a751a 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -1048,16 +1048,16 @@ static void init_zspage(struct size_class *class, s= truct zspage *zspage) { unsigned int freeobj =3D 1; unsigned long off =3D 0; - struct page *page =3D get_first_page(zspage); + struct zsdesc *zsdesc =3D get_first_zsdesc(zspage); =20 - while (page) { - struct page *next_page; + while (zsdesc) { + struct zsdesc *next_zsdesc; struct link_free *link; void *vaddr; =20 - set_first_obj_offset(page, off); + set_first_obj_offset(zsdesc_page(zsdesc), off); =20 - vaddr =3D kmap_atomic(page); + vaddr =3D zsdesc_kmap_atomic(zsdesc); link =3D (struct link_free *)vaddr + off / sizeof(*link); =20 while ((off +=3D class->size) < PAGE_SIZE) { @@ -1070,8 +1070,8 @@ static void init_zspage(struct size_class *class, str= uct zspage *zspage) * page, which must point to the first object on the next * page (if present) */ - next_page =3D get_next_page(page); - if (next_page) { + next_zsdesc =3D get_next_zsdesc(zsdesc); + if (next_zsdesc) { link->next =3D freeobj++ << OBJ_TAG_BITS; } else { /* @@ -1081,7 +1081,7 @@ static void init_zspage(struct size_class *class, str= uct zspage *zspage) link->next =3D -1UL << OBJ_TAG_BITS; } kunmap_atomic(vaddr); - page =3D next_page; + zsdesc =3D next_zsdesc; off %=3D PAGE_SIZE; } =20 --=20 2.41.0 From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C043AC001DD for ; Thu, 13 Jul 2023 04:22:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233900AbjGMEW0 (ORCPT ); Thu, 13 Jul 2023 00:22:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33146 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233865AbjGMEVv (ORCPT ); Thu, 13 Jul 2023 00:21:51 -0400 Received: from mail-pf1-x42e.google.com (mail-pf1-x42e.google.com [IPv6:2607:f8b0:4864:20::42e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3FCFA2721 for ; Wed, 12 Jul 2023 21:21:29 -0700 (PDT) Received: by mail-pf1-x42e.google.com with SMTP id d2e1a72fcca58-6726d5d92afso981654b3a.1 for ; Wed, 12 Jul 2023 21:21:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222089; x=1691814089; 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=5yfQ6zPraH8dHZa8YhEhQL1VMOJgNkmLyTsm8Haifgs=; b=g8WMZWqHXrrpccZO8HYjWcBBVZeWLTjyD+nWNKQw7fp7VGvy2h/d70QzcUDIj9R2oe YxbhuQWUUag7c5ql2Sz6xOTRQZRl6Wz83EWdeACFTpfUfy6BfevLWPPqBhpvw+maXfJK PwN+uXTrb/UMYeLk+dWQmZT+oq7QBI+afN4uG7iVW4Cuw7ui+Gc79QHpz5qp3l9zaRiw XO2sKqyRNO9V2MtCOpV6ufDEugUXje//Fdy4QBNoMUqMtJHeQgZQjj0pxT1kje47syCr K98RIjHW4oPOlzDbyBqfzS4pdfh+DCmURNBmMNVzuGCRP2Qbf+hL33XqBpmYnvNvHm7x yxpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222089; x=1691814089; 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=5yfQ6zPraH8dHZa8YhEhQL1VMOJgNkmLyTsm8Haifgs=; b=jldJYvSfTjIBZD8Moh+Uq6zpz3g6Y3HC1d1R+GxszZsNqWNpdd+BGLIOHY915ujzAc eA3DwZX3zSpA+1tdLwcXI/hzl1n7TuSK4RJEwkz3/S/NqSx1/Qt0MzWb9rhhQAmxQATW BYFuNxC4rwc4LCPn9hgWa5FEYJqRd2AtySC4IMQTjiFG3XEYAGTpEK9hYhRfiRAQPWHY RaTQKwo3GAaC7a+AQICl5J2mOooVf8jrLnmQS/ZBb8Q6AZ+fagPyXxUMK/VoIqaSFOe5 1qAslIYC/O0t29m0gy6XjFj9LUEfcIBMQ53g39pPtqb9Q0TJTfbxcxRmKBNXDA7MIwSr Fw1w== X-Gm-Message-State: ABy/qLaDy2OFhG7w/QhVuJGHJMaWDjp61cScCAahIDx2+/FLOR9yfna5 uBpyBmfQ7esUOOZ7flJnB2U= X-Google-Smtp-Source: APBJJlELtoG4ukoHskrnQbnp45zXdh/TsnPNc0u5P7Tty60WCDZQyFeDcrQPIszYmTm474hUPBaeQg== X-Received: by 2002:a05:6a20:5496:b0:133:5ed9:f00b with SMTP id i22-20020a056a20549600b001335ed9f00bmr69251pzk.13.1689222088604; Wed, 12 Jul 2023 21:21:28 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.21.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:21:28 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 12/21] mm/zsmalloc: convert obj_to_page() and zs_free() to use zsdesc Date: Thu, 13 Jul 2023 13:20:27 +0900 Message-ID: <20230713042037.980211-13-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Convert obj_to_page() to obj_to_zsdesc() and also convert its user zs_free() to use zsdesc. Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index c8c3039a751a..5141a0c72c61 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -915,10 +915,10 @@ static void obj_to_location(unsigned long obj, struct= zsdesc **zsdesc, *obj_idx =3D (obj & OBJ_INDEX_MASK); } =20 -static void obj_to_page(unsigned long obj, struct page **page) +static void obj_to_zsdesc(unsigned long obj, struct zsdesc **zsdesc) { obj >>=3D OBJ_TAG_BITS; - *page =3D pfn_to_page(obj >> OBJ_INDEX_BITS); + *zsdesc =3D pfn_zsdesc(obj >> OBJ_INDEX_BITS); } =20 /** @@ -1593,7 +1593,7 @@ static void obj_free(int class_size, unsigned long ob= j) void zs_free(struct zs_pool *pool, unsigned long handle) { struct zspage *zspage; - struct page *f_page; + struct zsdesc *f_zsdesc; unsigned long obj; struct size_class *class; int fullness; @@ -1607,8 +1607,8 @@ void zs_free(struct zs_pool *pool, unsigned long hand= le) */ spin_lock(&pool->lock); obj =3D handle_to_obj(handle); - obj_to_page(obj, &f_page); - zspage =3D get_zspage(f_page); + obj_to_zsdesc(obj, &f_zsdesc); + zspage =3D get_zspage(zsdesc_page(f_zsdesc)); class =3D zspage_class(pool, zspage); =20 class_stat_dec(class, ZS_OBJS_INUSE, 1); --=20 2.41.0 From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D2580EB64DD for ; Thu, 13 Jul 2023 04:22:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233916AbjGMEWf (ORCPT ); Thu, 13 Jul 2023 00:22:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33192 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233908AbjGMEVx (ORCPT ); Thu, 13 Jul 2023 00:21:53 -0400 Received: from mail-pf1-x42e.google.com (mail-pf1-x42e.google.com [IPv6:2607:f8b0:4864:20::42e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D165D26A0 for ; Wed, 12 Jul 2023 21:21:32 -0700 (PDT) Received: by mail-pf1-x42e.google.com with SMTP id d2e1a72fcca58-666ecb21f86so296546b3a.3 for ; Wed, 12 Jul 2023 21:21:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222091; x=1691814091; 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=/AkKYYKmxj7TQUeJqlTJNcjNKZ3qt8jEQhquu79OlOQ=; b=SOG/K/XbNRTO8yeNVcrdEC9e85SmT5W+OelcxVnc+JYMVci8hbXGxUYc9gd4vbQ2aL xOYh108uhhE78bp3NscDM2bw1DQiku+bU2BJUvJwhf/cLuc89t2LiJ99VfukWcEdbUUM Dxx22mtv8Q6wYTu9gryeEOpcL2K8Ed+Wysz6APUHSMO/AfNgDP49TuqaGCDDqcNvngN0 aCs+TpmkeOONH2ObDHcVHT7ixWldKRp5t9CINzRwaO5RxB7E2aRhf0+ndlCQXbbT1iqP 79ze97f7s33kR3eBFqX4rM5CpMfOgksc2n2rzkSLzFC2wlYkLTUZ7OTkxbkFZoS3qWDr RlDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222091; x=1691814091; 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=/AkKYYKmxj7TQUeJqlTJNcjNKZ3qt8jEQhquu79OlOQ=; b=dAymqUITB/V0kma8mVO3b+IGmgVKVDXqM1sP1vgKZ6wGW2rGHk3Ks+ff5LkV+FdVux zSE9KGm0uu0ZZKP4iUvDwbmQQuLLSo5oFNdvKVC/Rmwwcdy4+BcDjzG8nSeba0457swE gfM3xWlYihtNsmLkbpXI+NE36hZp7vCqfos8C/HSxUvKY71CIZSdKwx37SD8UFqpI9FI ualM8+F3BYHYYymepttOT86oeJzplnOK7o4/JUuey6DoOO0xlTF2OmjDddhh1JayU3US i0Jtp7BRkzVp7NO6hLZVmDnzCN7urklS3uHWIslZc7Yb0EYvL4qQeZeEQYilh2Hu/ZVE iLnA== X-Gm-Message-State: ABy/qLaghq3BRYva5x9bOmjkJmz+3igM/ahl2qI1tdphU5LDRu83GvJC XTj+qtLnOCDMAKGiuYBsmtY= X-Google-Smtp-Source: APBJJlEjl5B7pAx+psP3HeXUMoWINVPRy39+miBs80ttFtJlPDOsP+1gCYRlrL/q07+KyucCY6JJCQ== X-Received: by 2002:a05:6a00:2d8d:b0:680:98c:c595 with SMTP id fb13-20020a056a002d8d00b00680098cc595mr731083pfb.13.1689222091506; Wed, 12 Jul 2023 21:21:31 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.21.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:21:31 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 13/21] mm/zsmalloc: convert reset_page() to reset_zsdesc() Date: Thu, 13 Jul 2023 13:20:28 +0900 Message-ID: <20230713042037.980211-14-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" reset_page() is called prior to freeing base pages of a zspage. As it's closely associated with details of struct page, rename it to reset_zsdesc() and move closer to newly added zsdesc helper functions. Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 5141a0c72c61..085f5c791a03 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -388,6 +388,17 @@ static inline void free_zsdesc(struct zsdesc *zsdesc) __free_page(page); } =20 +static void reset_zsdesc(struct zsdesc *zsdesc) +{ + struct page *page =3D zsdesc_page(zsdesc); + + __ClearPageMovable(page); + ClearPagePrivate(page); + set_page_private(page, 0); + page_mapcount_reset(page); + page->index =3D 0; +} + /* huge object: pages_per_zspage =3D=3D 1 && maxobj_per_zspage =3D=3D 1 */ static void SetZsHugePage(struct zspage *zspage) { @@ -962,15 +973,6 @@ static inline bool obj_allocated(struct zsdesc *zsdesc= , void *obj, return true; } =20 -static void reset_page(struct page *page) -{ - __ClearPageMovable(page); - ClearPagePrivate(page); - set_page_private(page, 0); - page_mapcount_reset(page); - page->index =3D 0; -} - static int trylock_zspage(struct zspage *zspage) { struct zsdesc *cursor, *fail; @@ -1010,7 +1012,7 @@ static void __free_zspage(struct zs_pool *pool, struc= t size_class *class, do { VM_BUG_ON_PAGE(!PageLocked(page), page); next =3D get_next_page(page); - reset_page(page); + reset_zsdesc(page_zsdesc(page)); unlock_page(page); dec_zone_page_state(page, NR_ZSPAGES); put_page(page); @@ -2016,7 +2018,7 @@ static int zs_page_migrate(struct page *newpage, stru= ct page *page, inc_zone_page_state(newpage, NR_ZSPAGES); } =20 - reset_page(page); + reset_zsdesc(page_zsdesc(page)); put_page(page); =20 return MIGRATEPAGE_SUCCESS; --=20 2.41.0 From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7FE63C001DD for ; Thu, 13 Jul 2023 04:22:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233504AbjGMEWk (ORCPT ); Thu, 13 Jul 2023 00:22:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33238 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233922AbjGMEV4 (ORCPT ); Thu, 13 Jul 2023 00:21:56 -0400 Received: from mail-pf1-x435.google.com (mail-pf1-x435.google.com [IPv6:2607:f8b0:4864:20::435]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E860D2D43 for ; Wed, 12 Jul 2023 21:21:35 -0700 (PDT) Received: by mail-pf1-x435.google.com with SMTP id d2e1a72fcca58-666e6541c98so297352b3a.2 for ; Wed, 12 Jul 2023 21:21:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222094; x=1691814094; 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=/by1wk+lV1+/9owJgKTgxMHTJboWG5CTUy71o+eRxGw=; b=ZwLsHKCMGtSfeOwsjPa0Ht517nH/Y0IoWXfzkMMAR8zYkK/vu4HdAF46+mxiWe/roe 8EelYNkbLmFMwUTu8yqR6eqjQQEZELmkL0j5hPFs2j/dvv04mhUiCuF4GqCCxNQOvHJM 15lB1o6EhTt8eXMOEcjpqczfk/daeZabPbwWkIh/3bBXdpM3MSLYmmp/G+F4XIechk3c igz9mrzUUga5BdUJq8NrakVnxKm5sOPFoBF1tD+fv/XrIHaelaFD8r2jMn2tpTxX8icj QP5KDdfRxq+vtvLqAVuOREzSHDU9V/n8VLkX1DfcInOK7adg45jBcWmgh22ac8mHhHZI qZtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222094; x=1691814094; 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=/by1wk+lV1+/9owJgKTgxMHTJboWG5CTUy71o+eRxGw=; b=cGnIBf/V3EMmMEUg0Uns2XU8BQepT8bDT3oqXWVkHsNZcneie2RmUUXKagrdZlmVv0 vjtw2OFtxgee0oSa9x3TwwsMj6f4dH3t3un7k8vm7atozK8yobAxzqWKeJczmX7D8uNN YP/MlF/VJkAZHKoyEwsfFo/9C80DrhNgWgdSk4AFkSzpl6DTSYAGxv+KHFxeT72n5rju ckOAms64QGDFUH8Usp21CAofOx6g6rZvHAWRZ9NMx+85J0nQZTtztlz2HrYqlxiKHLsI MyIFmbgiA/iT1DGHqtHdRs74e+iPGv1kJw/a5x/trh8Iurh7S0/IDD+HWSbuK/ipXddu tYsw== X-Gm-Message-State: ABy/qLbm9I/UV1NOq6t96xjLFi1xrtJ+ceYHnTP2Y1zVcmAI2Dlk88PZ EmF5MYdmJaKREGpXBkuqxYU= X-Google-Smtp-Source: APBJJlHQXaD+zIgZjEwNmV8ncpgx7dFNmq4wW4mHfF3i/lYKQg9jn3S5Evn9lGjxsR9uHDQqJZv4fA== X-Received: by 2002:a05:6a00:14c5:b0:668:83b6:bfe8 with SMTP id w5-20020a056a0014c500b0066883b6bfe8mr621472pfu.9.1689222094431; Wed, 12 Jul 2023 21:21:34 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.21.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:21:33 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 14/21] mm/zsmalloc: convert zs_page_{isolate,migrate,putback} to use zsdesc Date: Thu, 13 Jul 2023 13:20:29 +0900 Message-ID: <20230713042037.980211-15-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Convert the functions for movable operations of zsmalloc to use zsdesc. Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 50 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 085f5c791a03..9e4ced14e1eb 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -399,6 +399,16 @@ static void reset_zsdesc(struct zsdesc *zsdesc) page->index =3D 0; } =20 +static inline bool zsdesc_is_isolated(struct zsdesc *zsdesc) +{ + return PageIsolated(zsdesc_page(zsdesc)); +} + +struct zone *zsdesc_zone(struct zsdesc *zsdesc) +{ + return page_zone(zsdesc_page(zsdesc)); +} + /* huge object: pages_per_zspage =3D=3D 1 && maxobj_per_zspage =3D=3D 1 */ static void SetZsHugePage(struct zspage *zspage) { @@ -1928,14 +1938,15 @@ static void replace_sub_page(struct size_class *cla= ss, struct zspage *zspage, static bool zs_page_isolate(struct page *page, isolate_mode_t mode) { struct zspage *zspage; + struct zsdesc *zsdesc =3D page_zsdesc(page); =20 /* * Page is locked so zspage couldn't be destroyed. For detail, look at * lock_zspage in free_zspage. */ - VM_BUG_ON_PAGE(PageIsolated(page), page); + VM_BUG_ON_PAGE(zsdesc_is_isolated(zsdesc), zsdesc_page(zsdesc)); =20 - zspage =3D get_zspage(page); + zspage =3D get_zspage(zsdesc_page(zsdesc)); migrate_write_lock(zspage); inc_zspage_isolation(zspage); migrate_write_unlock(zspage); @@ -1950,6 +1961,8 @@ static int zs_page_migrate(struct page *newpage, stru= ct page *page, struct size_class *class; struct zspage *zspage; struct zsdesc *dummy; + struct zsdesc *new_zsdesc =3D page_zsdesc(newpage); + struct zsdesc *zsdesc =3D page_zsdesc(page); void *s_addr, *d_addr, *addr; unsigned int offset; unsigned long handle; @@ -1964,10 +1977,10 @@ static int zs_page_migrate(struct page *newpage, st= ruct page *page, if (mode =3D=3D MIGRATE_SYNC_NO_COPY) return -EINVAL; =20 - VM_BUG_ON_PAGE(!PageIsolated(page), page); + VM_BUG_ON_PAGE(!zsdesc_is_isolated(zsdesc), zsdesc_page(zsdesc)); =20 /* The page is locked, so this pointer must remain valid */ - zspage =3D get_zspage(page); + zspage =3D get_zspage(zsdesc_page(zsdesc)); pool =3D zspage->pool; =20 /* @@ -1980,30 +1993,30 @@ static int zs_page_migrate(struct page *newpage, st= ruct page *page, /* the migrate_write_lock protects zpage access via zs_map_object */ migrate_write_lock(zspage); =20 - offset =3D get_first_obj_offset(page); - s_addr =3D kmap_atomic(page); + offset =3D get_first_obj_offset(zsdesc_page(zsdesc)); + s_addr =3D zsdesc_kmap_atomic(zsdesc); =20 /* * Here, any user cannot access all objects in the zspage so let's move. */ - d_addr =3D kmap_atomic(newpage); + d_addr =3D zsdesc_kmap_atomic(new_zsdesc); memcpy(d_addr, s_addr, PAGE_SIZE); kunmap_atomic(d_addr); =20 for (addr =3D s_addr + offset; addr < s_addr + PAGE_SIZE; addr +=3D class->size) { - if (obj_allocated(page_zsdesc(page), addr, &handle)) { + if (obj_allocated(zsdesc, addr, &handle)) { =20 old_obj =3D handle_to_obj(handle); obj_to_location(old_obj, &dummy, &obj_idx); - new_obj =3D (unsigned long)location_to_obj(newpage, + new_obj =3D (unsigned long)location_to_obj(zsdesc_page(new_zsdesc), obj_idx); record_obj(handle, new_obj); } } kunmap_atomic(s_addr); =20 - replace_sub_page(class, zspage, page_zsdesc(newpage), page_zsdesc(page)); + replace_sub_page(class, zspage, new_zsdesc, zsdesc); /* * Since we complete the data copy and set up new zspage structure, * it's okay to release the pool's lock. @@ -2012,14 +2025,14 @@ static int zs_page_migrate(struct page *newpage, st= ruct page *page, dec_zspage_isolation(zspage); migrate_write_unlock(zspage); =20 - get_page(newpage); - if (page_zone(newpage) !=3D page_zone(page)) { - dec_zone_page_state(page, NR_ZSPAGES); - inc_zone_page_state(newpage, NR_ZSPAGES); + zsdesc_get(new_zsdesc); + if (zsdesc_zone(new_zsdesc) !=3D zsdesc_zone(zsdesc)) { + zsdesc_dec_zone_page_state(zsdesc); + zsdesc_inc_zone_page_state(new_zsdesc); } =20 - reset_zsdesc(page_zsdesc(page)); - put_page(page); + reset_zsdesc(zsdesc); + zsdesc_put(zsdesc); =20 return MIGRATEPAGE_SUCCESS; } @@ -2027,10 +2040,11 @@ static int zs_page_migrate(struct page *newpage, st= ruct page *page, static void zs_page_putback(struct page *page) { struct zspage *zspage; + struct zsdesc *zsdesc =3D page_zsdesc(page); =20 - VM_BUG_ON_PAGE(!PageIsolated(page), page); + VM_BUG_ON_PAGE(!zsdesc_is_isolated(zsdesc), zsdesc_page(zsdesc)); =20 - zspage =3D get_zspage(page); + zspage =3D get_zspage(zsdesc_page(zsdesc)); migrate_write_lock(zspage); dec_zspage_isolation(zspage); migrate_write_unlock(zspage); --=20 2.41.0 From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4E46FEB64DD for ; Thu, 13 Jul 2023 04:22:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233947AbjGMEWv (ORCPT ); Thu, 13 Jul 2023 00:22:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33610 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233852AbjGMEWJ (ORCPT ); Thu, 13 Jul 2023 00:22:09 -0400 Received: from mail-pf1-x42e.google.com (mail-pf1-x42e.google.com [IPv6:2607:f8b0:4864:20::42e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3041E2D56 for ; Wed, 12 Jul 2023 21:21:38 -0700 (PDT) Received: by mail-pf1-x42e.google.com with SMTP id d2e1a72fcca58-666edfc50deso161806b3a.0 for ; Wed, 12 Jul 2023 21:21:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222097; x=1691814097; 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=uEDSSIP+zt5V9XvZT+ict1746NWdOpkIhk/ClYlbKG8=; b=gDl0JF5e9zGpLRmEVQgEpzZ1YDB6JYSyOV9cQpeI18V9wzgjkAQF1WTsMsyU3VSoLf 2e1cTn7O+bGR8vWOg52VMo87dUBAfJiYwc2XktidpZUMY8OfM7ngVE95TQkHX66SanQW dgpC/2e8PppNekV6zRbcREFOHsjqAgeaozdTGFKKnnpBYoeg5Fx0fhAYs2W/ui/9MoZh 69aAO90DqMUuP75JGEeTXuZFg0xeVjbCPiw5v3qygq7ShgW2gTRi1GIszh84o4kPH8Qj 0sUZz+95DRgGUeST8VzIXP7PSo/0vTH8boyycYF9NPSM14W03PRBlwUQO6t6BMR04X3p PekQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222097; x=1691814097; 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=uEDSSIP+zt5V9XvZT+ict1746NWdOpkIhk/ClYlbKG8=; b=UE0ls98ud8iRRjdzwnWX+wXKZr7uZT3imrbxWy/8n+OO+CDXAzi71kCzh4iw4LkDfn Bucmrvg+pU1kfJoogZfwYWiOWuA7E8hMa95iDr7TCxY3NnFb1yyazQTeyTT1gI0dkoxb SYP8kiNY8LX3yYsl/KwW40awoOtWc2hH5BTpQ3B7NbmiEnhqYYnYlEE7y8GEdUPAvtOU AITlLL0XWi2MzLG/9TwFdycXz3rk7zAnvQNV47Isx17El998FzryHyIG17KruAgMsAIn WczBJWZ4bshM7OP+PMIs1kFbrZuX5BHmHzWQ7EIPdzhfMll7lMMi0dPw7VdOXdff/1Fb SZ4A== X-Gm-Message-State: ABy/qLYXpffd47fcZuNdrrnbbWmUCYi9Q4EhdfXwTVVzpIQZn5eTNuyL LKr0qHGgFZyUrvECMpzo58U= X-Google-Smtp-Source: APBJJlFlwg2pA2K3WdR4ybI758//TlSODxXQDA/TxlawtEXWCY8PW6IRxuTtLqAcqkjZbNPwiFTClw== X-Received: by 2002:a05:6a00:1a8d:b0:681:919f:bf69 with SMTP id e13-20020a056a001a8d00b00681919fbf69mr1060619pfv.0.1689222097302; Wed, 12 Jul 2023 21:21:37 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.21.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:21:36 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 15/21] mm/zsmalloc: convert __free_zspage() to use zsdesc Date: Thu, 13 Jul 2023 13:20:30 +0900 Message-ID: <20230713042037.980211-16-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Introduce zsdesc_is_locked() and convert __free_zspage() to use zsdesc. Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 9e4ced14e1eb..69bd497de35e 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -336,6 +336,11 @@ static inline void unlock_zsdesc(struct zsdesc *zsdesc) unlock_page(zsdesc_page(zsdesc)); } =20 +static inline bool zsdesc_is_locked(struct zsdesc *zsdesc) +{ + return PageLocked(zsdesc_page(zsdesc)); +} + static inline void wait_on_zsdesc_locked(struct zsdesc *zsdesc) { wait_on_page_locked(zsdesc_page(zsdesc)); @@ -1007,7 +1012,7 @@ static int trylock_zspage(struct zspage *zspage) static void __free_zspage(struct zs_pool *pool, struct size_class *class, struct zspage *zspage) { - struct page *page, *next; + struct zsdesc *zsdesc, *next; int fg; unsigned int class_idx; =20 @@ -1018,16 +1023,16 @@ static void __free_zspage(struct zs_pool *pool, str= uct size_class *class, VM_BUG_ON(get_zspage_inuse(zspage)); VM_BUG_ON(fg !=3D ZS_INUSE_RATIO_0); =20 - next =3D page =3D get_first_page(zspage); + next =3D zsdesc =3D get_first_zsdesc(zspage); do { - VM_BUG_ON_PAGE(!PageLocked(page), page); - next =3D get_next_page(page); - reset_zsdesc(page_zsdesc(page)); - unlock_page(page); - dec_zone_page_state(page, NR_ZSPAGES); - put_page(page); - page =3D next; - } while (page !=3D NULL); + VM_BUG_ON_PAGE(!zsdesc_is_locked(zsdesc), zsdesc_page(zsdesc)); + next =3D get_next_zsdesc(zsdesc); + reset_zsdesc(zsdesc); + unlock_zsdesc(zsdesc); + zsdesc_dec_zone_page_state(zsdesc); + zsdesc_put(zsdesc); + zsdesc =3D next; + } while (zsdesc !=3D NULL); =20 cache_free_zspage(pool, zspage); =20 --=20 2.41.0 From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8AD61EB64DD for ; Thu, 13 Jul 2023 04:23:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233870AbjGMEXG (ORCPT ); Thu, 13 Jul 2023 00:23:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33732 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233901AbjGMEWb (ORCPT ); Thu, 13 Jul 2023 00:22:31 -0400 Received: from mail-oi1-x233.google.com (mail-oi1-x233.google.com [IPv6:2607:f8b0:4864:20::233]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5A9DD2D7E for ; Wed, 12 Jul 2023 21:21:41 -0700 (PDT) Received: by mail-oi1-x233.google.com with SMTP id 5614622812f47-3a3373211a1so274252b6e.0 for ; Wed, 12 Jul 2023 21:21:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222100; x=1691814100; 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=3gkqWMyo7b2B7ewPiOnxxOYIhM7JQ5HFP6zR7XlZTck=; b=X3NbDx3D8zqD9lwl2kii6f0ZcuwskOzE291MA+sqwvMG8ec0/+DCydE9arTynZ/hFV llNcsSyZINjLssmVLJhR57Gb9x7UOqBRh1WCnSKjNaGY/3+T1C4weTBTwLITapuddIWQ w/vZUGgdpa57Dotq9AB4QF2tiXUq+VjAJfzEOkNe8FxdJPM0yHkxP/8v9NSltQj6Uzgk Y0zydf1delIbaOOERiR33rUXICwirbWlvPSRGV3fxy8pYZuod/K46pv+voF0EYvcEB2J DFyIOGSSKXOkWmUQq5m3V5W1DxAHFb/KZdTzT/6VfC8EOkBljvhCX7zIpQF60wEnzop7 UlaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222100; x=1691814100; 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=3gkqWMyo7b2B7ewPiOnxxOYIhM7JQ5HFP6zR7XlZTck=; b=RaotN3yVm3rBv05KYw02aNFMNXeaIMzz2aCj2SHsQbhNJY/zmLUzD69ZTosHoD746g wffbKn9fgVvEP7bECUD3MVelr5Wezy+3PmnquUnHiFGkDOwrNhev1wnZ1jy/0T9UerPe ec846YMPeBl9QpjzQbT4Mzmd7tsIizHPZUQm52LhrnbqO0m23+n6tJ++hNG/eyB4kocK HFLui6a2AcHwYztSgl5lhApdjm7j/1RTCKH3ZQiPvFIEAes4rCFF0J6lhE7WATBMYoWD 35Q5Ki+letWA1TAgTz7z0eH8ePstOW02l9aNS5hwAYecMcVrKqAFiuGty8Qto9yAtzeG GhhQ== X-Gm-Message-State: ABy/qLbPvb7Y92uM0P5LdEmwXhLAa/Q2UAHq4XO8A6DDeDqQnxV+b6hd O5vAPPzwh8o/ADa0egnyQUY= X-Google-Smtp-Source: APBJJlGiX7tftXPlnlj0r6WSZjzexhUUuLF83JtQLTrkv37u7pJOZ2k5ZiTxPcckOR51/J4NcCaw/A== X-Received: by 2002:a05:6808:1719:b0:3a3:bf6a:ba55 with SMTP id bc25-20020a056808171900b003a3bf6aba55mr682088oib.3.1689222100219; Wed, 12 Jul 2023 21:21:40 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.21.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:21:39 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 16/21] mm/zsmalloc: convert location_to_obj() to use zsdesc Date: Thu, 13 Jul 2023 13:20:31 +0900 Message-ID: <20230713042037.980211-17-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" As all users of location_to_obj() now use zsdesc, convert location_to_obj() to use zsdesc. Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 69bd497de35e..fd920b659b1d 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -948,15 +948,15 @@ static void obj_to_zsdesc(unsigned long obj, struct z= sdesc **zsdesc) } =20 /** - * location_to_obj - get obj value encoded from (, ) - * @page: page object resides in zspage + * location_to_obj - get obj value encoded from (, ) + * @zsdesc object resides in zspage * @obj_idx: object index */ -static unsigned long location_to_obj(struct page *page, unsigned int obj_i= dx) +static unsigned long location_to_obj(struct zsdesc *zsdesc, unsigned int o= bj_idx) { unsigned long obj; =20 - obj =3D page_to_pfn(page) << OBJ_INDEX_BITS; + obj =3D zsdesc_pfn(zsdesc) << OBJ_INDEX_BITS; obj |=3D obj_idx & OBJ_INDEX_MASK; obj <<=3D OBJ_TAG_BITS; =20 @@ -1505,7 +1505,7 @@ static unsigned long obj_malloc(struct zs_pool *pool, kunmap_atomic(vaddr); mod_zspage_inuse(zspage, 1); =20 - obj =3D location_to_obj(zsdesc_page(m_zsdesc), obj); + obj =3D location_to_obj(m_zsdesc, obj); =20 return obj; } @@ -2014,7 +2014,7 @@ static int zs_page_migrate(struct page *newpage, stru= ct page *page, =20 old_obj =3D handle_to_obj(handle); obj_to_location(old_obj, &dummy, &obj_idx); - new_obj =3D (unsigned long)location_to_obj(zsdesc_page(new_zsdesc), + new_obj =3D (unsigned long)location_to_obj(new_zsdesc, obj_idx); record_obj(handle, new_obj); } --=20 2.41.0 From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 08420C001B0 for ; Thu, 13 Jul 2023 04:23:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233949AbjGMEXX (ORCPT ); Thu, 13 Jul 2023 00:23:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33136 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233885AbjGMEW4 (ORCPT ); Thu, 13 Jul 2023 00:22:56 -0400 Received: from mail-pf1-x432.google.com (mail-pf1-x432.google.com [IPv6:2607:f8b0:4864:20::432]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DAAE726BB for ; Wed, 12 Jul 2023 21:21:53 -0700 (PDT) Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-666edfc50deso161849b3a.0 for ; Wed, 12 Jul 2023 21:21:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222103; x=1691814103; 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=aqbwv8O+lxJHxid3fsI/4aDUJzUIFl2vk+EDGGzJMlE=; b=HhBiTuA3YRFVYYtX8/M0YJ6lb1HKlwUn3kN2x4yXQkPMRexnTuCNWiRQsxPM4Z3iot K/7cVMrpdqnXwqA69sfPQzAirtFx3g33cYzX2PZR8LeFPkVsNkqyf3a+CqglzU6PT7VN lzTikbIsFgelxLz6BdKj+2ew5u6NbqpOO3A8TU+aT+87uJAmc1FaYlwxI7hX4YIecnWB 8MrcygZ1GUYj35Q/AdYZJYSlQ55TU5BtSv5zHrWoTbOL/rt43IIq8zzrExczRxc1Chwm VN3KzXoIEVrT5+2xolvk0RaRzKulzYpRW+TbtM4OQXgGLLRrFe2PG8vfUgcZH9O5BTyb UqIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222103; x=1691814103; 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=aqbwv8O+lxJHxid3fsI/4aDUJzUIFl2vk+EDGGzJMlE=; b=GckVZf+7qWXMSjO8K/jrseY253bazieUZP4H7MTqHp3OvnP3ijgfvutR43nzhruzcP nQBPZyovH5pI/xz1+NMmX7GrcL7JYa9WGJKA5Op0+myIu8iuNfCfhEXu1dCnoSUMO/kc 94i++/sSDZIoI0+oZ/kHyaS7E48THpx0hrFDROWiSXgqirFDD3AKkaxbTEQyssksTK4X KKbktRRtiQLqQyPG5bYsxPnecp30XpSpL2cpvKboJtY4p5ELUw44lJ7GlVCyvXtayNbq JLLt2BVAG2eJv2xGW6ohc8boCGguVQvff4MP4UUUDFHlIxl9edCWck3RSuw4sbSxYBDh i/UA== X-Gm-Message-State: ABy/qLbCoPvZpk5jpMBXObmO6xs4JtYzISaLjDxHvkEzNQknLLJDr69Q LgTkne7mxYANGrUJJMwCURA= X-Google-Smtp-Source: APBJJlGOrtV5hOsHEJUq5S+q2K6dI2JgqQtu82o3Vjh0U5YJbxX6e/q+RqfdVpeSjj/rqTPUsXDwYg== X-Received: by 2002:a05:6a00:1582:b0:681:4274:eef0 with SMTP id u2-20020a056a00158200b006814274eef0mr1212636pfk.1.1689222103209; Wed, 12 Jul 2023 21:21:43 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.21.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:21:42 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 17/21] mm/zsmalloc: convert migrate_zspage() to use zsdesc Date: Thu, 13 Jul 2023 13:20:32 +0900 Message-ID: <20230713042037.980211-18-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index fd920b659b1d..db43a5d05233 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -1746,14 +1746,14 @@ static void migrate_zspage(struct zs_pool *pool, st= ruct zspage *src_zspage, unsigned long used_obj, free_obj; unsigned long handle; int obj_idx =3D 0; - struct page *s_page =3D get_first_page(src_zspage); + struct zsdesc *s_zsdesc =3D get_first_zsdesc(src_zspage); struct size_class *class =3D pool->size_class[src_zspage->class]; =20 while (1) { - handle =3D find_alloced_obj(class, page_zsdesc(s_page), &obj_idx); + handle =3D find_alloced_obj(class, s_zsdesc, &obj_idx); if (!handle) { - s_page =3D get_next_page(s_page); - if (!s_page) + s_zsdesc =3D get_next_zsdesc(s_zsdesc); + if (!s_zsdesc) break; obj_idx =3D 0; continue; --=20 2.41.0 From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 093DEEB64DD for ; Thu, 13 Jul 2023 04:23:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233808AbjGMEX2 (ORCPT ); Thu, 13 Jul 2023 00:23:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33664 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233954AbjGMEW5 (ORCPT ); Thu, 13 Jul 2023 00:22:57 -0400 Received: from mail-oi1-x235.google.com (mail-oi1-x235.google.com [IPv6:2607:f8b0:4864:20::235]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 01E892709 for ; Wed, 12 Jul 2023 21:21:55 -0700 (PDT) Received: by mail-oi1-x235.google.com with SMTP id 5614622812f47-3a425ef874dso298220b6e.0 for ; Wed, 12 Jul 2023 21:21:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222106; x=1691814106; 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=eXM4L6ATnQ4xrg8tTfTjz4QRtMoQblLyPPhiA9zDD8E=; b=M64LK05+hua14coRfSAzgdWbmeWOfjeIcnMe8zHhEEq6QZfU+wicBwfhOlbx7f712p MCCVAAWPzNo3Qc49xeRW05dxjBSHHqRcqunGvYK0pYS6L+gPbY9eAfRpW+PEVWOnMgwm mRuybE0qcPvJWT52YiqJU/z4k9UphElNmJ66v6/+Wy2VTIZ/VE+ED1zF44gtWuANKLX7 OL+nN4m5Z7XRCwbQQdqcMQ3ph1yGrn7MUeyQDVo0XCnzFnLf/zSV9e5SxA0vBgl5vXB/ j/SOEuJk4oFEFhmM39sbUj2Sk4Ip6WU0A4Fa6blAp1QbYef/HX06f5QtVIbQ9YsoBg8G /gVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222106; x=1691814106; 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=eXM4L6ATnQ4xrg8tTfTjz4QRtMoQblLyPPhiA9zDD8E=; b=Y9nT3K9xqSRKLQ++PdcYLtUsSz0LW7bllz6KQMTQRa/JVqJuHSFatGAIzi8XpjXYvV MKoWLqKiCJ8T+Rhd1gfb3oJrUUA0GdubOQR1F+gcaZnJVyrHGv9s/t7E1U2EjIIRfPAv r5PY2TshHKBEZz77qlomTO9nHS1ctyBsxv2BXNfX4TPcx3ALQhN23EcG+kWYbmA0puXQ ZFhzEhXPAhFuds2eXM2lNBF5pk5kSWuudBqLw4R+wOZ6lYfN/k72hGA8qDs8gehZkgsT 60ug57+lgRWyWtxPB8McAdftrfJV2kJvGfKI4H5NYE8eVvwGrsDTrvYwTFDJ09+gtQf7 Wifw== X-Gm-Message-State: ABy/qLb7y8R9OuVqO4BKBnAPhbH4xGLyes2vafnC1Z+R4EpUSTySeTfa vLSeNA+f4vN7AIIq/EMV/VI= X-Google-Smtp-Source: APBJJlG+h4Yqni22gjogscFoMXfmzoSDOy/WAo/NSF0NWCEAbsC70HXke8WrSb7H557DGFEUsgq9Pg== X-Received: by 2002:a05:6808:1246:b0:3a4:17b0:2b12 with SMTP id o6-20020a056808124600b003a417b02b12mr628547oiv.11.1689222106137; Wed, 12 Jul 2023 21:21:46 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.21.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:21:45 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 18/21] mm/zsmalloc: convert get_zspage() to take zsdesc Date: Thu, 13 Jul 2023 13:20:33 +0900 Message-ID: <20230713042037.980211-19-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Now that all users except get_next_page() (which will be removed in later patch) use zsdesc, convert get_zspage() to take zsdesc instead of page. Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index db43a5d05233..6cb216b8564a 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -899,9 +899,9 @@ static int fix_fullness_group(struct size_class *class,= struct zspage *zspage) return newfg; } =20 -static struct zspage *get_zspage(struct page *page) +static struct zspage *get_zspage(struct zsdesc *zsdesc) { - struct zspage *zspage =3D (struct zspage *)page_private(page); + struct zspage *zspage =3D zsdesc->zspage; =20 BUG_ON(zspage->magic !=3D ZSPAGE_MAGIC); return zspage; @@ -909,7 +909,7 @@ static struct zspage *get_zspage(struct page *page) =20 static __maybe_unused struct page *get_next_page(struct page *page) { - struct zspage *zspage =3D get_zspage(page); + struct zspage *zspage =3D get_zspage(page_zsdesc(page)); =20 if (unlikely(ZsHugePage(zspage))) return NULL; @@ -919,7 +919,7 @@ static __maybe_unused struct page *get_next_page(struct= page *page) =20 static __maybe_unused struct zsdesc *get_next_zsdesc(struct zsdesc *zsdesc) { - struct zspage *zspage =3D get_zspage(zsdesc_page(zsdesc)); + struct zspage *zspage =3D get_zspage(zsdesc); =20 if (unlikely(ZsHugePage(zspage))) return NULL; @@ -972,7 +972,7 @@ static inline bool obj_allocated(struct zsdesc *zsdesc,= void *obj, unsigned long *phandle) { unsigned long handle; - struct zspage *zspage =3D get_zspage(zsdesc_page(zsdesc)); + struct zspage *zspage =3D get_zspage(zsdesc); =20 if (unlikely(ZsHugePage(zspage))) { VM_BUG_ON_PAGE(!is_first_zsdesc(zsdesc), zsdesc_page(zsdesc)); @@ -1377,7 +1377,7 @@ void *zs_map_object(struct zs_pool *pool, unsigned lo= ng handle, spin_lock(&pool->lock); obj =3D handle_to_obj(handle); obj_to_location(obj, &zsdesc, &obj_idx); - zspage =3D get_zspage(zsdesc_page(zsdesc)); + zspage =3D get_zspage(zsdesc); =20 /* * migration cannot move any zpages in this zspage. Here, pool->lock @@ -1427,7 +1427,7 @@ void zs_unmap_object(struct zs_pool *pool, unsigned l= ong handle) =20 obj =3D handle_to_obj(handle); obj_to_location(obj, &zsdesc, &obj_idx); - zspage =3D get_zspage(zsdesc_page(zsdesc)); + zspage =3D get_zspage(zsdesc); class =3D zspage_class(pool, zspage); off =3D offset_in_page(class->size * obj_idx); =20 @@ -1591,7 +1591,7 @@ static void obj_free(int class_size, unsigned long ob= j) =20 obj_to_location(obj, &f_zsdesc, &f_objidx); f_offset =3D offset_in_page(class_size * f_objidx); - zspage =3D get_zspage(zsdesc_page(f_zsdesc)); + zspage =3D get_zspage(f_zsdesc); =20 vaddr =3D zsdesc_kmap_atomic(f_zsdesc); link =3D (struct link_free *)(vaddr + f_offset); @@ -1625,7 +1625,7 @@ void zs_free(struct zs_pool *pool, unsigned long hand= le) spin_lock(&pool->lock); obj =3D handle_to_obj(handle); obj_to_zsdesc(obj, &f_zsdesc); - zspage =3D get_zspage(zsdesc_page(f_zsdesc)); + zspage =3D get_zspage(f_zsdesc); class =3D zspage_class(pool, zspage); =20 class_stat_dec(class, ZS_OBJS_INUSE, 1); @@ -1951,7 +1951,7 @@ static bool zs_page_isolate(struct page *page, isolat= e_mode_t mode) */ VM_BUG_ON_PAGE(zsdesc_is_isolated(zsdesc), zsdesc_page(zsdesc)); =20 - zspage =3D get_zspage(zsdesc_page(zsdesc)); + zspage =3D get_zspage(zsdesc); migrate_write_lock(zspage); inc_zspage_isolation(zspage); migrate_write_unlock(zspage); @@ -1985,7 +1985,7 @@ static int zs_page_migrate(struct page *newpage, stru= ct page *page, VM_BUG_ON_PAGE(!zsdesc_is_isolated(zsdesc), zsdesc_page(zsdesc)); =20 /* The page is locked, so this pointer must remain valid */ - zspage =3D get_zspage(zsdesc_page(zsdesc)); + zspage =3D get_zspage(zsdesc); pool =3D zspage->pool; =20 /* @@ -2049,7 +2049,7 @@ static void zs_page_putback(struct page *page) =20 VM_BUG_ON_PAGE(!zsdesc_is_isolated(zsdesc), zsdesc_page(zsdesc)); =20 - zspage =3D get_zspage(zsdesc_page(zsdesc)); + zspage =3D get_zspage(zsdesc); migrate_write_lock(zspage); dec_zspage_isolation(zspage); migrate_write_unlock(zspage); --=20 2.41.0 From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5122AC001B0 for ; Thu, 13 Jul 2023 04:23:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233588AbjGMEXj (ORCPT ); Thu, 13 Jul 2023 00:23:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32806 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233871AbjGMEXG (ORCPT ); Thu, 13 Jul 2023 00:23:06 -0400 Received: from mail-pf1-x429.google.com (mail-pf1-x429.google.com [IPv6:2607:f8b0:4864:20::429]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6D97A3581 for ; Wed, 12 Jul 2023 21:22:03 -0700 (PDT) Received: by mail-pf1-x429.google.com with SMTP id d2e1a72fcca58-666ecb21f86so296704b3a.3 for ; Wed, 12 Jul 2023 21:22:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222109; x=1691814109; 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=Xtrw/YzOEDonF+rRVmBrlDfCDCMTeOToGRvD9RY+bgk=; b=DNDzJeH6+uO2QRQUtNKhlz1aZsrdHRQc3v19UspNEVteBUbKa34CxMu1dDwP8iKgHU 8KF0nWm/6lmyuE7xNphIGmx+lEgQI/KoUbLErDlzkhdMtelyMl9ecW/RcTK1ebr6VO9h WLouJWDpvzbelCRzOX01QxQExmmdG+26259mTxI+kZ14UISGq5hYvhWEt10B4jTr9Y8S E6P23Iy6hI+jrHrFx0fKwUEJQj40SaSOGcqSGfe3z9n/47iE46lajWhiuXM0lGeG7iM2 7WUKg2qQ+SjwVM/EDeGVwxsBI84kTuo9LnBmXX1lcyGbwIdXJ3ckrlw/RMp4VBjFps8m S7xA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222109; x=1691814109; 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=Xtrw/YzOEDonF+rRVmBrlDfCDCMTeOToGRvD9RY+bgk=; b=LX+At9Hguey0g+GW3niNd0PAv5DG5sV7yQ1z6fBWUH/izD1L87Cl38UXA9vMr5OQ8p OV/8aIeVm9XD3kndx/0R1YQ/aONvqDiWumIRQF9ojqXQNC689xpVNIdW28BOgANueHnf YBryPSneTZN86ptzCiUl0xKHRgpeXAmfoYj9S/31htJ29Jhs75lSLajQOqE4UJw0vQJB ExumhGohvx+8OL8fjGyMvincfw5PJi3poQ9L/hNGycL2J0aFAev+xc+4KBPdzuE4kClr x5MVsh1bgxHz7yChXZG7xpqwFsPhWM3F/nXWsA0dKsEC+LcTMkgb6yegT4drPfoBEVza bo6g== X-Gm-Message-State: ABy/qLZRMvyQf0icpoVR8VFxWpbMdXrlifp+091SVpeTCaWmi5Yu6F3r +HeaGrcEd1ekg6c7Ao5o6dU= X-Google-Smtp-Source: APBJJlEipD62xqeH0pCFWBwE+nqF39ivhCrGaqzTXzT0L0e7T5j9i8QrgvKnwAX+1UqrENQc5Txtlw== X-Received: by 2002:a05:6a20:2585:b0:12f:aac7:6f83 with SMTP id k5-20020a056a20258500b0012faac76f83mr419599pzd.42.1689222108958; Wed, 12 Jul 2023 21:21:48 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.21.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:21:48 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 19/21] mm/zsmalloc: convert SetZsPageMovable() to use zsdesc Date: Thu, 13 Jul 2023 13:20:34 +0900 Message-ID: <20230713042037.980211-20-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Convert SetZsPageMovable() to use zsdesc. Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 6cb216b8564a..5f07e3d92a99 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -2117,13 +2117,13 @@ static void init_deferred_free(struct zs_pool *pool) =20 static void SetZsPageMovable(struct zs_pool *pool, struct zspage *zspage) { - struct page *page =3D get_first_page(zspage); + struct zsdesc *zsdesc =3D get_first_zsdesc(zspage); =20 do { - WARN_ON(!trylock_page(page)); - __SetPageMovable(page, &zsmalloc_mops); - unlock_page(page); - } while ((page =3D get_next_page(page)) !=3D NULL); + WARN_ON(!trylock_zsdesc(zsdesc)); + zsdesc_set_movable(zsdesc); + unlock_zsdesc(zsdesc); + } while ((zsdesc =3D get_next_zsdesc(zsdesc)) !=3D NULL); } #else static inline void zs_flush_migration(struct zs_pool *pool) { } --=20 2.41.0 From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6678EEB64DD for ; Thu, 13 Jul 2023 04:23:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233981AbjGMEXn (ORCPT ); Thu, 13 Jul 2023 00:23:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33106 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233673AbjGMEXQ (ORCPT ); Thu, 13 Jul 2023 00:23:16 -0400 Received: from mail-oi1-x229.google.com (mail-oi1-x229.google.com [IPv6:2607:f8b0:4864:20::229]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6B674210A for ; Wed, 12 Jul 2023 21:22:11 -0700 (PDT) Received: by mail-oi1-x229.google.com with SMTP id 5614622812f47-3a04e5baffcso281967b6e.3 for ; Wed, 12 Jul 2023 21:22:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222112; x=1691814112; 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=4hVswznnlp2brrsm/2WMROw2zFXU8NWv1b1UdYi0jsE=; b=nSXeqS1vrLvki3hjRv3NHB0p0a6UYVrNvFV2Ii6YiscGVqtFX14ZQ7AlPeB7kVWfuT Ge3ZUTVOIbie5qSVnUIDRYK5ZuZRUShCVLtmwACUe12u+/VK0t8Wp7Wyie//lJZ6R3P3 ATBNfotR8SP0Km7iZBgdEp7E4T3Q/MMP79/aoXMAyAaawvkpdXL9NDHFTJv4mWqtWThH OXQNsrsDF8u9uBkZ6MjB8IRe64HCUUOxL1HZfUNT4M+aL4cre5gN9Lnsazz5jvXtXeIq rnP3AWKopqiW/8n5yl4b6sivZEy7PdI4jDL8+0SxDcQChTGYh9PyxFfUWVcjO8flw1zE QaPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222112; x=1691814112; 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=4hVswznnlp2brrsm/2WMROw2zFXU8NWv1b1UdYi0jsE=; b=F+ppXGrkBFp2KHsPtOHa6T1MUjBIZ26D660Kv3EgmmcunQZ08Bwz9ViLABngswUgVU TYX3kUekxvak7Gb9y5MX6Pdu0w6q8M7TrtwvIgO8iHUD4T0i/qdqtY2bLtM/ZiqvRyhL 8Ceb3RtrQbLUD8i/8dfpYYmz7QCPwtJBCbX9L6GIm5y+gVvwTjP8YFyj05a8IZVwuXCN f/pZDHkU3CnSVEAATr4y05czDko1GSJPHUphCYYw+tZeLyTKcKUhIK6iqYxHNWSAkFu5 fBmTrYwgxR3C8kCP50uVbrzTrjtzVIUpwC+3cIcoTTMLEJ2WuKTYuivm6yZCsiSNO/p6 BbEQ== X-Gm-Message-State: ABy/qLYVZaIwHmc7uOYSXZd5+9yCtQ8yYGkvapkHvSgU7aT2mOQh+/Ti t0ob7oQDkm7S1ME7eaon1GA= X-Google-Smtp-Source: APBJJlEsoCbaP98J11wpcHR6OQ0qKz+6eqfKR+c0anBTnosUkA3m/LCnjzPgDTpVgsvmVh0LYSoiSQ== X-Received: by 2002:a05:6808:1802:b0:3a2:ee9b:4262 with SMTP id bh2-20020a056808180200b003a2ee9b4262mr595232oib.52.1689222111920; Wed, 12 Jul 2023 21:21:51 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.21.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:21:51 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 20/21] mm/zsmalloc: remove now unused helper functions Date: Thu, 13 Jul 2023 13:20:35 +0900 Message-ID: <20230713042037.980211-21-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" All users of is_first_page(), get_first_page(), get_next_page() are now converted to use new helper functions that takes zsdesc. Remove now unused helper functions. Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 29 +++-------------------------- 1 file changed, 3 insertions(+), 26 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 5f07e3d92a99..3933c023c3c9 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -581,12 +581,7 @@ static DEFINE_PER_CPU(struct mapping_area, zs_map_area= ) =3D { .lock =3D INIT_LOCAL_LOCK(lock), }; =20 -static __maybe_unused int is_first_page(struct page *page) -{ - return PagePrivate(page); -} - -static __maybe_unused int is_first_zsdesc(struct zsdesc *zsdesc) +static int is_first_zsdesc(struct zsdesc *zsdesc) { return PagePrivate(zsdesc_page(zsdesc)); } @@ -603,15 +598,7 @@ static inline void mod_zspage_inuse(struct zspage *zsp= age, int val) zspage->inuse +=3D val; } =20 -static __maybe_unused inline struct page *get_first_page(struct zspage *zs= page) -{ - struct page *first_page =3D zsdesc_page(zspage->first_zsdesc); - - VM_BUG_ON_PAGE(!is_first_page(first_page), first_page); - return first_page; -} - -static __maybe_unused struct zsdesc *get_first_zsdesc(struct zspage *zspag= e) +static struct zsdesc *get_first_zsdesc(struct zspage *zspage) { struct zsdesc *first_zsdesc =3D zspage->first_zsdesc; =20 @@ -907,17 +894,7 @@ static struct zspage *get_zspage(struct zsdesc *zsdesc) return zspage; } =20 -static __maybe_unused struct page *get_next_page(struct page *page) -{ - struct zspage *zspage =3D get_zspage(page_zsdesc(page)); - - if (unlikely(ZsHugePage(zspage))) - return NULL; - - return (struct page *)page->index; -} - -static __maybe_unused struct zsdesc *get_next_zsdesc(struct zsdesc *zsdesc) +static struct zsdesc *get_next_zsdesc(struct zsdesc *zsdesc) { struct zspage *zspage =3D get_zspage(zsdesc); =20 --=20 2.41.0 From nobody Mon Feb 9 08:53:46 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2708BC001B0 for ; Thu, 13 Jul 2023 04:23:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233988AbjGMEXt (ORCPT ); Thu, 13 Jul 2023 00:23:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33634 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233897AbjGMEXR (ORCPT ); Thu, 13 Jul 2023 00:23:17 -0400 Received: from mail-oi1-x229.google.com (mail-oi1-x229.google.com [IPv6:2607:f8b0:4864:20::229]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 414BE268A for ; Wed, 12 Jul 2023 21:22:13 -0700 (PDT) Received: by mail-oi1-x229.google.com with SMTP id 5614622812f47-3a1ebb85f99so321655b6e.2 for ; Wed, 12 Jul 2023 21:22:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689222115; x=1691814115; 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=9MetfO9mrNUCPlQ/wlpQAjWG2Omnt/Jwf7TCm8Zb+zM=; b=jiG6Jx8vCgsZyWAXe3kUGl5Upako6/0pIT2NiUYxygtCnwxrcoeYsPV3i5Gcl5cn2t Bzlf8SSWF8qrdn0f6obQVsRY5ZP7XeiJBPkpH3tvqKSyZPX+hgjuIywu9/nb0UHxSlrM +t5R51ZUMPBPupiQEifFHmBUsv7jqUbvokHGWc8YSWLZ/w8v6wzdSugebG2dLgAC2fTR gztdBFEUkKIoFlpMBPGExShJppDw7+m4z8MBK9yJKnpWGCzRKA2L+50cEp801RXqbY7O ze9c6SdR/EdhnVbqyTexU4Xl8Iqju0TNwJhDPsExbp0wBwSXAFj9+GgZHHn/67yFKj0Q YajA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689222115; x=1691814115; 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=9MetfO9mrNUCPlQ/wlpQAjWG2Omnt/Jwf7TCm8Zb+zM=; b=W7RtGG3w3O/Ah2mRF+H3U033JR5yjAsjeev1gWD4ZOelxqb9s7PJx2O0I3LIsStzYX WijG6KkjKsZ9notZwk2uez5sBWTHTkp+eGaJAriYXI5eEyzlTCuANM7x19ZYbDUB86qx 1lA9RnBesoJl+mkoBLcva/7SaDg6joFYz1vZGvxCTJo/8nDEOy5b5EDWx5FmpuFXnUJ2 GiIH1YgXpXT/PFwLLCB9j0SKOmHt/zZA0249qbFuiCYn+Up1UfTfS9EYqYX6YvfLJ0J0 WzXdHQ33TO0h+ucIEU/0z5EKqVoIoPCqw/UIiyU3B+DTCNBL8RxPrZ/jlZaDAZH2g4Tu qD9Q== X-Gm-Message-State: ABy/qLYfb0x59HAs/0BNcNMWnbivTAeUXDKcU9OIpou7DhzaQifqmAXX U3ykvSkzfVsUlUK7MHsmb9s= X-Google-Smtp-Source: APBJJlHRPVrgCMfgSTQjztNxsY5F6JRQM00POfBtGVR98CC+mRl/WjJQjXMYh+PyKxa4hTDWDnelOQ== X-Received: by 2002:a05:6808:118c:b0:3a3:7248:252a with SMTP id j12-20020a056808118c00b003a37248252amr904978oil.0.1689222114767; Wed, 12 Jul 2023 21:21:54 -0700 (PDT) Received: from fedora.. ([1.245.179.104]) by smtp.gmail.com with ESMTPSA id u18-20020aa78392000000b006827c26f147sm4346601pfm.138.2023.07.12.21.21.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jul 2023 21:21:54 -0700 (PDT) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Matthew Wilcox , Mike Rapoport , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH v2 21/21] mm/zsmalloc: convert {get,set}_first_obj_offset() to use zsdesc Date: Thu, 13 Jul 2023 13:20:36 +0900 Message-ID: <20230713042037.980211-22-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230713042037.980211-1-42.hyeyoo@gmail.com> References: <20230713042037.980211-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Now that all users of {get,set}_first_obj_offset() are converted to use zsdesc, convert them to use zsdesc. Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- mm/zsmalloc.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 3933c023c3c9..7ac5d63e10a5 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -606,14 +606,14 @@ static struct zsdesc *get_first_zsdesc(struct zspage = *zspage) return first_zsdesc; } =20 -static inline unsigned int get_first_obj_offset(struct page *page) +static inline unsigned int get_first_obj_offset(struct zsdesc *zsdesc) { - return page->page_type; + return zsdesc->first_obj_offset; } =20 -static inline void set_first_obj_offset(struct page *page, unsigned int of= fset) +static inline void set_first_obj_offset(struct zsdesc *zsdesc, unsigned in= t offset) { - page->page_type =3D offset; + zsdesc->first_obj_offset =3D offset; } =20 static inline unsigned int get_freeobj(struct zspage *zspage) @@ -1049,7 +1049,7 @@ static void init_zspage(struct size_class *class, str= uct zspage *zspage) struct link_free *link; void *vaddr; =20 - set_first_obj_offset(zsdesc_page(zsdesc), off); + set_first_obj_offset(zsdesc, off); =20 vaddr =3D zsdesc_kmap_atomic(zsdesc); link =3D (struct link_free *)vaddr + off / sizeof(*link); @@ -1699,7 +1699,7 @@ static unsigned long find_alloced_obj(struct size_cla= ss *class, unsigned long handle =3D 0; void *addr =3D zsdesc_kmap_atomic(zsdesc); =20 - offset =3D get_first_obj_offset(zsdesc_page(zsdesc)); + offset =3D get_first_obj_offset(zsdesc); offset +=3D class->size * index; =20 while (offset < PAGE_SIZE) { @@ -1910,8 +1910,8 @@ static void replace_sub_page(struct size_class *class= , struct zspage *zspage, } while ((zsdesc =3D get_next_zsdesc(zsdesc)) !=3D NULL); =20 create_page_chain(class, zspage, zsdescs); - first_obj_offset =3D get_first_obj_offset(zsdesc_page(old_zsdesc)); - set_first_obj_offset(zsdesc_page(new_zsdesc), first_obj_offset); + first_obj_offset =3D get_first_obj_offset(old_zsdesc); + set_first_obj_offset(new_zsdesc, first_obj_offset); if (unlikely(ZsHugePage(zspage))) new_zsdesc->handle =3D old_zsdesc->handle; zsdesc_set_movable(new_zsdesc); @@ -1975,7 +1975,7 @@ static int zs_page_migrate(struct page *newpage, stru= ct page *page, /* the migrate_write_lock protects zpage access via zs_map_object */ migrate_write_lock(zspage); =20 - offset =3D get_first_obj_offset(zsdesc_page(zsdesc)); + offset =3D get_first_obj_offset(zsdesc); s_addr =3D zsdesc_kmap_atomic(zsdesc); =20 /* --=20 2.41.0