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 30ECEC0015E for ; Tue, 15 Aug 2023 03:46:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B4B45900017; Mon, 14 Aug 2023 23:46:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AFBB190000B; Mon, 14 Aug 2023 23:46:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9E979900017; Mon, 14 Aug 2023 23:46:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 8CEC790000B for ; Mon, 14 Aug 2023 23:46:01 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 4E7B914027A for ; Tue, 15 Aug 2023 03:46:01 +0000 (UTC) X-FDA: 81124950522.19.6E73304 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf20.hostedemail.com (Postfix) with ESMTP id B438A1C0005 for ; Tue, 15 Aug 2023 03:45:58 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=bg5cqlPu; dmarc=none; spf=none (imf20.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1692071159; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=tpgOMn6tupkg0P9G8ls5DuN8dJfuULFXJ/njpEhLLnw=; b=1Mz6vJ2/VzhhoLaGyIAgercASZHw4Fdv9u7DXirNhpEYyqhqBL5NoQTFo2INW0uZslHEkC 5IDCNr9qNZpyMYmxjdKQGPaq3i+2kNIvuv7TVSt/4UHe8U5yx04NgScQAI1bCpL2pGjE1g Ne1EjweqPXZbqKkn4CUzCj4X//qpl3I= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=bg5cqlPu; dmarc=none; spf=none (imf20.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1692071159; a=rsa-sha256; cv=none; b=zb5hzX1GBA0dTyXaTNi59tYVz5fiMjf6M2WRyPzwCMG2xwJiYL94YlqlW/lKhZtMvCsqGT C+eR9jY5z5rqOLLx+wscCnovDkuyULaMYo9WnfgZ9t1hqkQ8PQWMoGFADdR4BOwlLCjtB7 1JJjF5w2Q61iEcH1bLSPDgcQO837JSI= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=tpgOMn6tupkg0P9G8ls5DuN8dJfuULFXJ/njpEhLLnw=; b=bg5cqlPueHT6akZgRTTSPMZaUd FHlH+YLGkfAh+RZzgSYetab8tX5v8EHIBsw23fiE9I8HTEDHc2Y7ht1b9XmdYJROmsJkX1AfHDr5b 7dRcEdQxlD1UN1CjlETmirYTv/K5TY/Cu9cgXeOUC23FlK0zhTYqYVnUqi9gmhImLDOdqIguHhbqV ZKmWxB1vPg0ylWCj9/W0DwCHjR+IjsaDKA0GWM+5gmhqlMcLNPEDVE7zVfegzPvrrhsnvC2oHrVtl lOr3stiitSDAgBbRmh4KQ9asUb0esS9iCQUMYXV5qvW2nFUYUSsm7z7pnswzuJYtbw+51hzLdQW9/ mMn8rEpQ==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1qVl0C-005viq-Mf; Tue, 15 Aug 2023 03:45:52 +0000 Date: Tue, 15 Aug 2023 04:45:52 +0100 From: Matthew Wilcox To: Peter Xu Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Mike Kravetz , David Hildenbrand , Andrew Morton , Yu Zhao , Ryan Roberts , Yang Shi , Hugh Dickins , "Kirill A . Shutemov" Subject: Re: [PATCH RFC v2 0/3] mm: Properly document tail pages for a folio Message-ID: References: <20230814184411.330496-1-peterx@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Rspamd-Queue-Id: B438A1C0005 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: txon37ddw6smygwg3cefqrnrdi7qorpi X-HE-Tag: 1692071158-105631 X-HE-Meta: U2FsdGVkX19h8IosWRaebxTercAKULuU9TsS0/4FRAfoTRDLgpkUJO/0PBpZWgcNHUnzsO2Y6AEppYXoZ1IYjCesK2PS2Pp6PsHkpoUE+6o4wH//vV93FrtbOHhgtjyU2fgraY4FWgZHj/Ad6gOJIEqLUV7K/CjZ5HUs/kWB41NeawXRWLF9PSyt+xPzlZVYetpQGhvLdceK6emlC1FuWgDhPJMk7wEWGOdV+DCRSAtk7BDtU6nx01gYYvS19OvTUefeUEp3z38OvbUxAUykpPEDT0Zj3m1zMGbGKLMma4lthsu2C3BkAxEwsh7UcxiFfit+e79aJWFO0mIiL2UzuipaDklZ4EiW1wHetbfqMCpIuA05MwP+1NjX86AIJ5TIHOl64wptTm/8GzVhBU1+y/R9BJyyCnis1olBPGrezcv9jI0taDnH5BOtq9aQoVd+L9SKEBftA+mxN5By0fqBmNEwOmJ2zAHWnipW9CtJig1hi79wsBZgd+xhjou0na64EoTc80diRZ/qQc32znNvBpNFI+lKMx79LElYEYog7b/Jy1v3aoIeqiwiEG+MJ8l/wQtbDQEC/DNU/jHlD/vzUmvYox4K9Bcg/KxTJR8ZRn4J+VJiATkRi/imOsTxtGZx3UE75u1ErlIiFq3uuhc5QLIBQhPoUpUL1ACfjExP50C1laWvF59vg8r7xfXs8wwZYs/OsrbbUUGhQ+E2UPd40kXRi/blp8hKjx/VDa8/V+DSa/FGKiGeZLUfXntdgt9KKzVUhDSNf8W5OaCEQCeh1h4hu4qCBIbED0uewGDLA/4JADc7qI8nDNCUZglKqlJ8+nu/B8OGEwyFY78IkSQIid6sz5l4OrMuFkNvFimpTd/bbucP3kPkGt2arNdc1EDstG+pvKYRnG8AiXE4CnvyPGkH7+PXjyQMwHnse2MX7N8PgpZ4SqL1He6SRWhz2P/halCeI5wsbyvNUDzMQi1 JSEufsx6 XaVuGzZ+4ObzdoSFxEulLFV2epkt7+EAY3vJZx0YoSLmOexYReJt509wZ77DTCWFduIZt/OYVrAqoi/MyXCKi4FM8TPVjm3rVIwt6yxbb4UE0hjlAlNlmd67aphBc9iuNCZu1c0GSaiztisU= 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: On Mon, Aug 14, 2023 at 04:21:55PM -0400, Peter Xu wrote: > On Mon, Aug 14, 2023 at 08:58:44PM +0100, Matthew Wilcox wrote: > > On Mon, Aug 14, 2023 at 02:44:08PM -0400, Peter Xu wrote: > > > > Look, this is all still too complicated. And you're trying to make > > something better that I'm trying to make disappear. I'd really rather > > you spent your time worrying about making userfaultfd use folios > > than faffing with this. > > I saw that internally some of uffd already start to use folio, while I > don't think the syscall part needs changing yet - the ranged API should > work for folio when it comes, and other than that folio should be hidden > and transparent, afaiu. > > Do you mean when large folios can land on anon/shmem we can start to > allocate large folios there for uffd operations? Or something else? Hm, I thought there were some parts that still needed to be converted. But I don't see anything obvious right now. > > @@ -360,6 +363,7 @@ struct folio { > > unsigned long _head_2a; > > /* public: */ > > struct list_head _deferred_list; > > + /* three more words available here */ > > .. not really three more words here but 2 for 32 bits and 1 for 64 bits. > In my patch 3 I used "8 bytes free" so it's applicable to both. I always forget about THP_SWAP using tail->private. That actually needs to be asserted by the compiler, not just documented. Something along these lines. diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index 659c7b84726c..3880b3f2e321 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h @@ -340,8 +340,11 @@ struct folio { atomic_t _pincount; #ifdef CONFIG_64BIT unsigned int _folio_nr_pages; -#endif + /* 4 byte gap here */ /* private: the union with struct page is transitional */ + /* Fix THP_SWAP to not use tail->private */ + unsigned long _private_1; +#endif }; struct page __page_1; }; @@ -362,6 +365,9 @@ struct folio { /* public: */ struct list_head _deferred_list; /* private: the union with struct page is transitional */ + unsigned long _avail_2a; + /* Fix THP_SWAP to not use tail->private */ + unsigned long _private_2a; }; struct page __page_2; }; @@ -386,12 +392,18 @@ FOLIO_MATCH(memcg_data, memcg_data); offsetof(struct page, pg) + sizeof(struct page)) FOLIO_MATCH(flags, _flags_1); FOLIO_MATCH(compound_head, _head_1); +#ifdef CONFIG_64BIT +FOLIO_MATCH(private, _private_1); +#endif #undef FOLIO_MATCH #define FOLIO_MATCH(pg, fl) \ static_assert(offsetof(struct folio, fl) == \ offsetof(struct page, pg) + 2 * sizeof(struct page)) FOLIO_MATCH(flags, _flags_2); FOLIO_MATCH(compound_head, _head_2); +FOLIO_MATCH(flags, _flags_2a); +FOLIO_MATCH(compound_head, _head_2a); +FOLIO_MATCH(private, _private_2a); #undef FOLIO_MATCH /* This is against the patchset I just posted which frees up a word in the first tail page.