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 E22A3E77183 for ; Wed, 18 Dec 2024 05:33:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 27B656B0082; Wed, 18 Dec 2024 00:33:24 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 2035F6B0083; Wed, 18 Dec 2024 00:33:24 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 07C706B0085; Wed, 18 Dec 2024 00:33:24 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id D9BA36B0082 for ; Wed, 18 Dec 2024 00:33:23 -0500 (EST) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 6856C1208A9 for ; Wed, 18 Dec 2024 05:33:23 +0000 (UTC) X-FDA: 82906959660.17.A0185F5 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) by imf30.hostedemail.com (Postfix) with ESMTP id 86EFB80008 for ; Wed, 18 Dec 2024 05:32:21 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=ChakPT7g; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf30.hostedemail.com: domain of alexei.starovoitov@gmail.com designates 209.85.128.45 as permitted sender) smtp.mailfrom=alexei.starovoitov@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1734499987; 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=FvHy4KOpgBZf/IJf46ySixTP0NFggSNEF5TfM2rS5wY=; b=YxMbjQaOf3qMFM7OC1zgNyi21I671adU37acUnK6yk3/JtHe37ePAeSnWMiEl68+8Mv6/E pCidDnqv4Z/AI0vswC/cBTVRX6kHPtccCjpVAEmPOuxrNS3GIn8RkLj/L7Nu8XYKn63RVG r7bKYrfh9xA9waYog/z1Ahc05X3x13Y= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1734499987; a=rsa-sha256; cv=none; b=ubHWW/ehvR86t6lLkIS4Ibk9EylmYJMYj4Scdc6S/DPyPu1A7ZrNQ7IfmR6XTUk3xmQn2h Rcsv8HxNTI2/wShQ8ZjGXR4dR6d7M1RXP499LuVDtrTLtkE/oLjBqjR5sElhJ/Led9wwrR BIG6+VrMlYMfY3qoDGZdrg7TyRQi14I= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=ChakPT7g; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf30.hostedemail.com: domain of alexei.starovoitov@gmail.com designates 209.85.128.45 as permitted sender) smtp.mailfrom=alexei.starovoitov@gmail.com Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4361b6f9faeso2135815e9.1 for ; Tue, 17 Dec 2024 21:33:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734500000; x=1735104800; 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=FvHy4KOpgBZf/IJf46ySixTP0NFggSNEF5TfM2rS5wY=; b=ChakPT7gf105D1WrPA98gyQ9emmZSTQESlcLPo7a0/DvOSmEmMATq3y9vJzYkfolpz aTi0BEj9Q6MWkrMMJV2urUDSStF/n8ccSN2KDZuDbBEqvKUVRMTMpLneAY4JJbME9LX+ I5rsAreOX+PmxkGsKjyrQ4FUq3VSzSVRM7H2RtxqckW1IoIfF+AJiMn/KVKFRIqlPGtr r1r0gSswYa5m8z35PlzPUoizWAbhRWrU+3MYY/8jUq90M8NRisd+E6bNJCeNkmca96Xc /yOcaYATlVNGHJLBNFevrjZnoG7HqF8WCyGdoP+A9LI20ME+QRfkrXubIrO/LG3MAnjP qWjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734500000; x=1735104800; 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=FvHy4KOpgBZf/IJf46ySixTP0NFggSNEF5TfM2rS5wY=; b=O2Qr6Dkx9gaxblCkQUKaE2el/zbfQGfyHpZ1pryO5ELYKbb1UwQOQOd9AMYy/+2lHE y91JAX2BPdG+6L3juX7ARc3if9XNrAQ3pC2HuLEgqgV1BHZiq5i2EcjQJU+eiYm8Ae3u nZElI0NayPSAfjwF0Ak6TpkU/ieVUQHBD2yrDO6k9B2f+/JDaQ8nuI9K7N0gP7onUvvJ T2hK8MxvbuRP8y+Kvs5ltgvb+phou//Q3rvkLRRKV+Ajv1e+hIDm9CPP45oDcmBhEwpw 37pT9ScRwnkRGpWloWY9uP6cLQu8sICIP6AFvDhKGpOzHwZ+swq3+cMjZABQlcvVrWqX 62Fw== X-Forwarded-Encrypted: i=1; AJvYcCVpkgoO9FsVjHEcfrzrrkKUU+DnMV9EISl2xcvpxYTApgSH3lsz8X5Z7OIISwU9wPmPSTcqD51Oig==@kvack.org X-Gm-Message-State: AOJu0Yx3JwTWTAqOZvNBGoMTFHkGHV4pj+uyDwmTsHtrgMdXeGf3kZFE UQSYZilAFWWAgcDil3xesKURJXRssrqsyKx2vTmzVqin25+9YUuxacbpmj9prPtyLx71IynMc+b iupG8foPhXdNK/7NriuFCFrUm2xc= X-Gm-Gg: ASbGncsCiqCoBo/6ysq64XWhPa/7r1GQs75GthdmVMyEPCV1hRp9X637xp1Bwr1r/7L 4UfSEfUnbvEDiUxuGIBxkCyOdcDqcg2/4RACMiF81BjoSP4EINUlLMA== X-Google-Smtp-Source: AGHT+IFW2gOk9eqtLmZgNmnjhSTCmOtziWxFq5eH20ukbKr+4HxiISRwwVya156Yu3IE0InO1ES5H9am6yo1yrUdlWM= X-Received: by 2002:a05:600c:1909:b0:42c:b8c9:16c8 with SMTP id 5b1f17b1804b1-4365537668dmr9420465e9.10.1734499999773; Tue, 17 Dec 2024 21:33:19 -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: Alexei Starovoitov Date: Tue, 17 Dec 2024 21:33:08 -0800 Message-ID: Subject: Re: [PATCH bpf-next v3 2/6] mm, bpf: Introduce free_pages_nolock() To: Yosry Ahmed 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-Stat-Signature: i9fkthcgqmxg9rppbge6oxrdhoi9hws5 X-Rspamd-Queue-Id: 86EFB80008 X-Rspam-User: X-Rspamd-Server: rspam01 X-HE-Tag: 1734499941-172702 X-HE-Meta: U2FsdGVkX18BF2zf2EPRUno9JuRG5TdS0fYvkYNzRHrnzytZFBG5In/4ussj1ogNV03QFVCOyydhmcM23ottK/ZkKUH0VByIHPtKx9ZFLo3GmmhypYw12uFHjNfj798iA1wrxyY0feho7gVSdHeluhtogXc3nZeHyVqmi0w4e8Gdioc92giP3ym9ltElDJpzkGlwY9iMpozhQZI6SF245TGoKzgfkQRWNYk0oBY89VhWetzRsE+ou0THC42xIUosptjBPOXOr+Y76NjAzGm9YEuyZODCDrLKHpRajDMLgbshjTob4ahYOqGiSE58mWkPEZZXeT628QF3vSF5LJbwVpDx+TRstxBcNSuLDTGajL3gvMabTB4+HGpTGDvPcIRvVnUzRaY7auSZsTSFQOMA0wR8uO33EnPe2TfXnEHGdgXO9SQIcI3rOGPW+B6x8heaqyb6TBxgx7uNVe7LhuRzgqKSGffp+Y5Ind1Db09MvZe4Kw7a/bCwAhI2Ggj+vKZRZRsjWF5oWvAXXtnZs+eoVgp6gmxrW+oGqg5TKmZi+Qi9yahy/t5rmqHiWBYnWkWifvAZIDpTNIuWQ2VMwLpq3vINem/MzgzJq7nq77uGgS2aaNxxP59toDkOWSXAETE53aEAMPbSi22R+DOJT3tXLvokrnF5hoPhUoqRiwn20VnRIXcBfKG/ImsF6nEd6A//FAL8OyElZUKBUZDB6dhAKYnP/4ak3S7j+cwaNk+lcEW9b29PFbUoOorQ0ynv5TQUZDknRzYs04uYP9fCW4EOP+pLonq8YNi2pzz8WnURfPND1BrX2wagI+0DroOGS/J4tli3M6ohwZylUCKeHJEWkgthRtS6tvEcjjLdDvMxIUra3dTvr7bOV3K6BmSZCuLmz6uI9/NVTDvLrZAOKGiXkzEeg1V8ap1V9PAq6CeiOilPxcCwqtN/IHcml75bICbqr0jUdX4MgpyLmfCdG2R 1kQo+33Q j18vobNF6JNuABPW4aLdgxKt05dWLO92puCLzQ3L/xI5FedOD9z2CpyaLoCppePkG1gZFG7EVhMlr35y35hZ3SNj3FWXmgHmA+5pDZ73vxgqSUwgjnVzDDs/6XpzMQa5LABNsSWBsGfLXitBgEizaSqTx5HfkaKHNhuHEm6XJNQ2NsVC6roitgZ5pKkcWQG1NcnODdfm1rYIWTZ9YXyUqTmuQIU1fl/TyJ8+v5CeE5t/yX5BOCtY5KcEPDYJSr/3Z0A832IwFz137ZbOsEpUW7/NpvC7DfHQkIe2pVAd1+acXMLGYf4KMeusfuUqsxC1G3/6xoFwRDHycYAReQ5ZEER4ARQsNU1BMDj3PsBFYFJXDHb1hdAylzjp0uhBBhexdzwv9rpbzHG4Ikuux9S1VuEbuzZTVfFRRsBbns7sfaPpvuE5FvLU1qxX+hJVh/YdhCPKf609IeddyXwYUYpVqazueGw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000177, 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 8:59=E2=80=AFPM Yosry Ahmed = wrote: > > On Tue, Dec 17, 2024 at 7:07=E2=80=AFPM wr= ote: > > > > From: Alexei Starovoitov > > > > Introduce free_pages_nolock() that can free pages without taking locks. > > 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 ni= d, 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. > 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.