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 5A007E77187 for ; Wed, 18 Dec 2024 05:58:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B892D6B0082; Wed, 18 Dec 2024 00:58:15 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id B38556B0083; Wed, 18 Dec 2024 00:58:15 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9FFC86B0085; Wed, 18 Dec 2024 00:58:15 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 83EAD6B0082 for ; Wed, 18 Dec 2024 00:58:15 -0500 (EST) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 06C37A0B47 for ; Wed, 18 Dec 2024 05:58:15 +0000 (UTC) X-FDA: 82907023836.05.B69842E Received: from mail-qv1-f54.google.com (mail-qv1-f54.google.com [209.85.219.54]) by imf25.hostedemail.com (Postfix) with ESMTP id 90FE0A000C for ; Wed, 18 Dec 2024 05:57:50 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=gW5FEm3x; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf25.hostedemail.com: domain of yosryahmed@google.com designates 209.85.219.54 as permitted sender) smtp.mailfrom=yosryahmed@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1734501478; a=rsa-sha256; cv=none; b=eR6jS4hQHS7guUWTlAe23cTtTHik1Rp52tJAxvDHeX20P33u6odOeZtf/tzRkow20czNVz IxoqLT7hVVtyVXHuLYNTaMGRGyOFutxF1EnDHoFpsh6MQGcAsXg4aBuyhp09TUAEe9OGQM +jJrHOsrkjgUyWw/4V69HTBk7KA3sjU= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=gW5FEm3x; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf25.hostedemail.com: domain of yosryahmed@google.com designates 209.85.219.54 as permitted sender) smtp.mailfrom=yosryahmed@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1734501478; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=NdVC+V1lE3EzFMku1CBbi1h5NIdtzmwR83XRp1ok54I=; b=2IDZYBx+SxuFlq13A3TqiepOXN74LG9+eDmD+pSd7VGpnYLJW7oe/DMBiMZj44yiA3wKr9 Lc1j+bZMW/3r1ptJZ9OMcjKDdDnl1VfoLCkcg1AfMDu4arb4QOB7OUFAj12/l3JL899Hsa uFp2kX8UQn2WK0J3nEkz3jIIbr/zrJA= Received: by mail-qv1-f54.google.com with SMTP id 6a1803df08f44-6dcf62a3768so13499496d6.0 for ; Tue, 17 Dec 2024 21:58:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1734501492; x=1735106292; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=NdVC+V1lE3EzFMku1CBbi1h5NIdtzmwR83XRp1ok54I=; b=gW5FEm3xZMUYKf+YNKkXpXhS55HJR4PMWGYll+e4ZkfsbF4iOJy+3NYfg6OEhvsUuy wEXNC46bQTUMtI0oE9D9aWGJ50iLLIr9f63e8BRItovXJKiF87+xnl648zrKu1Du/Ie+ 1KDmuIf83cPiA9S0arANKYrLveSgB5xkGAc7lyUjQcsMPJ/iAHCouUY9Dyl32JYzRF4q EVBLIjz6zP5PrxxmESO58KsmfeFjAgJNsbr2VVHqus0689ESAsRdDSiHXuS8UgKbRGMh Szx6OpEDSQgpgIX9ZFUZd5SW4YvjGzrZAFoc/yK6jByrqqxLqBCOWtye0+7nVDpINjju YeKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734501492; x=1735106292; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NdVC+V1lE3EzFMku1CBbi1h5NIdtzmwR83XRp1ok54I=; b=uM8r9Rw68RYkpCIOnPjmMZJhQ7ymxHlBFnNHdcXv2XY8C3kgji42AarzH9vP2A0wTk RaXY2qaLB+ALssBL4MTU8eV00s26sPPtm/P11YbFJkCXti1lzvwZnjM3V9FGzu7h/Mx0 ZT8AvvU/ZHrFeggkI8mGnHdqqUbGg3V6dLNvl+55gp3KzEVGIS9tC4L4Fw97LxsN4eYh /P1ESmDjwOYWl1C10bkyBo3X6pNZs27fXrG42PzvJ84T84shDfBEgVylpVGbNxVhm+Lr tyc3UN2Et2Uu6EhffRReEgPw2KZa9kIBh5Req71dtzn2TZLnNOSThVlNzfIBjaJ2Zz+a HaiQ== X-Forwarded-Encrypted: i=1; AJvYcCVi4S1YvBuV5qwjhLnDpvd4l0rBivCKYfgCYH5hbLrfsEHzemBqQQEHiG4CHrBzh9LGk9TzWLKY6A==@kvack.org X-Gm-Message-State: AOJu0Yx09/7YDqUBkVkM9hRMBCtt7m8/3wU1YDdS6QTaRRL58QUpO4mB J4B2h8+ZnrN7pFHTrv1kLokHT864BJSVO9lyo6uBqpEzuGFWdwOXYFPR9yQZSvkcR496ZoFPKka nm2h4v5vCtNuRYyYb6qL/WV0SPNcpPsFdvV2E X-Gm-Gg: ASbGncuAuoHIllyKJhm0kpO3jD5O6dav7t1glc4RrV+906rh0YcnSlO+JE/pEppL77g Qf9GISuYxS2v/E8V4ripAypBGRiM6N0rZcew= X-Google-Smtp-Source: AGHT+IGO3tVMnb8y1w3lzTzwiPPQ+okT6q01VKlJV3KSmw8yJD+Z3c2J6GiLhYMdLxSFoQjTQV5YJxKZRJTyUIIBpj0= X-Received: by 2002:a05:6214:c45:b0:6d4:3c10:5065 with SMTP id 6a1803df08f44-6dd0923a590mr27329546d6.32.1734501492018; Tue, 17 Dec 2024 21:58:12 -0800 (PST) MIME-Version: 1.0 References: <20241218030720.1602449-1-alexei.starovoitov@gmail.com> <20241218030720.1602449-3-alexei.starovoitov@gmail.com> In-Reply-To: From: Yosry Ahmed Date: Tue, 17 Dec 2024 21:57:35 -0800 X-Gm-Features: AbW1kvbg0vhYDiDFK_Uh0GQNmC7y-RtR1w69Jl0iG8r6QtJLfE7edweC07ccEvg Message-ID: Subject: Re: [PATCH bpf-next v3 2/6] mm, bpf: Introduce free_pages_nolock() To: Alexei Starovoitov Cc: bpf , Andrii Nakryiko , Kumar Kartikeya Dwivedi , Andrew Morton , Peter Zijlstra , Vlastimil Babka , Sebastian Sewior , Steven Rostedt , Hou Tao , Johannes Weiner , shakeel.butt@linux.dev, Michal Hocko , Matthew Wilcox , Thomas Gleixner , Jann Horn , Tejun Heo , linux-mm , Kernel Team Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 90FE0A000C X-Stat-Signature: ppoa9wppp8awwn8aagtaaapud15sbnfo X-HE-Tag: 1734501470-434698 X-HE-Meta: U2FsdGVkX19BkRosxelytlZLZBr0GF53jMLVsfaRuJtnOLSeSL/nfDS75ivlPmvZMLyys88hM6+9D9vQrxmXVsvuMpP+sFR34589qmzmdJ8boC/04zM8hMWjstKnCW56W614ovtV+kBHmVdfcfFJU+FZ6eOOD1i7SkvVyYnbPGGm8BAUlxrA3jswbp9qTNfjfyzFWgYjQzwPp1pJpMOdmusfHehY6AiaPaTMA4pMzMLZ1CWzQsDSE9FA4Li7E9dcWmW8dA+TIqFf1xLSbsdFIRXS26Da4DL5tP7vVt7ukXqfs9eHw1qZscsJMA7JRBBNKE4bHWHq2hLy2JJVosRuHH2x/aV0Hi9Lg82GUUHL8wReOBRqpKkGzD9Fms4eQDLz2xfz/xP8Q9fKgw4T+CFvsDbTpeJzi4/crp8YKH7NR3PSq6n8hNY1948VeG1vHbPSNdyFdCM/BkGrokTUtOK5/zBHpE1XqKdEbJXglNGRH2ZS2DTgKVp16EzyC/4TxHAFcc19D87B9rKE8FyC4VwJNCuTrsKvctcLHI1DT97YTVX69PHg9beudt+DIbHcWc/ehT/dV1v9KOmPJO+3T7Qj6MR98HptLU5kCrtQQR20KiuZJqRf/fMp5VNtw1rNHdadehaXuHvG4sBDq813okt38CEE846dL/NXD2k4+sCD+e817gUTsNdgZKfJtgr0VpkEpWpdmuQzi/LgKY0K5ncZWGOJX2GD0RSe27NU8WMCSiBEjg9vwoKaDlU7r4E+CUGUNHyNKp9xAmrrWPyTyawaQA579pL8+el/3u+8sVrV7p7gjH4k5T7OhxJ+n87eYJkFooquW1CwpyWGR5g8zsCF41YaLW7u+An75P9LZ12wJXLv7bxuW1PqqjmpDkJYWZN7ZQi/45zVKPq1ufgw/JOcoOfk7IibGEGX6BwCFB48gRBW+ITfeFMFDMFikElru/7Bl6fDM9YQMVnq+XSVcqC Vc0UymPp YPYnqPteOTHA0b5AAvzpVHYpr4OLMXvdT9KpJODdep/yrJx9LytDgubom35juu8+J3bFu8+ltSRF0I+mJqL3Y88zXwa4myva4pqvCDmcNm4YFQbZx/frAGOVqnG/QMrPi71GI8JS5fByBzsYdsF4Z3drJuoDNst2YhUnKFOy53raWkhe5Gb2I1Qtk70jJCjQLZJqYZgH8Rn7oO0JQHVdehX6Owz7hy0evsTGYtBqXW6xmTBRRGRqEU4flBa/SBQHx/of0IZ6xkWpS3hRAppdiGUkmNL3PJlWpQvbEAl+Yzt5oiP35yh0DwkWGlXksoj5tM+x7Nm1boUn3sPds0J7vhs9G4ACd6eYXvM8cZQMYIVACY1v2Z2PMxU7qRTcg6MqQyBvI X-Bogosity: Ham, tests=bogofilter, spamicity=0.000020, 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 Tue, Dec 17, 2024 at 9:33=E2=80=AFPM Alexei Starovoitov wrote: > > On Tue, Dec 17, 2024 at 8:59=E2=80=AFPM Yosry Ahmed wrote: > > > > On Tue, Dec 17, 2024 at 7:07=E2=80=AFPM = wrote: > > > > > > From: Alexei Starovoitov > > > > > > Introduce free_pages_nolock() that can free pages without taking lock= s. > > > It relies on trylock and can be called from any context. > > > Since spin_trylock() cannot be used in RT from hard IRQ or NMI > > > it uses lockless link list to stash the pages which will be freed > > > by subsequent free_pages() from good context. > > > > > > Signed-off-by: Alexei Starovoitov > > > --- > > > include/linux/gfp.h | 1 + > > > include/linux/mm_types.h | 4 ++ > > > include/linux/mmzone.h | 3 ++ > > > mm/page_alloc.c | 79 ++++++++++++++++++++++++++++++++++++--= -- > > > 4 files changed, 79 insertions(+), 8 deletions(-) > > > > > > diff --git a/include/linux/gfp.h b/include/linux/gfp.h > > > index 65b8df1db26a..ff9060af6295 100644 > > > --- a/include/linux/gfp.h > > > +++ b/include/linux/gfp.h > > > @@ -372,6 +372,7 @@ __meminit void *alloc_pages_exact_nid_noprof(int = nid, size_t size, gfp_t gfp_mas > > > __get_free_pages((gfp_mask) | GFP_DMA, (order)) > > > > > > extern void __free_pages(struct page *page, unsigned int order); > > > +extern void free_pages_nolock(struct page *page, unsigned int order)= ; > > > extern void free_pages(unsigned long addr, unsigned int order); > > > > > > #define __free_page(page) __free_pages((page), 0) > > > diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h > > > index 7361a8f3ab68..52547b3e5fd8 100644 > > > --- a/include/linux/mm_types.h > > > +++ b/include/linux/mm_types.h > > > @@ -99,6 +99,10 @@ struct page { > > > /* Or, free page */ > > > struct list_head buddy_list; > > > struct list_head pcp_list; > > > + struct { > > > + struct llist_node pcp_llist; > > > + unsigned int order; > > > + }; > > > }; > > > /* See page-flags.h for PAGE_MAPPING_FLAGS */ > > > struct address_space *mapping; > > > diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h > > > index b36124145a16..1a854e0a9e3b 100644 > > > --- a/include/linux/mmzone.h > > > +++ b/include/linux/mmzone.h > > > @@ -953,6 +953,9 @@ struct zone { > > > /* Primarily protects free_area */ > > > spinlock_t lock; > > > > > > + /* Pages to be freed when next trylock succeeds */ > > > + struct llist_head trylock_free_pages; > > > + > > > /* Write-intensive fields used by compaction and vmstats. */ > > > CACHELINE_PADDING(_pad2_); > > > > > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > > > index d23545057b6e..10918bfc6734 100644 > > > --- a/mm/page_alloc.c > > > +++ b/mm/page_alloc.c > > > @@ -88,6 +88,9 @@ typedef int __bitwise fpi_t; > > > */ > > > #define FPI_TO_TAIL ((__force fpi_t)BIT(1)) > > > > > > +/* Free the page without taking locks. Rely on trylock only. */ > > > +#define FPI_TRYLOCK ((__force fpi_t)BIT(2)) > > > + > > > > The comment above the definition of fpi_t mentions that it's for > > non-pcp variants of free_pages(), so I guess that needs to be updated > > in this patch. > > No. The comment: > /* Free Page Internal flags: for internal, non-pcp variants of free_pages= (). */ > typedef int __bitwise fpi_t; > > is still valid. > Most of the objective of the FPI_TRYLOCK flag is used after pcp is over. Right, but the comment says the flags are for non-pcp variants yet we are passing them now to pcp variants. Not very clear. > > > More importantly, I think the comment states this mainly because the > > existing flags won't be properly handled when freeing pages to the > > pcplist. The flags will be lost once the pages are added to the > > pcplist, and won't be propagated when the pages are eventually freed > > to the buddy allocator (e.g. through free_pcppages_bulk()). > > Correct. fpi_t flags have a local effect. Nothing new here. What I mean is, functions like __free_unref_page() and free_unref_page_commit() now accept fpi_flags, but any flags other than FPI_TRYLOCK are essentially ignored, also not very clear. Anyway, these are just my 2c, I am just passing by and I thought it's a bit confusing :)