From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 80171C64EC4 for ; Mon, 20 Feb 2023 13:22:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0AB7B6B0074; Mon, 20 Feb 2023 08:22:40 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 0350D6B0075; Mon, 20 Feb 2023 08:22:39 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E3F346B0078; Mon, 20 Feb 2023 08:22:39 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id D6A686B0074 for ; Mon, 20 Feb 2023 08:22:39 -0500 (EST) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 8F410160331 for ; Mon, 20 Feb 2023 13:22:39 +0000 (UTC) X-FDA: 80487734838.12.9980665 Received: from mail-pj1-f44.google.com (mail-pj1-f44.google.com [209.85.216.44]) by imf05.hostedemail.com (Postfix) with ESMTP id BD968100017 for ; Mon, 20 Feb 2023 13:22:37 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=pn6D6oHP; spf=pass (imf05.hostedemail.com: domain of 42.hyeyoo@gmail.com designates 209.85.216.44 as permitted sender) smtp.mailfrom=42.hyeyoo@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1676899357; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=SyI5UBLGHCPpade/daMIpbi7gnFelltbgYK3ypTZA7o=; b=LLmjgCaJ9CInaKnuaT3YsfI5ZBCaG9StctxcTlUX9ygXpyaao956SHVuCuFcQAMY0CUIpv 9BTUexXtP7qpGsZvR0bGw89KsYBU5Y7Sep4Ufp36ThJhVv45oOHC6Rx+QDo8373UEg3U/3 rV82dZCAXdH0/67WdcUecrNTP7mxFjc= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=pn6D6oHP; spf=pass (imf05.hostedemail.com: domain of 42.hyeyoo@gmail.com designates 209.85.216.44 as permitted sender) smtp.mailfrom=42.hyeyoo@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1676899357; a=rsa-sha256; cv=none; b=RsLU6Uvqi7E5xv3+Ie6vtiHK1+OlX6UJyLDZaEOtulxEVzsbyGS8L26w+mt0CNu4+iIvh3 kaLnbGhmKVrXZkKLjhuNpRf68W0y2JhXhchg2dtCvZhGSvtzq0zRiDYqXW4XgBIfXyFWPV uRkgEjCv2wUwJ1GWuCm+gcV0nwu7rkU= Received: by mail-pj1-f44.google.com with SMTP id il18-20020a17090b165200b0023127b2d602so1441779pjb.2 for ; Mon, 20 Feb 2023 05:22:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; 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=SyI5UBLGHCPpade/daMIpbi7gnFelltbgYK3ypTZA7o=; b=pn6D6oHPX+xMRyXM3iSn//UFTBloJ3AqSwCf/EzSLd9H+TYt8nlSS8FsHRALgywjrn oPQxL+uC0Sc4Jf9dBF7vmJYW3QeA6Zq6aEBu8Fq5MTxgz1Qi1pSBS2c+0vSrlNosWQ1L J0WfBAfSIdCAqiYKfzk7vVK1RI57OOIqJZYGqnPsc7z+yZZumbtqGinTjwrkmxHvf/0F CPAZFqOe8o9q0mnzyqVRn6Qyk2ba9fS9ao6m4ywNh1Y0kTzVktRncfWXJPS7ClpCMyaJ flYvgMZGCtN5pYYy8z1FHjH3PlyZS8t8lbYmvkrDaG2+d0Xj1N6ygmJlMzZ/vtXDkeaY SzDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=SyI5UBLGHCPpade/daMIpbi7gnFelltbgYK3ypTZA7o=; b=yDckTjneCPzhB0k1/gAscWnS489OSMoyfOMxoA5NWew0jP8Fn0/2f5ehSqPY4CzaJJ F/TixHifojxCxIPsTnnVW6csybEkeifdw8IXXYpxMsXTqn7I+SCuQwmp5+U0P4ZPC+xu y29vjjT0qIVB3ohzTALrzN7SS4nJYIc7jzMnyvBu0/jeDKC0NX1Lw3Qr6BGfSeyexs3a 6GNvjGMkuY45imnaRQriOhFvhI2ufkKjllJHeKf/YOfYB7N16DzAJAOFnvh9jR+XOelh Ae7UKDg6o5eKK0O6z+QJs7jJpyH1JiVkNNyPKcMvHq5T7lO1TIu13u6a48/oJZOAUcQ7 RG+w== X-Gm-Message-State: AO0yUKXFEbNslNGiAfFYJYY0SnKqf2vq0f0IZWjoar10ezZVj0DvEf3N vEVF7FW7M6P5lMErOwaEAqc= X-Google-Smtp-Source: AK7set92kAEEjQDSSqAJ0JvhyLjfPKZceHVt/Bl4hw2AqNzFqv6hCJJ4LaGS3DJpsfn20LKslqtSzQ== X-Received: by 2002:a17:902:f68e:b0:196:7bfb:f0d1 with SMTP id l14-20020a170902f68e00b001967bfbf0d1mr3694194plg.34.1676899356321; Mon, 20 Feb 2023 05:22:36 -0800 (PST) Received: from test-ha.kr-central-1.c.kakaoi.io ([210.109.63.229]) by smtp.gmail.com with ESMTPSA id x2-20020a170902fe8200b0019c13d032d8sm6125436plm.253.2023.02.20.05.22.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Feb 2023 05:22:35 -0800 (PST) From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Minchan Kim , Sergey Senozhatsky , Matthew Wilcox Cc: Andrew Morton , linux-mm@kvack.org, Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [RFC PATCH 01/25] mm/zsmalloc: create new struct zsdesc Date: Mon, 20 Feb 2023 13:21:54 +0000 Message-Id: <20230220132218.546369-2-42.hyeyoo@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230220132218.546369-1-42.hyeyoo@gmail.com> References: <20230220132218.546369-1-42.hyeyoo@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: BD968100017 X-Stat-Signature: 3n1citfi6prda53cqow4goymdmtuzwyt X-Rspam-User: X-HE-Tag: 1676899357-987979 X-HE-Meta: U2FsdGVkX1+wL8IEEwXR4cgcXQQqULLODbVMHUQwrasWZBYRn7lCZg48fV+9rmRdBHAEEeZT95JM/n1oU7/6xYYSPmnE/HXRIEkEyPIhFWcEMNkyAiKaGjd7AQ4fMsISqZaEb92abCxqFP8iYuOfk3YFqlbTEkljKnVZxtQ9/XecYyFfA6kMt7M2byqYIVzD7NHOropKQWYfJRgJsEzVxvQsLcNr9qOpVVHTkkebDQk8PJiK2EHgBtkgUtZRwSbO5K5+osMcvpT7XPQwOqFL7DcYsBW9EhyUEHthTYuA4Q9gB8iK8dHqAHXy6ZGsytbiobdq6fVr1cddl1kmYhjrZYa1XW0gAmKa+vgpgYi2rgTy2Xlt4QxiwRb3YvhJZJ/w39EXIcGMNb5UUH+cOVUagV53Bl+4UsyD3lGn+a4KymGDfeGv3aIHEq2htrP/BhuIko4yCmNf+Obv1SUNjGb7PLy64E42rzaRtQ/BFaVz7mBsxFx/k2DLIKtJ2szKPFe4lYPomyF0tEBAO9vQEilcqsL2N+uOkFkyyZX9THc8zuz9HlJKmr8YYbCBq8h8EW4pHBbZU3doBXdmKiig7eNrM8vcLJ1qhumrLM7Sn3hYC1WD2WgZ5PvadoVJSg9ZSRtzwIuRH1rnMTV67yM6mD40by6x1pTv/cms8y/TbvN86SZZtN3AkysUEbFh8uSHDlJFnrQJhRiBSUqI8COt2pqI65TLf6Txdk92XuKRjVD3Q7v9A8gAlVdX5M/T5hxEcg9ZIwJ1tZ6qoHNmGVJdy3vCCVcPraAbY9muqMRqC9XhnYYx8P5ReNaHVT+jtPz7MtkYI0ACRbjBRRvHJX7bqpAV3txyMK+1hU454Bcl7u6ZiQ9bUoQhEpf1qre6NqYq5SQPWkhCfO1xCrGHLAasfyTlAQd6wXK2ZATJAvP7G8oUL+oaFUo/2WQiNHAB5+RaCVObWb4/r5WdfibRQ2J+7rJ CLVRGhlt mcHcS/Bxs6+tbenwIOV2CKEOcvYqcizPaspWfZgqqDC4SmJ+YiNVDsAviIiTk+fY+hOgeNaJdFEdDLQwX88j+SRzRyXA2WX78uk6LabPvG+TDhptGtJyP8ufZfmCvY9FQKrZWofxNfkZslPO4JUO+v/Mq71cpj9IeiM3tE+IYQWTm0X8I5fE/lF1nYMEUDNAwsBI0gGvA5IH6kEqVpiesCh92embprIk3JEwCnVJwb5wwyqMHbiWsL/lf72MRKek/7pZYlyQGVGFO2b7LscMVWnN6wTQoJa09lrFIlBhJkxOhcCjk13V8tvtCyKNbKUCrEVTFNl5WBVzekS7bfvW+efWDQXZPSvOHCRBgvm+lvRt28D/hMP+K2UywyHaUFFcMz6MdPOImrR+EDNDmnOLycbFUEik5B4FIO3RFJfYE0svrQd4mpVLTY3CluZfMKdel3AcmdnVqUaZdRgZHVQWmPTZJ7G/4WgnpcdsxoypuzDZztxf2Yxx6hn+Oqb6ZUXUtRNBorYDzgAioQioMutkaWHSkp6ygs78Q36CHYV965xX5On2XJS0mUfgX0Q== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: 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 3aed46ab7e6c..e2e34992c439 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -11,23 +11,6 @@ * Released under the terms of GNU General Public License Version 2.0 */ -/* - * Following is how we use various fields and flags of underlying - * struct page(s) to form a zspage. - * - * Usage of struct page fields: - * page->private: points to zspage - * page->index: links together all component pages of a zspage - * For the huge page, this is always 0, so we use this field - * to store handle. - * page->page_type: first object offset in a subpage of zspage - * - * Usage of struct page flags: - * PG_private: identifies the first component page - * PG_owner_priv_1: identifies the huge component page - * - */ - #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt /* @@ -303,6 +286,52 @@ struct mapping_area { enum zs_mapmode vm_mm; /* mapping mode */ }; +/* + * 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 migration + * 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) == 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) <= sizeof(struct page)); + /* huge object: pages_per_zspage == 1 && maxobj_per_zspage == 1 */ static void SetZsHugePage(struct zspage *zspage) { -- 2.25.1