From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 95AB8205E25 for ; Thu, 11 Dec 2025 10:26:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765448776; cv=none; b=V2XDFExNftsKakZiitDXTwl1XuAWnnKcejslQZW5+2L9hIK6lJpYZMUtY/QKu1m1umGUrTkacdKVd+whNEHicE4fc8FMWDb7+yvAAMe944LwCvLYQvlANiOl0J6ge5OIsGEnogp+v927RZICFjOEuklykO4OkJl5oACbMx/mJa8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765448776; c=relaxed/simple; bh=A3K28i0TaqXuL8ctkjKP3M1y76cPEnya0FbbskV64jU=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=hVN/lriOgqFErHGg8qqPxWXwRfisKDuY/4bwDGJsvXhes9VOiHKQwRZ16DBCgNTf7rDEXiBXjyhP3wE0tcwsHNtbXkPo6vzkn8GOD88HXPw1OdxpNI6aNTaq2HqLsjDNkIBY3evN9ChU2yTXpkMuoi2YGN/J8bXJPPzcRb1E11c= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp; spf=pass smtp.mailfrom=0x0f.com; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b=VX/IKpa4; arc=none smtp.client-ip=209.85.214.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=0x0f.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b="VX/IKpa4" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-2956d816c10so10396185ad.1 for ; Thu, 11 Dec 2025 02:26:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thingy.jp; s=google; t=1765448773; x=1766053573; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=zFsNVH+hcnTF+WLyrqw+6YJkD+G+rP7K/L7LQLfciMw=; b=VX/IKpa4X3NSHpkv6As2Gr1a1LP0oT/eSKYluU2tJb3/fZBuWqDNwJTpsRbqQk4NRq /d42Xm4kNwdivawdOwv7fL3C8tf7d0zCQ7O7GtrlRkk90/v/c28ZzmGxHo+LMEcYp/Ij SLy3Yr0awbqv9jL2dL7+6xuRuVg5RFvfspc8g= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765448773; x=1766053573; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=zFsNVH+hcnTF+WLyrqw+6YJkD+G+rP7K/L7LQLfciMw=; b=U2jqyzbT2vAGJTDnoWhB2lIhBd0/yeDbCe3hTGo9kG3wPVjIUAsV9ImAk39q4Jq76k xXm9VYH+Q0Eo60/awwJMbyiI8oaA8yDSDm29gZOvTnTGdTSEtBODnaljmljIgzrBRRP/ O4vl29wyJnmIazq23/A7lqO69PFX7vTabMuaUyL5uKHvsJXds76OnFGm2P++MiBz7FN3 C6KEfwGCZhjL3q3gZ9JkArJAczZ6ySHzk2cf6fnc4zcDzngVCaSEO1DaHMtc57VvhwPB Mz4iXDPvJw3JN/FSgSlrThefr9xouttXqAhnhKMZUFkMSEL/R+4eY0Ircsc9T2lJ6j9+ umWw== X-Gm-Message-State: AOJu0Yx6KhUlt5cVURR1T8FFpiZ3SFWBjZHQUYbKYC0o2cobcrBLvpfU NvREuTAnZPVRmYGHP94shi2fznepDhcTZNEowDSyvEur8zgODtXRMu/nlUDd1lQU/VttBWvSZcY QjBE4t1k= X-Gm-Gg: AY/fxX7dSgIWbA4jmRxXQGTA3ALsLjlZdkBGFBoeYIoZxNjZQKjl/rWRH052Uwfj05c qLKze14OqX15WexRg5m6N4Lk8Iv7tsxw/jBxNnhKZ9l4XX53jOtidvLIYAUDArujuFkMUXkzE4F T43jJB+OV7Vzq2+SUktM2+IElw5C4GX0i88i2wg/TIS1ogMDNDrmDxx4XXd/FTfUPmlyhuGDJre 8uYvcwgHpgetczXGut1TmpxHgcwx8XZLC0cZvesp+Sz9IJzQMmVo/+Ar9q8ZI4rzU44fqdgYRzK QFWc89W0c/laThZtT5/yCnOnniL7inMX6laqVjmxne43faWWY+nL1abu+b1SJbkORuYC0fqOiFL yIFWFFhrcmY4qU9OTqRjRZuXtCtTxImFl+UUpNVCvp/l5aCNI0U7YQYRNs1CrDIQOgwxKiOw3E8 ugt46SOf8o0asmW/0oLR9rlWl6hCLmgEIpfUtiXb00BpYrcHVNsPmdGDZGEjBcCOkYtgpo5Z8Kz 1g= X-Google-Smtp-Source: AGHT+IHtxJuTKPpxeSlCS0VeV+tpw+BbRU6MxR2kKYmrWqgxv0hJ/sCDXnxbVaXlm/7z15urdp+U6g== X-Received: by 2002:a17:903:2983:b0:295:8662:6a4e with SMTP id d9443c01a7336-29ec27c15e3mr62125785ad.47.1765448772723; Thu, 11 Dec 2025 02:26:12 -0800 (PST) Received: from kinako.work.home.arpa (p1344243-ipxg00a01sizuokaden.shizuoka.ocn.ne.jp. [114.145.20.243]) by smtp.googlemail.com with ESMTPSA id d9443c01a7336-29ee9d38adcsm20759115ad.30.2025.12.11.02.26.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Dec 2025 02:26:12 -0800 (PST) From: Daniel Palmer To: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, Daniel Palmer Subject: [RFC PATCH] mm/page_alloc: ?nommu? Deadlock in drain_pages_zone()? Date: Thu, 11 Dec 2025 19:26:07 +0900 Message-ID: <20251211102607.2538595-1-daniel@thingy.jp> X-Mailer: git-send-email 2.51.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit per_cpu_pages_init() sets pcp->batch to 1 (BOOT_PAGESET_BATCH) at boot, then later it is set to 0 (from zone_batchsize()) via the following path: init_per_zone_wmark_min() ->setup_per_zone_wmarks() ->zone_pcp_update() ->zone_set_pageset_high_and_batch() Once this happens if an OOM happens drain_pages_zone() will never return because count never gets to zero. Signed-off-by: Daniel Palmer --- Background: I am running a nommu kernel on 68000 with 8MB of RAM, I messed up my userland config and the resulting binaries became too big to fit in to the free blocks of memory, OOM should have happened and I should have seen the kernel trying to free memory but instead it dead locked. Since this is nommu I thought maybe I am corrupting memory but I checked with gdb and it doesn't seem like it. I have some local patches to make this weird setup work too but I don't think its anything to do with that either. This change stops the dead lock and I see OOM messages instead as expected. I have no idea if it is correct. Patch is simply to show what I am seeing. mm/page_alloc.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 822e05f1a964..83c9ce6f93ad 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2618,8 +2618,11 @@ static void drain_pages_zone(unsigned int cpu, struct zone *zone) spin_lock(&pcp->lock); count = pcp->count; if (count) { - int to_drain = min(count, - pcp->batch << CONFIG_PCP_BATCH_SCALE_MAX); + int to_drain = count; + + /* if pcp->batch is zero this loop will never exit, on nommu pcp->batch is always 0 */ + if (likely(pcp->batch)) + to_drain = min(count, pcp->batch << CONFIG_PCP_BATCH_SCALE_MAX); free_pcppages_bulk(zone, to_drain, pcp, 0); count -= to_drain; -- 2.51.0