From nobody Sat Feb 7 15:21:38 2026 Received: from LO0P265CU003.outbound.protection.outlook.com (mail-uksouthazon11022088.outbound.protection.outlook.com [52.101.96.88]) (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 8A3E71C84A2 for ; Wed, 31 Dec 2025 00:41:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.96.88 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767141699; cv=fail; b=LIpEyC5Vhsz6oQ3bFATzRaoHo1VIvd+9yLmSSPIDrpZyCWuZXBN08jhGA8yiKj4E7Gw/yZkcfuLCOLQmf67hOp7+OlP24NbsZScH2YmYhkh20NIYWpTqVgufCCaTqQrBKugHm9Q/2Hcq3nkzmxmrIyg5i23It2nAZJ3GaVSwywg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767141699; c=relaxed/simple; bh=f5uiEkZyYYHP9Z+NLbXcwGkeFtIoi1a0dTYNBKOTqwE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=GEGklZvlqrhir5IMtdqb7LakLgjZ2+yU68jtfpTGe3JYCJswGHm0PNhyy4dbLlFAge9TfmfhsWrvUuXsG4+lIrDENjnjESxm64A+znoCEtKEvwHRILn3k+Cdkc7vGH5GuSPxCTMiObXa9eU6Kb9rQ3dZbVnxguupEbfGoanwMVk= 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.88 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=S6gyBqv0ruBCQ75NfwmVTHmrB1duJL586Li/llDNjFOW6WKu3o4S68hvLNodoh/uEemlYFTyf+S6kWNXzyGbcF0c7e+8z2DW1zBE4q66Aqn0BSERP7yK7Iy/ey8stp5hWo7wn/MIHiJig0ilJ0DjaV5zgC/Ofo52cGpHhJiOUu3jYjoDE2qZdpiMXRJlsbaQYlRNaSOTa8t8Ia/lUnV3sHb9dzqoyxR1Z/JflPD4serABflLA7RA0c0RnyDpCrAO4bb0eqtdN4vYDJimfl+eU2aJaRw+JvE3/qLlzKoFrHCbH0zBCXUX+g0CATEB5ivzFVN0dE7NCxjfO0j1+1Y1YA== 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=p3kK76/JTp/o8LJYHYa0KlebQYLz1dQJAm00cngiJpk=; b=ozr+QyivSYO1eQFB6MocL0wpQ4IZ+r5oYdSVlDX5s1dYBsZRSO7B8QkippG37XlSh8i1r4udalIfeeodEAcqL9dG73ADgdJCM4B1Wz5IpA+j2XO097VnOj4BISEHejStNuGlleGbDt6ZQdoqGevyC5dmqWpzi0J8d5avBMknSZRP5JH8SRDUPvLDJQOhLVth4eNEc5e965cFaxD2HXhPjrltH8f3P5ejkY9nbRQMB4IX1vKbSGJ3TxN21wfWS39uVPIiaIrh7MaLMrxhyj8SguOSrd/0kLMFDr6hdcOauZ9s1QVQ1Y8Pqj4ol78zTNdfr6GE6YWkBS/K5WwaWyzPuA== 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 LO0P123MB6799.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:30e::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9456.14; Wed, 31 Dec 2025 00:41:33 +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.9478.004; Wed, 31 Dec 2025 00:41:33 +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: sean@ashe.io, linux-kernel@vger.kernel.org Subject: [v5 PATCH 1/2] hung_task: Introduce helper for hung task warning Date: Tue, 30 Dec 2025 19:41:24 -0500 Message-ID: <20251231004125.2380105-2-atomlin@atomlin.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251231004125.2380105-1-atomlin@atomlin.com> References: <20251231004125.2380105-1-atomlin@atomlin.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BN9PR03CA0548.namprd03.prod.outlook.com (2603:10b6:408:138::13) 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_|LO0P123MB6799:EE_ X-MS-Office365-Filtering-Correlation-Id: a59ef717-90a9-4392-717e-08de4805586a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?0K2PhK8kQR2TS2cH9lTdvZqx/LoaTnCn2kz/epRvBsNrda5a5YR+vb/d+3vS?= =?us-ascii?Q?R8+UgO89Ms/vw3Tb/e1B/R97cPKCehc8Ocpl++qmPAn3/9kdy0FzUVD8xeh4?= =?us-ascii?Q?RdSDTKWm6sHtnAisqSuwpsb23WFT/RU6maqjidlkAGyj3CAUGDnlc9lw1s66?= =?us-ascii?Q?36XamxuolmsJddH8KQFquNch175zBQ+iAGLr2+0D8nNpMLKs46DWyv4dCyrc?= =?us-ascii?Q?jh8V8Ju3AaoYuZJYQTqBW5dxYCg0X+kAMpEziYvbZc6WV/OoU5/6UKl76eZx?= =?us-ascii?Q?mPGLld31Iy0QPg+vgGtOShiZ9ee+WJsPpECHkZ94pEQZCKOFrrVLdzbghqXb?= =?us-ascii?Q?iTn+x1ZH1khar6YrlOpDc/tHbUd4sWZOtZPzwnO0QAOo5kLqke4QmJzIyQb/?= =?us-ascii?Q?7BFJ3HupT3dJKyFZTazNTaFGrNdbeAIAa0TwuLpUFybHbIBk3SPw1h07tsQW?= =?us-ascii?Q?dIHdgJiCv9Eh6Y1+ZKu4fg4yoT/zAZiukuN3sr5wJx/ALxL6HS9kOvIBk5Wq?= =?us-ascii?Q?JLjltkjfGHW9PAUoQGUTcldgmxtVDoe0X3+eLu0vHlQ4w0pAQzCcpqotSwo/?= =?us-ascii?Q?REeZAtNBqIjWt7CGzSMSoinRKN4t0fJBUY6sOuKhXtQadZSo44M0gW9NmWkm?= =?us-ascii?Q?h96Zjz9gNtZsae3204w5p5kJSbwHioL4SVT9V+HJqt2jps5PLmGbmV/y/hc3?= =?us-ascii?Q?IQ+vki8ZIIEfevsMEa/8tsocVCGNVMeexf6bl3PqpOVU+A8j+LIQVnHE4AN7?= =?us-ascii?Q?rIDBCqF34JIjICM1sezoa793VhVwEETJhEik9jXL1tAdWW/JGJMjqCgROk2C?= =?us-ascii?Q?d6+qDGmM35Y45guII+0mh1/2/DOdcl1SyxSqrTFqzN8eIzoQ973oR5MKFEAH?= =?us-ascii?Q?eafsN3BxOW8EhvJMjeRgITCoBXKE/qSTbBTjHzQQ+81+gE8zozAOoEI+6KXP?= =?us-ascii?Q?t2fYSssSxt45fyhCOzGW1p1OgRtrC716zgHO5zIWTnTMAGBbinzohYpnjzxl?= =?us-ascii?Q?9XkMYvXGeSHW7i+7mGBQW7sKCBzGCtAAl4B3RtNS8N8S6A1XMqrN2JKiVWAv?= =?us-ascii?Q?6kjvh2otXDJaXpCg8XBnZ/mkyngCZzkOphLTtoNcE7NdcMHNR27KLigWD+EW?= =?us-ascii?Q?YC2buH2TdmuY+NOb5CcIJSzSySMvOo4xsm0aHUDrSBrqyRMpdZ9p0iSJM/i4?= =?us-ascii?Q?dMGSC38LrXcqmcHK4ME56LuL69N6jm5K38RyoBy2oHHT7fvnzMhpqvG3kb1A?= =?us-ascii?Q?bV0DZTf2dTS+PbbJuM5rRvvTlypHzTdg8/eBKTWcED8Y3wO58qNOgot849lT?= =?us-ascii?Q?E3AV64hfNDAEudZ/Bytyy4wLbSfBdPeGcz0Dt4RizI75Oh9dDCgtjDV2t952?= =?us-ascii?Q?day7Ey/OAco+CGqQf4XYsCqeUc1wanJB5cgo6Oz+JW+gACIn12eWyJ0lnZ1o?= =?us-ascii?Q?1tyDXQkjf5u/bAjz1yQL61hTmjkhX263?= 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)(366016)(376014)(1800799024);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?vQGYaBAUe/PRaMkBlnqGBZ/Oe7QlKOm5FtH/N1Xf7S8qv221/wLScN4PAef7?= =?us-ascii?Q?woCE1vh6ugCVR61L8JSGRcIqiubpxzKLnEe9/fzNQPJklMGGsdrjM9GY4G5v?= =?us-ascii?Q?XstS3IwfrpQZnsCuMTpSkpC2NGhVwaKT0J4lwU0UaK4hrV0su6eiLqnkMiwk?= =?us-ascii?Q?dx2u8j0MeDTeitLdho/OtLUr1AWIQtJuoeSI3nVkm6YM+vSPR9K4XDa8kGaZ?= =?us-ascii?Q?Uuj+3jK1mrvLjlNku9G6NXzHVCf5+I4ulvmJOteckyxAcVP3bu9SH6+2+j0O?= =?us-ascii?Q?LXPddVtwdGTqBTzAuC03mhvOYbYOuQ43Un+SxeezqlpC8wqrUELIawKR4ylV?= =?us-ascii?Q?yF5c6qOIjCLwW6Jg3zLqkoM/QseoiZGnMoQGAidKC1mmHdP7NCqLoP2uAm9z?= =?us-ascii?Q?ePAQizu1417ky3ML/QSb8PDdZhVnBEcOGR/vUilaLY5B4Dn1KjxaSUl2I1DX?= =?us-ascii?Q?TABuFmwpTMNjH3kimuRcCqTbpj0Yu9g3tfbHyt98KyCAMfrjA4+zNa2cADU1?= =?us-ascii?Q?k+oHgw7fYumyKNfIb9txhTReCZqJJQ3UCUJv55QAToZrqsOFRVKMnYOIdwoO?= =?us-ascii?Q?w7PpkE1DB2GuMa70tEiidJ0/t0XWDpOLR00SwIeBgHc1WjWg4zaUy//wYijf?= =?us-ascii?Q?MhGlWmyd4YTbAa6DSF+PlwbDiueY3Q6s5yiGIscu1SyhKaEl8XZnZVKlSERw?= =?us-ascii?Q?fbGfJ8SCKM5M9/Df4mNzxdkf1D12MyLNNZHYiCXUxQbVk+mNHP0awLPmHyZJ?= =?us-ascii?Q?NXFnZdgwuwwWVeKRsrQ28sT3DIRu44PYchQiAWBskgxRriBzN8OkpwEht3L2?= =?us-ascii?Q?Jf3Lg3EnuG4C8/boGkIdoXtrWl6F0QlAuJRG8bNDMQxgHpLmwXcFbG0axR70?= =?us-ascii?Q?GJ/laWR3WYvK/OW6FF6NzO7f4QYTPB1gGYldDwF5tLAHQ4TVyG6bfgjBAuxH?= =?us-ascii?Q?NQ93U466D5zqg3373WtvFXZ5vkqgnASsXmmvc2CIkSOERCtB8eBxtbhohpEG?= =?us-ascii?Q?32Q66YdAu1ciZ6kZo2LDJpsiAzaXc7N/4rhA1tX/vhYNBkWl+8upRk4r8BDC?= =?us-ascii?Q?yN/gk8PEicyNl/LTiMEjiSS2yN0ky33ZRX1aha+lVOZhZ46NEvBT+hEq59yQ?= =?us-ascii?Q?6WyfB3xY5sr9XbNsAY67kDUMaeuCAhdxmSYxicEXrbOJmgz+p71Cug296vgj?= =?us-ascii?Q?sbWUGlmpDlSV3hhV+GuuLZ7hUck4wBAy6L5vftsS4pI0M4UbgyX2/Y/oLDtS?= =?us-ascii?Q?eqJNDJC7ZxysteiK2vif42EOnfYNHMLiRmJqvJC4e6qOHnuW+Mymg8I3vz+T?= =?us-ascii?Q?AD8MJhsjlDefN3oAlgCTV8uEDyDBSmVRepyxBxMsAsFRGTXa+V5tuAQDD0OC?= =?us-ascii?Q?/7i8VjGv8HLJqTw6mtOv5AW5tz5nR/gukUlPa0FQx0VGCQDEgOa6UUqer7h1?= =?us-ascii?Q?/7gK+flU6+1sOVU3TJLh55UdCauXnov8Qjc/vem0PexMqknfr+ITSC2UI3ON?= =?us-ascii?Q?MHZzh67RRO3oKXKV3yvtLcaf/VcIbkewWF1DCl+Wnov90+Jb/vFgk7T7S3Hd?= =?us-ascii?Q?4VXwz7U3SgwENtJbtLAGFIxKtmaggNbCRL8dFO1ZAQmrWR3ZBLG24XfAhLAU?= =?us-ascii?Q?neErT43BmJZK5wEQDnOsDahvvFGp1cIWvxt3sXhgXtRaqqdROIUkpz68Hc7P?= =?us-ascii?Q?fzS2JiXcOg3+dPzML5ti49iFWLKPtzOwP/TZNLSS6CBfUdHAC2LpvdT0nPXq?= =?us-ascii?Q?JCq/Imcvgw=3D=3D?= X-OriginatorOrg: atomlin.com X-MS-Exchange-CrossTenant-Network-Message-Id: a59ef717-90a9-4392-717e-08de4805586a X-MS-Exchange-CrossTenant-AuthSource: CWLP123MB3523.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Dec 2025 00:41:33.0659 (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: wo2DZwGlpwYHA5GzV3A8jeIQxbfhc/uiXmEYvb/Z0pbDWxysucbprMPkvAEQFzBMCAgWWPw4hIstaXc204B8ZA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO0P123MB6799 Content-Type: text/plain; charset="utf-8" Consolidate the multi-line console output block for reporting a hung task into a new helper function, hung_task_diagnostics(). This improves readability in the main check_hung_task() loop and makes the diagnostic output structure easier to maintain and update in the future. Signed-off-by: Aaron Tomlin --- kernel/hung_task.c | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/kernel/hung_task.c b/kernel/hung_task.c index d2254c91450b..00c3296fd692 100644 --- a/kernel/hung_task.c +++ b/kernel/hung_task.c @@ -223,6 +223,28 @@ static inline void debug_show_blocker(struct task_stru= ct *task, unsigned long ti } #endif =20 +/** + * hung_task_diagnostics - Print structured diagnostic info for a hung tas= k. + * @t: Pointer to the detected hung task. + * + * This function consolidates the printing of core diagnostic information + * for a task found to be blocked. + */ +static inline void hung_task_diagnostics(struct task_struct *t) +{ + unsigned long blocked_secs =3D (jiffies - t->last_switch_time) / HZ; + + pr_err("INFO: task %s:%d blocked for more than %ld seconds.\n", + t->comm, t->pid, blocked_secs); + pr_err(" %s %s %.*s\n", + print_tainted(), init_utsname()->release, + (int)strcspn(init_utsname()->version, " "), + init_utsname()->version); + if (t->flags & PF_POSTCOREDUMP) + pr_err(" Blocked by coredump.\n"); + pr_err("\"echo 0 > /proc/sys/kernel/hung_task_timeout_secs\" disables thi= s message.\n"); +} + static void check_hung_task(struct task_struct *t, unsigned long timeout, unsigned long prev_detect_count) { @@ -252,16 +274,7 @@ static void check_hung_task(struct task_struct *t, uns= igned long timeout, if (sysctl_hung_task_warnings || hung_task_call_panic) { if (sysctl_hung_task_warnings > 0) sysctl_hung_task_warnings--; - pr_err("INFO: task %s:%d blocked for more than %ld seconds.\n", - t->comm, t->pid, (jiffies - t->last_switch_time) / HZ); - pr_err(" %s %s %.*s\n", - print_tainted(), init_utsname()->release, - (int)strcspn(init_utsname()->version, " "), - init_utsname()->version); - if (t->flags & PF_POSTCOREDUMP) - pr_err(" Blocked by coredump.\n"); - pr_err("\"echo 0 > /proc/sys/kernel/hung_task_timeout_secs\"" - " disables this message.\n"); + hung_task_diagnostics(t); sched_show_task(t); debug_show_blocker(t, timeout); =20 --=20 2.51.0 From nobody Sat Feb 7 15:21:38 2026 Received: from LO0P265CU003.outbound.protection.outlook.com (mail-uksouthazon11022088.outbound.protection.outlook.com [52.101.96.88]) (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 9E1801DF273 for ; Wed, 31 Dec 2025 00:41:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.96.88 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767141701; cv=fail; b=oQJzSD5t/AZOCCrV9MrpvLoiuASnNSV+nqneveFEutzuSINqFQab9qtl2zdBp6hfimfeCvI/FlJlolxpeIT3yJOfCRaN9yRQ54gLl30dsw/gxqNfUDz9G+JZSW5SdqE/8/x/TE1IRfiyxL5PsIS/tFvDCTwANZFakTbeu48tYpc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767141701; c=relaxed/simple; bh=NGVx5mHjJ96FQ9S9Fko8vvd6rDMTzB0kGkE/yuHUH0M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=BInWlm6X8qB8IZkJt0rcfTtoG6qxhJbBcNTuJ3+VB5V6GHKK9YzjNspjZu8MKEBtBrRbN6w4F4RZwf2CXumnE+VJt3pibeGR1r8zraEGQJc84yqxyRsvP7te4d0UL2snheniQBkwsHrjD7UXrQ+KsE/oKMSFXu+nTNjDx+1P3us= 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.88 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=VzmN4LN649wm6hG1JtNA1LMxuNfieSrkEVNzfZ6ubmF9Wrry0+JY5FtB6/g7huSbBcOvw0sPhtJ2BfhmeGzBJTSN4TFFcxPKo/4ypp5/LGnYF5dcp2kvo2rMcm6zc7EIh9QtmVLnUBT2ovFY3RPVuaTyYfFOGiUSYm+a/9zn1eWtqBdPi6r8yRb/o1ziIaFb1IV63Ise+Glk64ZDQnv2DSgahM0EoHCiHrvmExR2xkLnxn7vJ5TLcOJcaIHjjywj+8tzquYGgUfUjV2ZhAeaEoguqBqjNltLCk5leEKMRu0e0gPkqg4T4yhv5hM4+zHhirmkVAtDA3Dfr2vgDBuuaA== 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=DSFUhqq0tTc5zjI991lCdZ1GkavRBlPfpHvj7wvw8fA=; b=dh1tCzlQ2VM3VG9N8At2lXOoTbdLCjnTOHhB9pCyGrKgWXXRF483JNJ3e4UO/T79VlWjb46vHdnv3NbUXFdWU9N2Asl7exEoaZWT2HzKEMYB1ODkn37shHEoJNTYPxor0Cy0Xmrg8DcH/esKDWJ7NETcTa5pHghF9bnNpOdSf0R48D2FueQ3GhFCvfII+9n+Edu1sKJAX8YOaJYK/d4eiQbSbux9YP+uBuyBo85HJej9en+2gONi8gXummQUEQWfefLX2J1zhmM6msWB08Prmz4G9t0Cql45F15I8uJGjESzHqpAUlB/R/s4PqUVoX7g7EDEUrwNBQ78LbKsm6Leow== 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 LO0P123MB6799.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:30e::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9456.14; Wed, 31 Dec 2025 00:41:36 +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.9478.004; Wed, 31 Dec 2025 00:41:36 +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: sean@ashe.io, linux-kernel@vger.kernel.org Subject: [v5 PATCH 2/2] hung_task: Enable runtime reset of hung_task_detect_count Date: Tue, 30 Dec 2025 19:41:25 -0500 Message-ID: <20251231004125.2380105-3-atomlin@atomlin.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251231004125.2380105-1-atomlin@atomlin.com> References: <20251231004125.2380105-1-atomlin@atomlin.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BN9PR03CA0451.namprd03.prod.outlook.com (2603:10b6:408:139::6) 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_|LO0P123MB6799:EE_ X-MS-Office365-Filtering-Correlation-Id: 589c6fc8-17f4-4043-78ff-08de48055a5c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?TL5cr8OiHyviE3D5c14jLevI/z2iNlGCImje8yFLqxtg5xRr0rrYdgOGBSdJ?= =?us-ascii?Q?WG51m81lYS2OUWStAM3zX4n/3YFASVbaLexjtcTHB494I1XcDLklFmQa/tAd?= =?us-ascii?Q?V5dWw7aCPYuyJUYJGhen0c4sc/d9GnKVJtyjoC9hCoQEdbw9ewQQlOGG16sQ?= =?us-ascii?Q?WfsWEcrlWaeJdQj/KcAourLB09B2TlG0qt+KTPBbWgXiYc1I5jp4D1ayEAnt?= =?us-ascii?Q?HNIXMK8q4YGZDgL1ddvxHXunsGxr2WQpF1UYLEUK8Gp2G4u1Zulv9rd2ugwO?= =?us-ascii?Q?Z8MslTa5PizC9oUV3IeBudtvIW/zrT68tUKmrdhg6QoYHMV762828Hy0Xc+F?= =?us-ascii?Q?kf7d8Cxagus8pKhlpbyI0zCriuW0f1WSyvszKaTaeZtGSQaEr+E0neLMSCJS?= =?us-ascii?Q?Y4YXE/KcPxAxTKx2hSd/jgN3iDJO36DxvHomY+0h1uaM6hgTbzp6z714YU3c?= =?us-ascii?Q?zodlG8UhfH9m3gjLyEIICLT7t0uQ2FVVrw8j+aaAvp93Y0nf4Wbcr+wNXduu?= =?us-ascii?Q?v94/IBRoNakda/9ndhXz8GXD0r+gl+xMCbDKnDuMW6Y9Pu6okEA7LL68FGdV?= =?us-ascii?Q?57g4dAKOcufYxuDUjYdNusO7zCNwfIFHnWC4xHMb4bzXwoBYeLmIqM8lVU0B?= =?us-ascii?Q?AmUlePLHo6C9ksQgD6HrF/lJqRAsqJwk/Lr3C3+dQ7sZPttDNaVwXjUji/Il?= =?us-ascii?Q?UiDkV6KkNXC/2Whx8uw3DDQvVikW5za/8YpjeRZAG/DS/tAA6rZhoZ2Uk04o?= =?us-ascii?Q?q0ZvYiXfHk/wvO3Nlx6VI67STxNxxh4ovIzPAXBd2/ADs0suokZIOyXu8Mxx?= =?us-ascii?Q?nW/mJWZ/SRXqsPKV/YAxxVaGpp22peDSNGKBOWXAS4GL5QJ+N3wjT7ALCanh?= =?us-ascii?Q?skUfNI5CgOkLncT/pHJWtU4c4IFKEe2GxZU684rFE+20fIZDAP3X9HMRSW7G?= =?us-ascii?Q?aRDSeaDzTtNx8CkQaWbdvh2fFNSJfoE3MgKaEZYgk5U1xypOU6j0zrck7hnG?= =?us-ascii?Q?W7Wvc7M48V+NpL6j+RVegUy+lQD7wfGaW2W41j4YNzFNzmbv0/WONF+nhN4d?= =?us-ascii?Q?GH1hH/WV9QhsAWQ5A9MWHSxfsbpxl7yGDF6jgaEXpt1tu17FGWyWryJ3L/VJ?= =?us-ascii?Q?GD0KgnKrq5JQ1Vk1eim30mQ1b1CxKay7PyoJdmV6iBFSfoNQdcQtrGQAq8dt?= =?us-ascii?Q?YpNLQavzuhF+0KWwnekPeSmCpeA1D1bsFQSRrb2EFwM/WzJDql7EhVPbFX2w?= =?us-ascii?Q?H+42v/rj2+q5eU9WDBxkMfXq/Oxuq7MbDMq2TLMStrSF/I3eNjM8zwdpT1zf?= =?us-ascii?Q?aLkZno751yOZBJ99h4BMBAZaY/QESS2JG0pkK2xgurSowCmIabXDfpCr6FPG?= =?us-ascii?Q?oxufA2CUBCbNxVYa5osyHA1oiT0oZ98BBljuvHMmZbTm/SIhEbt3D7WHf0wI?= =?us-ascii?Q?Z9SicM2m3cT46adl2FFk6nUITyrbX9AZ?= 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)(366016)(376014)(1800799024);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?fJSbLz1gz6C6RKbNHGEdzw+8EVa06OIjDAzSrrFDd4g1GkPq542a8j79jAKh?= =?us-ascii?Q?fJYvmhlbwxYv3+usgvUGG9bxIqi6lKNstg8rQ01DaiLEuZdZA0MvtLKPzUbk?= =?us-ascii?Q?8tt9vF46TzEhpdzI2jtrsWZGFtU1quOrDIpU8QU+BR6HcVoimxZ9umzvsxZm?= =?us-ascii?Q?KeXppMqLNXNHRC0r5cmSYMI/9TMQGtLiB4CiwE45ii82ymLuQyApb8BvrqKz?= =?us-ascii?Q?cEryLLpPcxhBud3P+4VKlf3xzJtc0LTIFu8FrURBfiDIoB4Ze5GW+P/HUTDv?= =?us-ascii?Q?Ixpjzl7kxAIuba6v5WVlIaRNn+MrxaRu74u04HfigbnoOewkP7u0GzRGFMO1?= =?us-ascii?Q?BV076X88lb/WZIvxx7GGej6F+u7uY1eO7qAMMrFVepCZz1BDow5O6dbHdrDg?= =?us-ascii?Q?z8BBNwkR2kcqFeR2M05B1zuxGBmo4llx++5g+3zbHCqUHhed1bS9toxc5CN9?= =?us-ascii?Q?NrIvy6uH9k42XITTOq2li2TSM//frxpuF1h/EquRn2CIu/fy1FtYX6c7wpm8?= =?us-ascii?Q?ImZZlJcPCaL3HppWJZ8A5fSIb2n7kJcwzkXI7r/p9KWBWPjeyaMHkiz3Y69K?= =?us-ascii?Q?hriHUYMsLSFgYQt8vz2W3UNp3Jo5Rx1pN0N6Hl4AjLkw8u3LMuQ3mB7IDjck?= =?us-ascii?Q?G22ypD8tJfYOkqhcZCqGbKx4K0knxxygrwxHvOJA1b+A6MpkvkDSif0rqu9E?= =?us-ascii?Q?3ebPYg/tDa4E7IU3+JixqGYdqFFZZcX9FtOpzoTDLHuYZqGjvLVVP4NeaiKU?= =?us-ascii?Q?QMkxpFUGv0uGVDzMDAEkJdlGGvGOz+quJfc71j/MybsTjz2Y7Pu7zar98Oyj?= =?us-ascii?Q?M5cEsUAlt/kFYMqEsoeNJiPplV1Vv0b2J8nhMXEcqcjxTjiZJtC9FPHqdQDA?= =?us-ascii?Q?XcVJtHxR0YtBkOYDsm/zA6srTzq7mvGF+oT1+FPsssUf+PRnla5L4e8MaX4D?= =?us-ascii?Q?vPfnYkl/tcQv1s/YrWksNkbS/b00Xf4xcasCKv31bzMgRevO4P6qKuvEvM5g?= =?us-ascii?Q?Nd4UTUDv4sz9y86SLhS+6LkE4j9CYveEECjn5nye9/Sw5UNb90hhw95rtaCh?= =?us-ascii?Q?ufyb/Q0PiUECFwL1FXelHXZZX3MoClEoESidkiWz4ttBUYX5bZV1ryb7Zor8?= =?us-ascii?Q?hoKPYdo7FUDE+dAbcBhCOW/xz/32b1uUWN/HN8YygwqF5aUciN6F8nfWmc8R?= =?us-ascii?Q?qcZ4LE1sd1ubwneMGbhUAmVJNWEIZHJ0HrPA7Mt3QmepMFyyhSMrmb5E/TMr?= =?us-ascii?Q?JThr2VQiqH7jpdqFNXMlW0T0A6Nfz9M5k7c3CcJLwECFq8fdshVPs1zUzkS1?= =?us-ascii?Q?auZffl9AD+CtPcf59JvRdqKdwy074h0Vcq5+3DH54eeH3rENJKI9tJH4dQeJ?= =?us-ascii?Q?cjr/FctnzKLqmTi6ZDn8gFGXGd1H5M2NoYLIKh/gVNAw5OjMsfbEG9qByqrd?= =?us-ascii?Q?2/HWR8zPii40EVhZOWh6m/z7Xe2fYwoKtKOKD0MGFXjNpZ4b/ojM1eid9daP?= =?us-ascii?Q?0h6FYpA01bmOXpL4Qh2gMfpGkpKf1Bdh/zvoNPf62/RrjQac/UCXaK4vNqGI?= =?us-ascii?Q?e52s1rsPqM5/DnDaVActjkPXOujijJjiCO0EQTCAW+wf8Pfd9u4DMMq6fXNL?= =?us-ascii?Q?duDgK8y9eQFm9HonJ/t7uvGE77VW6IX5q9F/EBzFBJHmhHbnue0L0f4k2dCr?= =?us-ascii?Q?4RPXnvvVzWPQIfZpsntq7uItL9qqawYbjVugmIeL/yGbCDIuS9G7VtHtIe+c?= =?us-ascii?Q?LdiGIGkgYw=3D=3D?= X-OriginatorOrg: atomlin.com X-MS-Exchange-CrossTenant-Network-Message-Id: 589c6fc8-17f4-4043-78ff-08de48055a5c X-MS-Exchange-CrossTenant-AuthSource: CWLP123MB3523.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Dec 2025 00:41:36.2889 (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: SGHcB2MEogbuQC6dYowT1EuxZUPeSETn1guE981Q3uLhQM+2QMbGPNtJOq17FvQ8cNnnEtYSWd2lhec/xFhs5Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO0P123MB6799 Content-Type: text/plain; charset="utf-8" Introduce support for writing to /proc/sys/kernel/hung_task_detect_count. Writing a value of zero to this file atomically resets the counter of detected hung tasks. This grants system administrators the ability to clear the cumulative diagnostic history after resolving an incident, simplifying monitoring without requiring a system restart. Signed-off-by: Aaron Tomlin Acked-by: Lance Yang --- Documentation/admin-guide/sysctl/kernel.rst | 3 +- kernel/hung_task.c | 82 ++++++++++++++++++--- 2 files changed, 73 insertions(+), 12 deletions(-) diff --git a/Documentation/admin-guide/sysctl/kernel.rst b/Documentation/ad= min-guide/sysctl/kernel.rst index 239da22c4e28..68da4235225a 100644 --- a/Documentation/admin-guide/sysctl/kernel.rst +++ b/Documentation/admin-guide/sysctl/kernel.rst @@ -418,7 +418,8 @@ hung_task_detect_count =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 Indicates the total number of tasks that have been detected as hung since -the system boot. +the system boot or since the counter was reset. The counter is zeroed when +a value of 0 is written. =20 This file shows up if ``CONFIG_DETECT_HUNG_TASK`` is enabled. =20 diff --git a/kernel/hung_task.c b/kernel/hung_task.c index 00c3296fd692..3bc72a4e4032 100644 --- a/kernel/hung_task.c +++ b/kernel/hung_task.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -36,7 +37,7 @@ static int __read_mostly sysctl_hung_task_check_count =3D= PID_MAX_LIMIT; /* * Total number of tasks detected as hung since boot: */ -static unsigned long __read_mostly sysctl_hung_task_detect_count; +static atomic_long_t sysctl_hung_task_detect_count =3D ATOMIC_LONG_INIT(0); =20 /* * Limit number of tasks checked in a batch. @@ -246,20 +247,26 @@ static inline void hung_task_diagnostics(struct task_= struct *t) } =20 static void check_hung_task(struct task_struct *t, unsigned long timeout, - unsigned long prev_detect_count) + unsigned long prev_detect_count) { - unsigned long total_hung_task; + unsigned long total_hung_task, cur_detect_count; =20 if (!task_is_hung(t, timeout)) return; =20 /* * This counter tracks the total number of tasks detected as hung - * since boot. + * since boot. If a reset occurred during the scan, we treat the + * current count as the new delta to avoid an underflow error. + * Ensure hang details are globally visible before the counter + * update. */ - sysctl_hung_task_detect_count++; + cur_detect_count =3D atomic_long_inc_return_release(&sysctl_hung_task_det= ect_count); + if (cur_detect_count >=3D prev_detect_count) + total_hung_task =3D cur_detect_count - prev_detect_count; + else + total_hung_task =3D cur_detect_count; =20 - total_hung_task =3D sysctl_hung_task_detect_count - prev_detect_count; trace_sched_process_hang(t); =20 if (sysctl_hung_task_panic && total_hung_task >=3D sysctl_hung_task_panic= ) { @@ -318,10 +325,12 @@ static void check_hung_uninterruptible_tasks(unsigned= long timeout) int max_count =3D sysctl_hung_task_check_count; unsigned long last_break =3D jiffies; struct task_struct *g, *t; - unsigned long prev_detect_count =3D sysctl_hung_task_detect_count; + unsigned long cur_detect_count, prev_detect_count, delta; int need_warning =3D sysctl_hung_task_warnings; unsigned long si_mask =3D hung_task_si_mask; =20 + /* Acquire prevents reordering task checks before this point. */ + prev_detect_count =3D atomic_long_read_acquire(&sysctl_hung_task_detect_c= ount); /* * If the system crashed already then all bets are off, * do not report extra hung tasks: @@ -346,7 +355,14 @@ static void check_hung_uninterruptible_tasks(unsigned = long timeout) unlock: rcu_read_unlock(); =20 - if (!(sysctl_hung_task_detect_count - prev_detect_count)) + /* Ensures we see all hang details recorded during the scan. */ + cur_detect_count =3D atomic_long_read_acquire(&sysctl_hung_task_detect_co= unt); + if (cur_detect_count < prev_detect_count) + delta =3D cur_detect_count; + else + delta =3D cur_detect_count - prev_detect_count; + + if (!delta) return; =20 if (need_warning || hung_task_call_panic) { @@ -371,6 +387,51 @@ static long hung_timeout_jiffies(unsigned long last_ch= ecked, } =20 #ifdef CONFIG_SYSCTL + +/** + * proc_dohung_task_detect_count - proc handler for hung_task_detect_count + * @table: Pointer to the struct ctl_table definition for this proc entry + * @dir: Flag indicating the operation + * @buffer: User space buffer for data transfer + * @lenp: Pointer to the length of the data being transferred + * @ppos: Pointer to the current file offset + * + * This handler is used for reading the current hung task detection count + * and for resetting it to zero when a write operation is performed using a + * zero value only. Returns 0 on success or a negative error code on + * failure. + */ +static int proc_dohung_task_detect_count(const struct ctl_table *table, in= t dir, + void *buffer, size_t *lenp, loff_t *ppos) +{ + unsigned long detect_count; + struct ctl_table proxy_table; + int err; + + proxy_table =3D *table; + proxy_table.data =3D &detect_count; + + if (SYSCTL_KERN_TO_USER(dir)) { + detect_count =3D atomic_long_read(&sysctl_hung_task_detect_count); + + return proc_doulongvec_minmax(&proxy_table, dir, buffer, lenp, ppos); + } + + err =3D proc_doulongvec_minmax(&proxy_table, dir, buffer, lenp, ppos); + if (err < 0) + return err; + + if (SYSCTL_USER_TO_KERN(dir)) { + /* The only valid value for clearing is zero. */ + if (detect_count) + return -EINVAL; + atomic_long_set(&sysctl_hung_task_detect_count, 0); + } + + *ppos +=3D *lenp; + return err; +} + /* * Process updating of timeout sysctl */ @@ -451,10 +512,9 @@ static const struct ctl_table hung_task_sysctls[] =3D { }, { .procname =3D "hung_task_detect_count", - .data =3D &sysctl_hung_task_detect_count, .maxlen =3D sizeof(unsigned long), - .mode =3D 0444, - .proc_handler =3D proc_doulongvec_minmax, + .mode =3D 0644, + .proc_handler =3D proc_dohung_task_detect_count, }, { .procname =3D "hung_task_sys_info", --=20 2.51.0