From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 335863AEF3D for ; Tue, 4 Aug 2026 22:23:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785882225; cv=none; b=tX6GytP4ZUiCJdvraaPZHhHvwXu+JzpHvkmxpWhvo3VNf5VtVWv+fKzB9iBbGGpxDGNsAyk+8fGFPiAy58inYCUEejyrg1J6VPn/jXWZUJwMBvrKYB8kSiasGD3UtRchBsmOHTcJz4MBZpJ8rSdXoEYsxnrVU2f9um8joyiGxzk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785882225; c=relaxed/simple; bh=hbGs/PS5HtT8vHi+PTuX+K67vbZcbJmAcRhiu6WHSgI=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=PB0t5fuT976oUEOU37jpKejWxGhp06+EThI7BPqq3qkGCIv2A691g7p8kjcVJN56Q1yYgkRzA85z/81cU3wHtCL6fXm4B7dBNaGlzuJT131Tt+13yVwKkQTh2c3HyeHpMw82KHPFiVB89lZ5t7NWKdk5KYvQ2zOlDJ6dsbSUz3o= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mOhYh+q6; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="mOhYh+q6" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B62A81F000E9; Tue, 4 Aug 2026 22:23:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785882223; bh=YDuligrWm3GQ1Hajj0YRyyRR0KMoYVN0stn9doAF0/0=; h=Date:From:To:Cc:Subject:References:In-Reply-To; b=mOhYh+q64mgLa9mE9b00qnIiZUBxEnuTjNasZESqshmBlJAbsbKwmaJ+HinFaGema +CZ4odWQIsG6Rjgey50luzivYAivATdovO59sXCxF8tetSYLdbwyzdtzFHiZLmBPnt iiQxpRJ7vsYyMSKcx8Ll1OHbZiWOJm2qRm8eSmxSiVYOuAmXdO9zxMND9tinSfOxG6 v4Y0mrFrQNeslxU9zisxnqjDRTXtsJNh4NvVU9Gl5rHdq9PODuJlc4i+RKpcuqBv09 LBq+R/Z2WMsMwX8stlPy/ajjNGMHOHGjO/9Y1gdU0DtOw0b2a9X+GMSL4iGFHfB1by mJcs3HM0tBIow== Date: Tue, 4 Aug 2026 22:23:41 +0000 From: Yosry Ahmed To: Brendan Jackman Cc: Borislav Petkov , Dave Hansen , Peter Zijlstra , Andrew Morton , David Hildenbrand , Vlastimil Babka , Mike Rapoport , Wei Xu , Johannes Weiner , Zi Yan , Lorenzo Stoakes , linux-mm@kvack.org, linux-kernel@vger.kernel.org, x86@kernel.org, Sumit Garg , Will Deacon , rientjes@google.com, "Kalyazin, Nikita" , patrick.roy@linux.dev, "Itazuri, Takahiro" , Andy Lutomirski , David Kaplan , Thomas Gleixner , Patrick Bellasi , Reiji Watanabe , Sean Christopherson Subject: Re: [PATCH v3 13/26] mm: introduce freetype_t Message-ID: References: <20260726-page_alloc-unmapped-v3-0-6f5729aa9832@google.com> <20260726-page_alloc-unmapped-v3-13-6f5729aa9832@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260726-page_alloc-unmapped-v3-13-6f5729aa9832@google.com> > @@ -179,24 +180,62 @@ static inline bool migratetype_is_mergeable(int mt) > > #define for_each_free_list(list, zone, order) \ > for (order = 0; order < NR_PAGE_ORDERS; order++) \ > - for (unsigned int __type = 0; \ > - __type < MIGRATE_TYPES && \ > - (list = &(zone)->free_area[order].free_list[__type], 1); \ > - __type++) > + for (unsigned int __idx = 0; \ > + __idx < NR_FREETYPE_IDXS && \ > + (list = &(zone)->free_area[order].free_list[__idx], 1); \ > + __idx++) > + > +static inline freetype_t migrate_to_freetype(enum migratetype mt, > + unsigned int flags) > +{ > + freetype_t freetype; > + > + /* No flags supported yet. */ > + VM_WARN_ON_ONCE(flags); > + > + freetype.migratetype = mt; > + return freetype; > +} > + > +static inline enum migratetype free_to_migratetype(freetype_t freetype) > +{ > + return freetype.migratetype; > +} > + > +/* Convenience helper, return the freetype modified to have the migratetype. */ > +static inline freetype_t freetype_with_migrate(freetype_t freetype, > + enum migratetype migratetype) > +{ > + return migrate_to_freetype(migratetype, freetype_flags(freetype)); > +} > > extern int page_group_by_mobility_disabled; > > +freetype_t get_pfnblock_freetype(const struct page *page, unsigned long pfn); > + > #define get_pageblock_migratetype(page) \ > get_pfnblock_migratetype(page, page_to_pfn(page)) > > +#define get_pageblock_freetype(page) \ > + get_pfnblock_freetype(page, page_to_pfn(page)) > + > #define folio_migratetype(folio) \ > get_pageblock_migratetype(&folio->page) > > struct free_area { > - struct list_head free_list[MIGRATE_TYPES]; > + struct list_head free_list[NR_FREETYPE_IDXS]; > unsigned long nr_free; > }; > > +static inline > +struct list_head *free_area_list(struct free_area *area, freetype_t type) > +{ > + int idx = freetype_idx(type); > + > + VM_WARN_ON(idx < 0); > + return &area->free_list[idx]; Should we return NULL here if idx < 0 instead of an out of bounds access?