Re: [PATCH 1/2] mm/page_alloc: don't spin_trylock() in NMI on UP
Harry Yoo <[email protected]>
| Newsgroups | dev.linux.lists.linux-rt-devel,org.kernel.vger.linux-kernel,org.kernel.vger.stable,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
On 7/14/26 6:52 PM, Brendan Jackman wrote: > On Mon Jul 13, 2026 at 4:15 PM UTC, Harry Yoo wrote: >> On 7/13/26 11:31 PM, Brendan Jackman wrote: >>> On Sat Jul 11, 2026 at 12:03 AM UTC, Andrew Morton wrote: >>>> On Fri, 10 Jul 2026 10:42:20 +0000 Brendan Jackman <[email protected]> wrote: >>>>> As noted in can_spin_trylock(), using this is unsafe in this context. >>>>> commit 620b46ed6ae17 ("mm/page_alloc: return NULL early from >>>>> alloc_frozen_pages_nolock() in NMI on UP") fixed this on the alloc side >>>>> but missed the free side. >> >> Ouch, do we allow alloc_pages() -> free_pages_nolock()? >> Didn't notice. > > We don't explicitly disallow that but I'd say it's "forbidden by > default"... > > But I think that's unrelated? It doesn't mean you can't use > free_pages_nolock() from NMI, right? (Would be weird to alloc from > another context and then free in NMI, but I don't think it's "forbidden > by default" in the way that using unmatched APIs is). If you can't free pages that are not allocated via alloc_pages_nolock(), and if alloc_pages_nolock() always fails, you can't really use free_pages_nolock(). But yeah BPF seems to do that and also the comment says: /* * Can be called while holding raw_spin_lock or from IRQ and NMI for any * page type (not only those that came from alloc_pages_nolock) */ -- Cheers, Harry / Hyeonggon
OpenPGP_signature.asc
(application/pgp-signature, 228 B)
-----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQQQ1ub6gR5ogjaKRmOGXBN6rc5S1gUCalYjLAAKCRCGXBN6rc5S 1onsAP9oH3K4pQoIax+qSGFDjZf1pwd025OJ8HYNXHVk+I8vEwEAiu05mhpZJWF4 zStwwbYgpqkkPFWKzpHYUtNrcO/tdwU= =BfyU -----END PGP SIGNATURE-----