On Mon, 24 Feb 2025 at 15:47, Brendan Jackman jackmanb@google.com wrote:
+static inline struct page *alloc_pages_force_nid(struct kunit *test,
gfp_t gfp, int order, int nid)
+{
NODEMASK_ALLOC(nodemask_t, nodemask, GFP_KERNEL);
struct page *page;
KUNIT_ASSERT_NOT_NULL(test, nodemask);
kunit_add_action(test, action_nodemask_free, &nodemask);
nodes_clear(*nodemask);
node_set(nid, *nodemask);
page = __alloc_pages_noprof(GFP_KERNEL, 0, nid, nodemask);
Oops, it's ignoring the gfp argument here.
{ .gfp_flags = GFP_DMA32, .want_zone = ZONE_NORMAL },
And with that fixed, it becomes clear DMA32 allocations can't be expected to succeed in this zone setup.
(Anyway, it's a bit of a silly test regardless, just something to illustrate the KUnit idea).