From nobody Sat Feb 7 22:21:08 2026 Received: from LO0P265CU003.outbound.protection.outlook.com (mail-uksouthazon11022077.outbound.protection.outlook.com [52.101.96.77]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1000117A31C for ; Mon, 26 Jan 2026 03:45:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.96.77 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769399146; cv=fail; b=W20/M8PbRzPmYtGCWe7uJnEK6WXRg5CRutjSxNyd7gQuMy0Fc8/HXw3tzfkbvFOXKgadKX4dUbltkeDRrtXFM5eoLJ2kzT1BpPGBq/flIamypMbumhF7VpVloUiRRmVFWBS4dMXHIOyzQEuZp3qOCdvkZjMBsDQKsw0gkjLSZGw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769399146; c=relaxed/simple; bh=Cbk4uRTFmWtKzogQAgLhx9XBqL5DzItl+99l+7KVx/E=; h=From:To:Cc:Subject:Date:Message-ID:Content-Type:MIME-Version; b=nAuXEkldWNa1SoV7UVvfR5EiBGEubA/QqVIFaQZ2eiVEwqZmTIH6voQ9jMSjZ+U3xvqx+cOjywLt0FXRXRvjHWPMcfyJ2gmtXxrpF7aIRHGHullDornQBR2KS10AfQdn7IfkV8pbhCmYFkYnZQTGr1Q+aCfrGPrtCTRYsiPo2wo= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com; spf=pass smtp.mailfrom=atomlin.com; arc=fail smtp.client-ip=52.101.96.77 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=atomlin.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=C9W05aCBjvgvOA3m2cnvwfzGBeAqekwudp01g4/akrz+wRW9XTRYkrSHT9vJCUNTQozDJxs+Do5B/xtQnpnmJMtDjGddaQXAkXXPVB1Agq66oQmTgJDK55e1pmJHz/iIIs84NSB1FFbF8yQE29kEL0+j43lMxo74ivnTzi/YZMr3DsNznC0Ongu9J4QND0/h+0GsWyA5cJ55JA/2Fuq6uY+fcotzbZqH/LlpGf3Xgt38DlKFtP9p/htey7wL2du6MI4CmlUldDHu2wiWqn4AzffuSiXDqKLd8SQ/t0niEVhwfDah3EWz02AyTIY3dUele49mdLtOGYazcfrxfeumUA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=qz864eTzF+J7I5mSjXqigIbpvYRTx7I4ApRTaIeVH0U=; b=VPvkQKXLLVvwlseZPgC0kyfiCAd0LLGwSMH6Q8xF2WMzzgazVd8pn6ebNjSgd+vqcUi5kdBu8IiE0Bsme1o+/xv9o0IeiqdJ6QWd2kK86yJIadks2Ng682bwIjQOHLtW2/mSqSARaGX8Nu30sLnzyKj8ENYaZWAmIH5h2y7kigVpcmDpkgQKb7wFvYaAtqq6ePdWwvq/5DUYUwdDR25BS5uzmAMD6PbjKvU23QtZA0WhHXXGujKvwMwZ5TkEAMpOVRhXjcl5n43cXgwgJag6KleBlpaerjlYqDSMTeV5sCg/ctjuL9KahogvzRxfPt1lvxcAzCud7r2VYbbnHXz7SQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=atomlin.com; dmarc=pass action=none header.from=atomlin.com; dkim=pass header.d=atomlin.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=atomlin.com; Received: from CWLP123MB3523.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:70::10) by LOBP123MB8265.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:440::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9542.15; Mon, 26 Jan 2026 03:45:43 +0000 Received: from CWLP123MB3523.GBRP123.PROD.OUTLOOK.COM ([fe80::de8e:2e4f:6c6:f3bf]) by CWLP123MB3523.GBRP123.PROD.OUTLOOK.COM ([fe80::de8e:2e4f:6c6:f3bf%5]) with mapi id 15.20.9542.010; Mon, 26 Jan 2026 03:45:43 +0000 From: Aaron Tomlin To: akpm@linux-foundation.org, lance.yang@linux.dev, mhiramat@kernel.org, gregkh@linuxfoundation.org, pmladek@suse.com, joel.granados@kernel.org Cc: neelx@suse.com, sean@ashe.io, mproche@gmail.com, chjohnst@gmail.com, nick.lange@gmail.com, linux-kernel@vger.kernel.org Subject: [PATCH] hung_task: Skip scan on idle systems Date: Sun, 25 Jan 2026 22:45:39 -0500 Message-ID: <20260126034539.3407903-1-atomlin@atomlin.com> X-Mailer: git-send-email 2.51.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BN0PR04CA0133.namprd04.prod.outlook.com (2603:10b6:408:ed::18) To CWLP123MB3523.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:70::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CWLP123MB3523:EE_|LOBP123MB8265:EE_ X-MS-Office365-Filtering-Correlation-Id: b5ca8f23-8e95-4940-a33f-08de5c8d616e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Zzm6Ooq91WK/a7loVLjkHDSMbFESStFAOBg5ElxeQJvg+iYr/zoVrpcWS6BD?= =?us-ascii?Q?jh+WaDftLk8+nMaeiNBlSwU331h7SaJ7Ri3GJReE30I3q/pAZFdm+hOZL4sJ?= =?us-ascii?Q?oTh6WeKgBn2DSbGy/EBIwKLYWeplVeClEnd031p/1HrFW4OrI0r+mEDq8Gj2?= =?us-ascii?Q?pWw5k59/k1FJGYERw/g8yWc5hxW/vBnVpsKWwU4to7pT2e/hrQKzMDP+WzEb?= =?us-ascii?Q?OZNvwQy0Db2Vnpur6EDEY5dl3mYf7oP9Rajt7RlF29wMALUHyGVoM5lgrfoZ?= =?us-ascii?Q?agY3BkltkkBCDsMdmsF4z2jqpS2YCTmg7ce4IFW/6MK2CbgnSPSY1yQQhTdY?= =?us-ascii?Q?ZObdOVQAsMsjL03hsvFUK1lJ9mprt9aMnf8/bszxNsXcBpWmL1DFtu4lZKHQ?= =?us-ascii?Q?GD+PzMTe8WdzryW1WIFIXRzMQ3SRKy29mUoJ//aGvjnlZr0f6ZA29mx9D6yd?= =?us-ascii?Q?ufJRG1dDkXlnBUYL5PXatl9EUltdb1aOMNX37UdFmuyGhXuPF+1sNYbcADDA?= =?us-ascii?Q?o1uckkIAvOctRQILApGtabGAsmpeO2BK+mGGnX96oGMq/9MUF2Oq2tWm5nlS?= =?us-ascii?Q?gvLOdqW8Gyn9YIiN4pE7+/nsR9gMh7aeimCKwocc6Qeu5nkEh88CEArvtEQu?= =?us-ascii?Q?qz76YjeJsJ6dgRotQgwEpn1sJKz2FzBInqJa5bmd2qxtfBMd9IDS+3IP45Uy?= =?us-ascii?Q?RA1D/Z+QpO47s1qhf3kHnPBmzn7R3k/+r6f0DCiDiSFhnMQMu5MiEvU+iZ6m?= =?us-ascii?Q?OeLxW/eknlMjvjpFdvFkSVoAtDbYHek+NrKXHbb0TpPnusj85xvC56x1113C?= =?us-ascii?Q?tng18M/UoSB/gmPEvAcv6t8e8v3W/ImdIwZjXnPhS0MjufPNrkc23Z+1Sm4z?= =?us-ascii?Q?W56232rzeS8eaxJeDtRpTb0dIzNHBED2KH/yhDpIi1koMuveVE4AXOYX8cGA?= =?us-ascii?Q?UCAOE/sbLaELx8UDAZK+TPIHLpoM6POdE2BHjftvre1NI2pivjWQk8tEJXIi?= =?us-ascii?Q?QmCwYDzkrWyvwfLD1Or0SRdlwz5aar+lkbRhP1ZD4hI0pMSmtOyLEbrsKP/1?= =?us-ascii?Q?fc5oE9q3R/60oB80KYDFJBieQ7OkL+nHRzVss/2raxFjvYI1PeO2MazHVY1Q?= =?us-ascii?Q?KSORSRWD+shXHuuKKjzYrS1tqOPDvR1+I/7OmDpRb/N8GMNs9ZPiVWmlCxdR?= =?us-ascii?Q?++zan2C0kjFYHkj7CKO8n5XFt43s8FGRcY8+dYrJeDi1guyXTalf74FeUgJ7?= =?us-ascii?Q?hw6oTCH/rZrOsOSJvt8U9EX1SOly8dSNIk/vuXN8iAcha2zrTWYKRYS24hNw?= =?us-ascii?Q?G2yjDGLmGiT6rcETQ5iAEGIFC9hA5nzmKqYjTGaduSNXFEZ7ZlZjqLc/Dd3p?= =?us-ascii?Q?Mg6hEY3E5LSdRrDXyeVFPfP5raturYqP3zXLG3qzGZbgTotaLEgFDdWhIp2t?= =?us-ascii?Q?7M2BdVenroB0x54fLImXX3LdFYj1izU1etk88gh8vxgwgxPBd8CrlPiATKoz?= =?us-ascii?Q?SzwAKmKs8Y5++e24xSsVoGG6IcUkzNY6988m0bgOMheszGgmXUtxKl+P4jmn?= =?us-ascii?Q?d7fcU/zGxrnxHG4Q2tU=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CWLP123MB3523.GBRP123.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(366016)(1800799024);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?GCNSyKLHysCIb6bvtiZbOGouQUQqxVupLZzNsKMoWdF9zh8BA6KbWXsf7h/9?= =?us-ascii?Q?YyIgSoDlMLevU+q6QVLcBwizWK6kUdUemTWg/TD4CvTuVzHoeVojIoWb17AX?= =?us-ascii?Q?W4w1k3sVdSi588Rrfw0inyGOLcXVNuxFRNs7MhaXNsaKhEuuaGMHRXRGvMzR?= =?us-ascii?Q?RH3/a5yiaOCNCadkS+g+Syd08ARYrDwXxC/RY7ggSpfmbTA3lbFBbHtNDGCE?= =?us-ascii?Q?qCO5AjfKITgPP/rmcHcLQEHwZnn+826j1QGTXjgCSNM9Tq6QwMCPJ3IrV/v8?= =?us-ascii?Q?2PMH09AXy/+pE0XpIEdw2xudwMdcE8UumBwbSgPoC5/i5x1y7AUUhU6OESoX?= =?us-ascii?Q?R14Vfq9kogVIPFcMrLD62vOs/KDBrJT1oJ2+hNKS6BYqusYek/wrdguEgcC7?= =?us-ascii?Q?pB5pSxOdeXw9XA9Dy0ZKnzIjcTU1W3IcxZ30KGAiXn0OBCz8gNKjC7SKKQQX?= =?us-ascii?Q?RmBM0hxz9t0a71WzqJrz1Ksfn8od1Xnu4XZI79NOrYoBtysMve/Jui1cib84?= =?us-ascii?Q?pYAeIRAyxYjbStC5l+ldCkRkaxTyVk3S/9Leb5Ok8PLWplY722VFRUhcWukG?= =?us-ascii?Q?+Mjst9XFawawTSOIotQFlVqBMOdMey9kWRRSoecLagsG1jriztf7m9Cb2yIx?= =?us-ascii?Q?xB8wfJGBrWeqr6Bm/bk0lSpcV6AddLd3vJhRHX+ypNgwzWR9GQi4dCl7zFC/?= =?us-ascii?Q?0yNdvldoFAaoG+AwKMabQohDdQLO0EpshEiENYKk1Y3QJKZTCAOPfwfgb9SE?= =?us-ascii?Q?b2979QSp4tPD3wS4C7CfWwB28d7B09/FR6xx76Znmfiv+t4eVjVwydO7ND4I?= =?us-ascii?Q?+w3aVA74eiZKjbOdYRiGM6DRUnHRL8+UFaXj17QN2anEpwf1Za4O6XFcN6uO?= =?us-ascii?Q?GLhFWcVVXtTTyH1BfR/X+Qp7OOdT17J+66z1Hlpeg5yiQaubW/AOpmelxxBo?= =?us-ascii?Q?3IaiflWEuns+qzIZx9gHsegBKUNxrijyj/P7jJY54oFO4ABFQSBKXiFDGt3/?= =?us-ascii?Q?vNSDbtNWAvRQ0XOYfbeUr6hg+bAWDPnvrpiuOxlwLEVd3/mCSMTGF5Ss6ufQ?= =?us-ascii?Q?Kw0NqbFMiMZjhJSUmSYZycpthAIXdL0Mdd6I9KIvVDqMDDa79IUCKBt+ud19?= =?us-ascii?Q?M5WeaxSn6YMFZTi3MfPzmfuqR5YHDKoX52sjWx/8SVv7Awju4LJzJ4Nnjc+K?= =?us-ascii?Q?Wo0Mab3XFBCLu0akXVOeDM/Yi48+C0WPpyHnJuquNo5trsywclPo0FoPWd1l?= =?us-ascii?Q?15oBOMotXC4a8rcw9+wX4lmMSqKWgtX+Z27KZrynuivtAJMwdbVC+cLeUiZa?= =?us-ascii?Q?LjplVwtCunpl1zAbZSPgqfwe14EaMkAzgXM+d+26QC1Mo20wSlRhMJ9++68E?= =?us-ascii?Q?tqhPv/fHxAf3zpEshxAR3aUUePlVkgYVSVgq9+zwbGa4NNSO9P4xiLVAH7qC?= =?us-ascii?Q?gqGtgfHwAyM3AqCKbOdQRjgL0umxUNHyGQEi/uM3lciszdvOobwnGGRDQBXr?= =?us-ascii?Q?TX4Bi7QbRpYoeUqoCDjdTZFQ8LT4op79RrN+MPMhww39fYrwxEVc3r93KXQ8?= =?us-ascii?Q?p/Jp07UpdHQas4uuJlVezBntlmXluGYMto1Nb4K40WG7RO4Y8JAxOBuRive2?= =?us-ascii?Q?mVAZhe/oQzYZQvWWy3H/0/mdbSca/FXvBhgnvGUQHr7D5A/tGpNE4clLVFBY?= =?us-ascii?Q?224Ax4Q9NsM+mSzoOQgOQLacSf6q+WomjRoIY5avIuNdYCMmLgTNPGo8mdA1?= =?us-ascii?Q?9ri4DfWlWg=3D=3D?= X-OriginatorOrg: atomlin.com X-MS-Exchange-CrossTenant-Network-Message-Id: b5ca8f23-8e95-4940-a33f-08de5c8d616e X-MS-Exchange-CrossTenant-AuthSource: CWLP123MB3523.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jan 2026 03:45:42.9730 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e6a32402-7d7b-4830-9a2b-76945bbbcb57 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: qOkanoXP05N5vvaIXP2TBrGN0xkaNYE7FeWDtEMAYPaTnz6Z7Um+7q0yk2MMBYySnefl4ALY4CoKAxQgJCFQOA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LOBP123MB8265 Content-Type: text/plain; charset="utf-8" At present, the hung task detector behaves in an unoptimised manner: it wakes up periodically (every check_interval_secs, defaulting to 120 seconds) and performs an O(N) scan of the entire process list, regardless of the system's actual state. On idle embedded devices, virtual machines, or large servers with no activity, this behaviour unnecessarily consumes CPU cycles and memory bandwidth, hindering power-saving states. To rectify this, this patch introduces an adaptive "green" polling mechanism. The detector will now verify whether the system is effectively idle before committing to a full process scan. To implement this, we utilise the standard get_avenrun() API to verify the global system load. Tasks in the TASK_UNINTERRUPTIBLE (D) state explicitly contribute to the system load average; consequently, if the 1-minute load average is zero, we can confidently infer that no tasks are currently hung, allowing us to bypass the expensive process scan. Crucially, we invoke get_avenrun(load, 0, 0) with both the offset and shift parameters set to zero. This configuration is deliberate and necessary for safety: 1. Zero Offset: Prevents the application of any artificial rounding bias usually intended for human-readable display. 2. Zero Shift: Retrieves the raw fixed-point value (where 1.0 load =3D 2048) rather than shifting it down to an integer. This ensures maximum sensitivity: even a microscopic fractional load (e.g., a single task entering D state momentarily) will register as a non-zero raw value. This guarantees that we never encounter a false negative where a valid hung task is ignored due to integer truncation or rounding errors. This heuristic significantly minimises the detector's footprint on healthy systems whilst maintaining robust reliability for genuine hangs. Signed-off-by: Aaron Tomlin --- kernel/hung_task.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/kernel/hung_task.c b/kernel/hung_task.c index d2254c91450b..7b9f5c1bd35e 100644 --- a/kernel/hung_task.c +++ b/kernel/hung_task.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -503,6 +504,7 @@ static int watchdog(void *dummy) for ( ; ; ) { unsigned long timeout =3D sysctl_hung_task_timeout_secs; unsigned long interval =3D sysctl_hung_task_check_interval_secs; + unsigned long load[3]; long t; =20 if (interval =3D=3D 0) @@ -511,8 +513,12 @@ static int watchdog(void *dummy) t =3D hung_timeout_jiffies(hung_last_checked, interval); if (t <=3D 0) { if (!atomic_xchg(&reset_hung_task, 0) && - !hung_detector_suspended) - check_hung_uninterruptible_tasks(timeout); + !hung_detector_suspended) { + /* Check 1-min load to detect idle system */ + get_avenrun(load, 0, 0); + if (load[0] > 0) + check_hung_uninterruptible_tasks(timeout); + } hung_last_checked =3D jiffies; continue; } --=20 2.51.0