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 E488EC021A4 for ; Fri, 14 Feb 2025 17:20:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7B06F280007; Fri, 14 Feb 2025 12:20:40 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 71266280004; Fri, 14 Feb 2025 12:20:40 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 565A3280007; Fri, 14 Feb 2025 12:20:40 -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 3216E280004 for ; Fri, 14 Feb 2025 12:20:40 -0500 (EST) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id CD61EB0D47 for ; Fri, 14 Feb 2025 17:20:39 +0000 (UTC) X-FDA: 83119214598.01.8E2FFEE Received: from mail-qt1-f174.google.com (mail-qt1-f174.google.com [209.85.160.174]) by imf30.hostedemail.com (Postfix) with ESMTP id B6AD880014 for ; Fri, 14 Feb 2025 17:20:37 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=cmpxchg-org.20230601.gappssmtp.com header.s=20230601 header.b=K3jc7uic; spf=pass (imf30.hostedemail.com: domain of hannes@cmpxchg.org designates 209.85.160.174 as permitted sender) smtp.mailfrom=hannes@cmpxchg.org; dmarc=pass (policy=none) header.from=cmpxchg.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739553638; 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=+WVkzj3W35ksC2Q0LSJkzIeq5cPfQkeGpHe47IdtgQ4=; b=ePXz2g2rPan72O1g2n+aDRkww1KCSzvV0ZKiOa0JAbJlE5eCGpLOg7POedn8cHMikTqa1F Sh6pMg90PylCb799+5OLRWjF4DsOPzp31iIwoIckQV+esYZ9RFcoxBAG6J5WK2aCCgAuBu 2uEVuPnXj5l8HV86TF1aUyYavyeej/Y= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739553638; a=rsa-sha256; cv=none; b=q6qlfeHmIjb60l7NMHE/RRTgAJBpBjRVycQL1+ww8YWYCXguVwsEyM0eggoLGcaeUJL+/J Y1a4DSEaEgpOzw9TslbeFHKZagPnSisuDmOmx1FSAboBQH8Qwa8L/XVPjMyrqK60xv6kiA ckr6ff7f/FDutLCsD+EGyTUKzkmG+Rk= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=cmpxchg-org.20230601.gappssmtp.com header.s=20230601 header.b=K3jc7uic; spf=pass (imf30.hostedemail.com: domain of hannes@cmpxchg.org designates 209.85.160.174 as permitted sender) smtp.mailfrom=hannes@cmpxchg.org; dmarc=pass (policy=none) header.from=cmpxchg.org Received: by mail-qt1-f174.google.com with SMTP id d75a77b69052e-46fee2b9c7aso18888251cf.2 for ; Fri, 14 Feb 2025 09:20:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cmpxchg-org.20230601.gappssmtp.com; s=20230601; t=1739553637; x=1740158437; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=+WVkzj3W35ksC2Q0LSJkzIeq5cPfQkeGpHe47IdtgQ4=; b=K3jc7uicQ8wS2k8hAlK89BMHuZDqUKXqqJLSMYOPI0c0Vu4lg77O8P9MBsJaXQGADR 8xoKB4hoMgi0GuOebznIrxgn/scyXYoUmJZMeMJXF+VTf7f2EZZzQ3sOZfMNb/5uTlxr JfTxAPXGNc4J7DLx99U7/IO9DaFShib9iFM0hIk71lzOGiN+2MWxZRraisIWH+c0/BHe wcneHPwRqO9JhpCJaMyeDdPBTKfEFTIQP1F87+yBEdAgLq4gkzh7t5VueiJYWEcFYkit YiCvdAlD2Te6tY3GLZNbO/h0BrbEBozK+JXfyxsqFwhEu26g8xburt3QWgIN4OvYJ6bu Q6MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739553637; x=1740158437; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=+WVkzj3W35ksC2Q0LSJkzIeq5cPfQkeGpHe47IdtgQ4=; b=RpdvFp9UqFX0m04OM1lp8APb2vpB2Rsc3QZ1A+YmWvJ0zApMaXWd/IH6K1l15PVytT Bn7KRW0goIuu514V7GeXa+cOnvhCklnTUA/PH6KufHLK8O9DXQTdMd6BelTgC0+hhgco LbaxUR1J8WqMxE5dy+86jj1ybu7yLGGUSVFb96cW5GfE2uDR6TltfDDpVXs6DDTehtAL IqUgMYonPBTVmAtjRsMgs7VvZJJNkLkP2aoJ2nS9nyWFn2al54+WmJYhgSDZUeedTJOU w9WF4uDFKCvzeO9jEkavWed8sBMVW3fNhATNmAWq7hSd+TU6txPqQITs1VZxgcYZWGl/ D8fw== X-Gm-Message-State: AOJu0Yxugnni8TfhbScZPSj1Esh7eWc3LFgfHLNaRh/vhLBH9RWeeSdr LmLEy1tRyipE8jI9YKrzPoJfK0pJxEfkybWxVJJl8xv7SFhQU7n2izl0MArjK2Y= X-Gm-Gg: ASbGncsCe+PcLia5CkSdxstlzZQAcHrsk3dfboF381PqqFOfGZQDLf2dxeM2AYpZKMg fQALrButzIQHYGryVLqE80/3qIBLTuG8GnmbxAzj4tPx2fEOp0ixXQ24hO1yA3nLSqPIth/XsjT gABB8mGgf8w0DeX3EVJO0ou2mm4H9ab7ATOnSU5187aSVwQz4qfoDW4WpNxlYUX8pYWoCZZDYXo BTLAwVc/+T03yq0FAgWsLmc32Qt+UKGr2bSt/aF/Q6o8lWQwVKEGuUl83wsiHAJ4vxN0Cd1Pqlk jy/7sl3djkIvTA== X-Google-Smtp-Source: AGHT+IEfP2No6YtmM8ekpuXeOM+ZQKYz8NNrVM/VTB4q0JY4WMrcdrPqF3XRNKQUatLdTYn9ckBCbA== X-Received: by 2002:a05:6214:27e2:b0:6d8:916b:1caa with SMTP id 6a1803df08f44-6e66cce6e34mr273476d6.27.1739553636676; Fri, 14 Feb 2025 09:20:36 -0800 (PST) Received: from localhost ([2603:7000:c01:2716:da5e:d3ff:fee7:26e7]) by smtp.gmail.com with UTF8SMTPSA id 6a1803df08f44-6e65d78492bsm22992346d6.31.2025.02.14.09.20.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Feb 2025 09:20:36 -0800 (PST) Date: Fri, 14 Feb 2025 12:20:32 -0500 From: Johannes Weiner To: Zi Yan Cc: linux-mm@kvack.org, David Hildenbrand , Oscar Salvador , Vlastimil Babka , Baolin Wang , "Kirill A. Shutemov" , Mel Gorman , linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 2/4] mm/page_isolation: remove migratetype from move_freepages_block_isolate() Message-ID: <20250214172032.GA241035@cmpxchg.org> References: <20250214154215.717537-1-ziy@nvidia.com> <20250214154215.717537-3-ziy@nvidia.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20250214154215.717537-3-ziy@nvidia.com> X-Rspam-User: X-Rspamd-Queue-Id: B6AD880014 X-Rspamd-Server: rspam07 X-Stat-Signature: rmwewronhsmzezqgixtmdknstnczmzkj X-HE-Tag: 1739553637-734317 X-HE-Meta: U2FsdGVkX19/4Ph6Amf6paHYBUE7zHqjAAciwJJadhn1F2EpvKj2plHPN/DKFryiTMtlf9E+aCAnYnmz2m6mNaXqzW3/Yz44RePJIGyjmZ2WPUeo+Rx9sYyGGpPoXCQcpLPIIzvyJncUMvAuwpy1SJcjnAyK6cZeJEWKWcs8InXt5Cl+rqkaHiecOuXfNNtRHhuonkD04SRs8xWJsN7s45iVKv1qVuA24q7wA3phh9lewKLfeU25LzxrpyZqeplDOyfojS5YpS1uK5Q/ziLohsdwWpfNNMpkxzaeWO6gZCDgsVdn7oM2ElWDlaXGJMhAITQqmE9/9HmZJElKO1b/YVD9LitNqeJv3ALD3VtGAcZFfFUxiHK5KqZ/Cdfn1LCYQZbW+oPDmmlbcwSeniRsOelW4+14m0uj6rKEZEMTguAYHxEX8aZCWW37O2pWDhd2ZxJQgehm1p4rOtKU71bbRkGdlMohMwijK5kxQXsFQRpQXyY04WJsnfd2Xj2ahSdrTHgNPlq5isrF5q426hAkPUH6RNoV0FHSonktNM3eofDkqk6WVhWhdNsXRCEYFm6/zK3AUtceyugdiSyiwetUpLH+tssPGApcfdaIAyumfWn4jfDmhLHdPHeUXcxYjieRezPLMNk9GM9Mhn88OL2IsAFwj1V/FdGCrKlzuV1FCA97LnPrvwgErgHfFsuTt9eni7JLdysEEiaU5tKS6Z/XF7p599hxehE24YsvjrOJ36HwLMV2fzISA2il/FBdI80hz+ueB2tZleDBkvcrI1jUchCdCaFaQ+2HX4vDyvCvZRgzitBNbE24zQ+lO9EwjGtxWFplixTy20trXqNypUTz3UZ3E3dQMtuOGoRBH4vr6aAGguRu8WhR0eSbxbFynYQfEXdDvcR/msyUVAyudQcGiyN0FQMka3XFc4y+DLD6mEHhIlAF9eWh/vYqAUTTWuWf8gVXSmstjsEX8k+41Ff OpIIAONz O48WKJ4X0H52wfMuKttk44uQmEJR0R+wwZ+ECRTiC7Jzy9VNpuC8icGHJLiMt2uetsXhmeQL7n5RfoSP5zuAtWcpeofPebMPmWZtXYzgS9i2zhsMc9Ir+rX7LwA6ekNFTp+4WFXLzSJ3KD+qza2CXj7e7KEAYL73w5W2YjNrYFjos5tfOzeGj9W8cZwmd+4NlkFSOP7r8tWoipQN5DprLMrgWxWSlL34WvyVfnifUGLMCZv7PIwE0T4GshNgouwsYDokN3giGICCNxfMkM9mjd1LleHv73FnQI9lv2Q0RWGdzIutMgz3UC0RYtpuQc11xKOaFTekWqqo8vB32V/GoFtDty1ir55ZuF/5OsDRQsBCikhYhOo4gBGwB4C+D7bDOXpPud2Lzpy49Kwh3rvX2/Jou0meZ/I3uV/AFdufjgJuS5Ec0wRCK7RvMvOWGsCXc94kx8amD1Vj1jCMW4Va9y+tAkb2FhKT1YVC0O+wIX5xSozi7YZD2I2+TIql5Fo3IPQcyJIw8Y39sYtOp/jZFeFhcvA== 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: On Fri, Feb 14, 2025 at 10:42:13AM -0500, Zi Yan wrote: > Since migratetype is no longer overwritten during pageblock isolation, > moving pageblocks to and from MIGRATE_ISOLATE do not need migratetype. > > Rename move_freepages_block_isolate() to share common code and add > pageblock_isolate_and_move_free_pages() and > pageblock_unisolate_and_move_free_pages() to be explicit about the page > isolation operations. > > Signed-off-by: Zi Yan > --- > include/linux/page-isolation.h | 4 +-- > mm/page_alloc.c | 48 +++++++++++++++++++++++++++------- > mm/page_isolation.c | 21 +++++++-------- > 3 files changed, 51 insertions(+), 22 deletions(-) > > diff --git a/include/linux/page-isolation.h b/include/linux/page-isolation.h > index 51797dc39cbc..28c56f423e34 100644 > --- a/include/linux/page-isolation.h > +++ b/include/linux/page-isolation.h > @@ -27,8 +27,8 @@ static inline bool is_migrate_isolate(int migratetype) > > void set_pageblock_migratetype(struct page *page, int migratetype); > > -bool move_freepages_block_isolate(struct zone *zone, struct page *page, > - int migratetype); > +bool pageblock_isolate_and_move_free_pages(struct zone *zone, struct page *page); > +bool pageblock_unisolate_and_move_free_pages(struct zone *zone, struct page *page); > > int start_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn, > int migratetype, int flags); > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index f17f4acc38c6..9bba5b1c4f1d 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -1848,10 +1848,10 @@ static unsigned long find_large_buddy(unsigned long start_pfn) > } > > /** > - * move_freepages_block_isolate - move free pages in block for page isolation > + * __move_freepages_for_page_isolation - move free pages in block for page isolation > * @zone: the zone > * @page: the pageblock page > - * @migratetype: migratetype to set on the pageblock > + * @isolate_pageblock to isolate the given pageblock or unisolate it > * > * This is similar to move_freepages_block(), but handles the special > * case encountered in page isolation, where the block of interest > @@ -1866,10 +1866,15 @@ static unsigned long find_large_buddy(unsigned long start_pfn) > * > * Returns %true if pages could be moved, %false otherwise. > */ > -bool move_freepages_block_isolate(struct zone *zone, struct page *page, > - int migratetype) > +static bool __move_freepages_for_page_isolation(struct zone *zone, > + struct page *page, bool isolate_pageblock) I'm biased, but I think the old name is fine. bool isolate? > { > unsigned long start_pfn, pfn; > + int from_mt; > + int to_mt; > + > + if (isolate_pageblock == get_pageblock_isolate(page)) > + return false; > > if (!prep_move_freepages_block(zone, page, &start_pfn, NULL, NULL)) > return false; > @@ -1886,7 +1891,10 @@ bool move_freepages_block_isolate(struct zone *zone, struct page *page, > > del_page_from_free_list(buddy, zone, order, > get_pfnblock_migratetype(buddy, pfn)); > - set_pageblock_migratetype(page, migratetype); > + if (isolate_pageblock) > + set_pageblock_isolate(page); > + else > + clear_pageblock_isolate(page); Since this pattern repeats, maybe create a toggle function that does this? set_pfnblock_flags_mask(page, (isolate << PB_migrate_isolate), page_to_pfn(page), (1 << PB_migrate_isolate)); > split_large_buddy(zone, buddy, pfn, order, FPI_NONE); > return true; > } > @@ -1897,16 +1905,38 @@ bool move_freepages_block_isolate(struct zone *zone, struct page *page, > > del_page_from_free_list(page, zone, order, > get_pfnblock_migratetype(page, pfn)); > - set_pageblock_migratetype(page, migratetype); > + if (isolate_pageblock) > + set_pageblock_isolate(page); > + else > + clear_pageblock_isolate(page); > split_large_buddy(zone, page, pfn, order, FPI_NONE); > return true; > } > move: > - __move_freepages_block(zone, start_pfn, > - get_pfnblock_migratetype(page, start_pfn), > - migratetype); > + if (isolate_pageblock) { > + from_mt = __get_pfnblock_flags_mask(page, page_to_pfn(page), > + MIGRATETYPE_MASK); > + to_mt = MIGRATE_ISOLATE; > + } else { > + from_mt = MIGRATE_ISOLATE; > + to_mt = __get_pfnblock_flags_mask(page, page_to_pfn(page), > + MIGRATETYPE_MASK); > + } > + > + __move_freepages_block(zone, start_pfn, from_mt, to_mt); > return true; Keeping both MIGRATE_ISOLATE and PB_migrate_isolate encoding the same state is fragile. At least in the pfnblock bitmask, there should only be one bit encoding this. Obviously, there are many places in the allocator that care about freelist destination: they want MIGRATE_ISOLATE if the bit is set, and the "actual" type otherwise. I think what should work is decoupling enum migratetype from the pageblock bits, and then have a parsing layer on top like this: enum migratetype { MIGRATE_UNMOVABLE, ... MIGRATE_TYPE_BITS, MIGRATE_ISOLATE = MIGRATE_TYPE_BITS, MIGRATE_TYPES }; #define PB_migratetype_bits MIGRATE_TYPE_BITS static enum migratetype get_pageblock_migratetype() { flags = get_pfnblock_flags_mask(..., MIGRATETYPE_MASK | (1 << PB_migrate_isolate)); if (flags & (1 << PB_migrate_isolate)) return MIGRATE_ISOLATE; return flags; }