From patchwork Wed May 22 21:03:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Hildenbrand X-Patchwork-Id: 13671083 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 EB04BC25B78 for ; Wed, 22 May 2024 21:04:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 81CF96B009F; Wed, 22 May 2024 17:04:13 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7CC266B00A0; Wed, 22 May 2024 17:04:13 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 694406B00A1; Wed, 22 May 2024 17:04:13 -0400 (EDT) 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 4874F6B009F for ; Wed, 22 May 2024 17:04:13 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id BD2C2A4B82 for ; Wed, 22 May 2024 21:04:12 +0000 (UTC) X-FDA: 82147259544.02.7254174 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf25.hostedemail.com (Postfix) with ESMTP id 11EB9A0008 for ; Wed, 22 May 2024 21:04:10 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=LhsJd9Qb; spf=pass (imf25.hostedemail.com: domain of david@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=david@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1716411851; a=rsa-sha256; cv=none; b=XgG3QU9VgP7affAilJxpHfiZuX0u2onai6/jBNbKk44yWiYBdP12rAlvnn2qLDQXjO9R76 L2Z/vJMAcaKLiyO9qn5LRDb8h9+sPpQB/KzpsgB4Jdj2htUVcUcCqOtl/3R5q3fyOF3ZfW kHFjxBUoyua0p3cXgw7pQ20MVkKv7aU= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=LhsJd9Qb; spf=pass (imf25.hostedemail.com: domain of david@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=david@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1716411851; 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=bs73/DhQAjKCEOqgI5WjSruY0e+O/eQEazhESJihTfc=; b=ftzBeDyBEsCTcnGdgqRnAchrQOUXBXa3WpgsYFyf7g1+y5fwv3aCWXpNSdedGJ2I/eWQ2F YIqTtUbMzdnnkrb9H+MuQhERHSAcnSBHx4gk3+4/4R+uiU7SreSYuBdtT91CWpmQX0onPm VHMLOjla7byVCd23AiNpvfLnLFQIzrc= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1716411850; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=bs73/DhQAjKCEOqgI5WjSruY0e+O/eQEazhESJihTfc=; b=LhsJd9QbkCpmzUyoTqYWnVRq1BtoeiUn1vI6cDCN2pN0DrCXLZP/nZ6HDwzWzPGULu22XI kHPPh3ZZbbZJWNW62Y/x4Z30oPpmfT1vJcYr7vTbA+5/m3W7ocr6bFFYMWaTceSAxbSaMX 1QrsoPLy1hdt1UXGu6LNGilq6wEZSLY= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-515-HtzN_wyHOzWPGa337eP5gw-1; Wed, 22 May 2024 17:03:50 -0400 X-MC-Unique: HtzN_wyHOzWPGa337eP5gw-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 6B0D6185A78E; Wed, 22 May 2024 21:03:50 +0000 (UTC) Received: from t14s.fritz.box (unknown [10.39.192.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2949B7414; Wed, 22 May 2024 21:03:47 +0000 (UTC) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, David Hildenbrand , Andrew Morton , "Matthew Wilcox (Oracle)" , Mike Rapoport , Minchan Kim , Sergey Senozhatsky , Hyeonggon Yoo <42.hyeyoo@gmail.com> Subject: [PATCH RFC 2/6] mm: allow reuse of the lower 16bit of the page type with an actual type Date: Wed, 22 May 2024 23:03:37 +0200 Message-ID: <20240522210341.1030552-3-david@redhat.com> In-Reply-To: <20240522210341.1030552-1-david@redhat.com> References: <20240522210341.1030552-1-david@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.5 X-Rspamd-Queue-Id: 11EB9A0008 X-Rspam-User: X-Rspamd-Server: rspam12 X-Stat-Signature: x89grgemai564d79915fs3kcjuxymcf6 X-HE-Tag: 1716411850-139424 X-HE-Meta: U2FsdGVkX1/aBXmkC7T1FEXrAiPoMU+QGhblWXFruLXSKXsNis0fxBG2B90kOuhpxsXvI9bOnlw1uHw83Bpl6//ZjG5HcVESHiT+vAXCZZIDoRp24vIHjt5n/RdX8Bez+ngUi02y7GHDegnCFMn26N2bC1UprIqSe5khPRP6WswJ5+o2NO7/K7ijFe+cA5ZyNQVOBGPmysBXSSdF+Qgv42DmttXWD3mtIDg7URKodBZ3xjO+kYJI4cnCZOQGeR+nzFDSeOeFjoOwDXWQXmhbHsgbULrqM9afYHrvqmHQpLYMNMXghwYnzszp/QCm5iaYxA20i1rn3UwjD3RBcSQ9FlRvxTVBoBQEsrycLqT+GO2Xfr9xaoOFxBbsVzHAYlZq8gKN+o773VmCrxGuchRkgx2dijWGZBCBzyUxnfieA9CR/vymOvYGXZeCMB4Xax9ogoNm0JsxwMGksv0lNmM/vHDf5yMgnQhNKAFyP6cmizXU6DImCwq8kuffUVKxY5VFuzVLs5RBjjsH5VwSkhR4H7OvzcN3N7PhqpFfUaUdZT6Bc8yOCdM4jBQ6f6/kWeiv/hh8Q7Evm+cMHpb81MEJT5sxMJIMHvFUzaGX2ZWNALNvGENUkM7SgjnZDVJUf5iG03KMZuRSlPPMYuKfgDuqGXTsiY09WLbVspQVZCLZ2I7/NgMF6OkYNrxAbx80M5wfjWPrkeiT9f34Bof8wgHxKuxg9J4y2bnVOtEGj86q9r0VbnacxOYdjOWTudQCxtPkgKPqBKkm9ujvsuqYEzfKgT0HT+h6uH2Wbw1jz5/GoodL1EWF4xuN9E9xFD5eT8M3W6XMHOqEt+ELNbCukz7WzdTv3Zvm5uyKb8n7inNJeYWb8FlWBN1N6lH2/+JXKUL8QnUrJbTIPNaAK2aWumcYkzKe0d+K1mutY4sPO/pOcyZkJZ9tClj27r9nV/qlVn01QRe8YwXYIycjDUFnijV vzdHsWmh TVrgBh02oQkPPVtN1au786zaA74TnfxFzX5ydY1SxzztiZ9sz8Y9/pgnA+Y/PKNQgMNkT2SxFmLXy7Tw25aTWIDZo3mik6zjfiyM8ruJnhI2NP/BcnLnCbDfhboa/VYsmMJrwk5qC5frCQGm7P5rUfgRG3C7o6O1cYFnqe2UzlDlRi0B6pskuZ+ZjFgbXBXJdv+LPUV6QgnsXrp518iApwyTqDvqwgJd6xCZYsxYIF6tE4BIv05Bj9+ZG40D8JqZlHLtb6GFSpmBIZ4jFFFi8G7rW3w== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: As long as the owner sets a page type first, we can allow reuse of the lower 16bit! Restrict it to the head page. We'll use that for zsmalloc next, to set a proper type while still reusing that field to store information that cannot go elsewhere for now. Fear of running out of bits for storing the actual type? Actually, we don't need one bit per type, we could store a single value instead. Signed-off-by: David Hildenbrand Signed-off-by: David Hildenbrand --- include/linux/mm_types.h | 5 +++++ include/linux/page-flags.h | 22 ++++++++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index 532a3030405d..6dae8e15037b 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h @@ -168,6 +168,11 @@ struct page { * * See page-flags.h for a list of page types which are currently * stored here. + * + * Owners of typed folios may reuse the lower 16bit of the + * head page page_type field after setting the page type, + * but must reset these 16 bit to -1 before clearing the + * page type. */ unsigned int page_type; }; diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 104078afe0b1..ed9ac4b5233d 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -942,17 +942,23 @@ PAGEFLAG_FALSE(HasHWPoisoned, has_hwpoisoned) * __ClearPageFoo *sets* the bit used for PageFoo. We reserve a few high and * low bits so that an underflow or overflow of _mapcount won't be * mistaken for a page type value. + * + * The highest bit must always be 1, to make page_has_type() work as expected. */ #define PAGE_TYPE_BASE 0xf0000000 -/* Reserve 0x0000007f to catch underflows of _mapcount */ -#define PAGE_MAPCOUNT_RESERVE -128 -#define PG_buddy 0x00000080 -#define PG_offline 0x00000100 -#define PG_table 0x00000200 -#define PG_guard 0x00000400 -#define PG_hugetlb 0x00000800 -#define PG_slab 0x00001000 +/* + * Reserve 0x0000ffff to catch underflows of _mapcount and + * allow owners that set a type to reuse the lower 16 bit for their own + * purposes. + */ +#define PAGE_MAPCOUNT_RESERVE -65536 +#define PG_buddy 0x00010080 +#define PG_offline 0x00020000 +#define PG_table 0x00040000 +#define PG_guard 0x00080000 +#define PG_hugetlb 0x00100800 +#define PG_slab 0x00200000 #define PageType(page, flag) \ ((page->page_type & (PAGE_TYPE_BASE | flag)) == PAGE_TYPE_BASE)