From nobody Sat Sep 26 15:34:44 2026 Received: from CWXP265CU008.outbound.protection.outlook.com (mail-ukwestazon11020136.outbound.protection.outlook.com [52.101.195.136]) (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 D2D65463B79 for ; Mon, 31 Aug 2026 18:16:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.195.136 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788200167; cv=fail; b=ENotYoYElw1Dn1rBumDmg/YF2qhEM20zUV0nblwmPRZ3iK1aTYAJjc+soS34543p2cBSy9lR5oTxxiNtrpvqM7Yn4+YW4qpQOzdlCBL4CNeyqgk3c516tEhmvTFNhvPtNn69pVNGE/ADqLOdmscylWAjU0eZF6Y4WTeegekbp4s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788200167; c=relaxed/simple; bh=nsjHhYmXZN4hzlgMkVyJKl82cRbGUqrKfqXybFeNbsU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=kQ8pAx5ibGpJhVT5sJBQtOgx6cIBfDyU3im5ddG+3HDfbktf828DIqpFBqMRfAXSSWwHe4iJe50lVinwliUgC3gqiqqNHDXd2kCn1d1j/0Efq1HKPMSBj9M4s1qY3+dhXDf56LiEOPGzIJ2Q21UhMtzSd7w4XPK7vqJm/Kgj2FA= 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.195.136 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=UGgTlCcpCN5X66SNI7JhN0HsNLGYgqMybdMtKmDAzLsRlF7M6W+0sWRs18/93RwGaKbAlT4iumQphzjfSqb0XaX5ZF0aaYTubQiDpLrmEFohELouH4yCejNGMkDvttGAK/PD/YFBzJH4EzuUCc207p30E9VlY7axuDy5Mo311nlRNPFdysWlExwZTr15YEqIgYgMf/V6hbJAnoPRJfwBNxijfKwg9E2zN2E3sJu9B6ulFWoCH8Cup7U0WwrhyhKuYNv+XPxjg1UdiXJPSdgCxWyV5bOUWujgo27auiDfkzdfdGXsAaGa+m3HW6ORa3YmfpNB+lFHlnxa7jV7clW/iA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:MIME-Version; bh=wofrUf1LNJlgQBmBIXLOM/IDN2ezCsqRS71TGhhPVFg=; b=POfLh6d7KmR4aOpsaUqeviCxj0qIDyV1TVEOB4mSYKOWsU3JTisXUgsGiQhUQivwSaf8z7PmBZS/IXXvLTAi7eRbkCriSNRhUnPWM5CwLnMxCd45DSErqxby/qgMn/LiSyooUGep3j1Jfe6vVFZw2YfBnxkO5rFQOEgdGSq1ArYqv8hb6Hqc6r6ExwNmh9FRwu880NfONSRNfaH4AVF6i7sLCi5A97ereTxPhcsLVCWJ6axBRiQq6v/tpKo0iFOjIfxm9SO5nhMghohUyz+FhEKsBm2YUrBB7y2OWzXGzGtVnBP1cjXG9HjgAXoJPVzbGxhs2AXyg1TroLMysaaJAw== 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 CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) by LO3P123MB3339.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:bf::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.13; Mon, 31 Aug 2026 18:16:02 +0000 Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230]) by CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230%4]) with mapi id 15.21.0360.008; Mon, 31 Aug 2026 18:16:02 +0000 From: Aaron Tomlin To: tj@kernel.org Cc: leitao@debian.org, atomlin@atomlin.com, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] tools/workqueue/wq_dump.py: Support backward compatibility for wq->attrs rename Date: Mon, 31 Aug 2026 14:15:53 -0400 Message-ID: <20260831181554.117795-2-atomlin@atomlin.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260831181554.117795-1-atomlin@atomlin.com> References: <20260831181554.117795-1-atomlin@atomlin.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BN0PR08CA0024.namprd08.prod.outlook.com (2603:10b6:408:142::14) To CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) 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: CWLP123MB6607:EE_|LO3P123MB3339:EE_ X-MS-Office365-Filtering-Correlation-Id: 25878bb6-b142-46d0-edf7-08df078bea56 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|23010399003|366016|6133799003|10067099003|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: cRIbK2o3+qc0nsI1mS+zMieexFvGf1+ZDuMNZnF7cYhiujQrjheVzrsJxNFb5OD9cfS5ZiJy3I6VTsbyYQY1eq5ipBi42L7ZFn+qxM4DMikxrcBXQhANyOQJ6LEzU+JhsnMQTAZUYpvxCTb6nPs4s2+JOzQ9vwGbhTQNiuQAEJ+MmzAXn85gCL0G3T7VR1irl5hVfruE2vPlKd3Jnss7RJBIyET/H9UjbSWR3R6p2lEdgy6kOQeMHBd2BOLFqwrMi69BzestzfpGmJiLBYwjyVHE1VOqxA8JLG9qgkV93WLffR5oQ59SBMZWmFlvXO/j/9JMZEOigpoYvcuWh42Is6YM7wXkxKoeS3y4N/x6euFrXm+fNkns4BdDZ0OVaqMmb5phYrM3J0LKPx8YhqYUm7oh6Nj8e4tI17CSf9AAy03tNDEOvacuTxmkGv4Sn8MKj/L4z0LyBFqcIy/FVsZFQ0e6EtPLkSrsDE6zfXKjp166MFimY4DiatdIq1/1+ATm69rh1xvZPS+shyeZITb/7UbK2M4FkNoJyYFPh2QJg9/RGy3d9GIkzr2m3TDfFuxctoquR8O2U/hQ6AdfSOeG63CTbcbGXg9g9FMZMvFSVjekgGLL/UBQDtoxRsaZxk5zj4sYqj3Cer/4OSomDYnWLLKo/SDpsmUwJh1rpWaZr+4= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(23010399003)(366016)(6133799003)(10067099003)(22082099003)(18002099003)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?cwpra8hi1kz72OrSSe6bhJJbiT8BtLU21GPt8CA787ap8Mhppz9D5FOomBJ+?= =?us-ascii?Q?2z48PrdZFHFQWHnzMs8JviBzxDd2NHHniM3VCPV9cusEtTEFUu7KvCvp5MRp?= =?us-ascii?Q?/1+xfAc6SgidKTpgLI0tJfbxK7HMV8A1QJ1sNg18mt/MpG3yYhbljRaeYZbq?= =?us-ascii?Q?iStFsy+aIfsA8a3j1Gx0Nh2C2nXm83PUAW6NZHslCzpYHZIZCPRrVn9Rbkdh?= =?us-ascii?Q?6BmH5Ve2KjfsCzE7rjs8gsVslupu/6vAfk6Q0uzPYf694caDxfn8KZLjrTgI?= =?us-ascii?Q?LajFXELzFdmfvFkVJ65uYE0j08dC8kEEklyfbOA1LGqooKYrJdv6s0kLYigf?= =?us-ascii?Q?4LzhjR6lqVr2euoiz/foMoSE2VIIYnLS/ishX0CXsdltYutqXMjB/AotjcGl?= =?us-ascii?Q?dhtEuojSIsr6/hWvx0/EOClwBLcOLrpmRP4EorQAZiH7v9DXN1wUgT8Qt0Ci?= =?us-ascii?Q?djnRpFqfRLQNFvX7biXQyKiGYJbDruPutQl789lFub9FnkJwS0McYrrj2nYZ?= =?us-ascii?Q?KiCJ00b5wusNxxJoApgnXBpTFZwrhVqdC7k9jGzeo0rCjwe6QQCTUM75d1sS?= =?us-ascii?Q?LfPcf9LSFKz3RHMfPvcsrcR2Ajx77F9s9jrlwfikw+vu28xPxdBFXAoX+ORa?= =?us-ascii?Q?yAgt0nO9/dbE8U9X6wd012hS6ejewJ3cJ5hGeHc52j3Nhq31AE1HCwc1/hkl?= =?us-ascii?Q?BpJzXUXodh6Jh/zfM880cWBND6UF8v3qSrCnn+nd/rADxbdnx0UxGchHndgJ?= =?us-ascii?Q?senWzJMuLZnLqn7t/cVjZP0VDZhHyZR14jLJD1ivAJX+e7G923W1CWj4cM/G?= =?us-ascii?Q?sdlp154WJvQmncfuEZISJ56O2JHNq14o3jUhLOebrQxzXWxELoFxgBCqQxq7?= =?us-ascii?Q?5Whcj4S5BI31u/YKPIX0yY6QKO3oYjl30Fw1Ah5Ksu6rUopjHSbcQi3ESmpX?= =?us-ascii?Q?1wSNSLmmqT6ALuX5evT38GWkqQN9kci+hgpzN4Ghx0XcVS2YA6JRhk1usJP3?= =?us-ascii?Q?fkN8V9e2oxVVb+e+EeOpSqMk5bLMq2RfpJnOcirU/5b8GDNcP34AjlhAwLJh?= =?us-ascii?Q?q8b2CZm12GiHPEBZMab+4Wewr3R88FqQocJO0qtWy+lKQDPb47CnUXmGm0RG?= =?us-ascii?Q?RxbHfZOElELTYubjUd+bDtTeu4EafcBM9ANjjFICzNWv2GJQ/1U78efIcAjy?= =?us-ascii?Q?Ue/wqnwnebw595eX5eFwDzlRHMgK1UsoDbx5N4RC4rJcrefShNeLyOFN+KOQ?= =?us-ascii?Q?30Jk1kAPG5p6nX3JaEGb0ZtgPOfSHDCdwVds/aJjHsoYWBj2VWz5f4uj/UZc?= =?us-ascii?Q?lk3O2m8KcPI4opJgx50BQGhISOxsQxeUiI1WFE81ivHWRVkZMneP0hV2IfPl?= =?us-ascii?Q?C4BSPSrBUy9qDP9LY5N/c+hpDlVWxN5njqFyFy5HmCeWq3Ohw+fl+ttVV3yH?= =?us-ascii?Q?085zKWy5w4EsKXXppJotSgHjAuBlyVOZK7p0Kju0Bd9iMmqeYrEkWgWUXkEx?= =?us-ascii?Q?cuBcAxHEvIkr+wfS4CN52RayMndgXIQ52o8p7VFbiftbVA7Pwt3wcqo7fThV?= =?us-ascii?Q?UU3hQ6fQil7lybyD+fCAgA+d45XpR9CkffQriTjQdvwOKVxskvvUbuyzFzCN?= =?us-ascii?Q?7wYtSSXGWRG0SWN2vA2bIt+5OetKd35aBM3nz7TOysC4uU07hL5vaxXiwatm?= =?us-ascii?Q?IHRIeAZrPAMRmMamClZgHTbNm8c4ocJo9BwV3ZGjL4TFng0TcIETfVxl2KQr?= =?us-ascii?Q?JMq/C/yN+Q=3D=3D?= X-OriginatorOrg: atomlin.com X-MS-Exchange-CrossTenant-Network-Message-Id: 25878bb6-b142-46d0-edf7-08df078bea56 X-MS-Exchange-CrossTenant-AuthSource: CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2026 18:16:02.5176 (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: 0ExG8EMudCZpChGMm0nD9yyt7SCL6IICxPfARB7IO72VtElP6KszXwHgV6VmaB5/5ogzxFe2OkNgksVA4SiLjA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO3P123MB3339 Content-Type: text/plain; charset="utf-8" Commit 464e454e1cb4 ("workqueue: rename wq->unbound_attrs to wq->attrs") renamed wq->unbound_attrs to wq->attrs. When running wq_dump.py against older running kernels or vmcores where struct workqueue_struct still contains unbound_attrs, drgn raises an AttributeError. Add a wq_attrs() helper to allow wq_dump.py to inspect both older and newer kernel versions seamlessly. Fixes: 464e454e1cb4 ("workqueue: rename wq->unbound_attrs to wq->attrs") Signed-off-by: Aaron Tomlin --- tools/workqueue/wq_dump.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tools/workqueue/wq_dump.py b/tools/workqueue/wq_dump.py index 31afc24ef17b..9313ebe0c525 100644 --- a/tools/workqueue/wq_dump.py +++ b/tools/workqueue/wq_dump.py @@ -78,6 +78,12 @@ def cpumask_str(cpumask): =20 wq_type_len =3D 9 =20 +def wq_attrs(wq): + try: + return wq.attrs + except AttributeError: + return wq.unbound_attrs + def wq_type_str(wq): if wq.flags & WQ_BH: return f'{"bh":{wq_type_len}}' @@ -85,7 +91,7 @@ def wq_type_str(wq): if wq.flags & WQ_ORDERED: return f'{"ordered":{wq_type_len}}' else: - if wq.attrs.affn_strict: + if wq_attrs(wq).affn_strict: return f'{"unbound,S":{wq_type_len}}' else: return f'{"unbound":{wq_type_len}}' @@ -206,7 +212,7 @@ for wq in list_for_each_entry('struct workqueue_struct'= , workqueues.address_of_( =20 print(f'{wq.name.string_().decode():{WQ_NAME_LEN}}', end=3D'') if wq.flags & WQ_UNBOUND: - print(f' {cpumask_str(wq.attrs.cpumask):{ucpus_len}}', end=3D'') + print(f' {cpumask_str(wq_attrs(wq).cpumask):{ucpus_len}}', end=3D'= ') else: print(f' {"":{ucpus_len}}', end=3D'') =20 --=20 2.55.0 From nobody Sat Sep 26 15:34:44 2026 Received: from CWXP265CU008.outbound.protection.outlook.com (mail-ukwestazon11020136.outbound.protection.outlook.com [52.101.195.136]) (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 C196B463B60 for ; Mon, 31 Aug 2026 18:16:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.195.136 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788200169; cv=fail; b=sPRP7RWriS2ribmpns7mgiNv1JnORBHnfRAtohWgW/x3VV35oiBtG8koj4d1+r1wKzP3ank3It48MWQWZuv6mj6Nm1LdGkdAKKRF0j7SUluasVYA19OKKaHM4EYA+VBW0WlRtRTA7X5j/yfEQ27++nTDSryR74IHxcUkdbWENAE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788200169; c=relaxed/simple; bh=Z3Pt/ViOdSPCQCW5eatzaWhRoYr7ayf2PgGAr1N23bo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=VP528440RJ0Kk83cco0tMZni03UI4nT1CjMFs8Nr15/1RtiIWSR9N/c7/z+ebIoNbEPByURaKDD0Y9qiB8QYig2MHiK+acjhpgT5wRzsfwscXDFC7oVttvH12PvJSApyTyCoH8i5BIpyr8r5D8i7dx6JFifEIO87hsuuLLDRZl8= 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.195.136 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=FOU5dpgeKUbTieacdGaxKAwDZ/3aJGFudBalenOKqeWEIJ84AEkTYBL7IF26RgECUanLS8CSgM9lXrbPSjHe/D5sqdf8DRI/Je9mTsZgAvT7D3ptESUteKJhb/lWpBAnWWZUri5uQe4SpWzRGGaRQsZMKLcYcBAIIGHFlvHiBJs34CttpbFE5D3AyskIy5BUkc8CyUHBIlohLJsnjQRiaG6x+/+9UcTtwaPhM+ceFS0W8zBBq8aKG4966qo8T6uXm1J4xOeRKiiwKFuYw8/aRzly3n4UQTjx2DUYyq/oFQFUAkZ8PEjEHc87pyoJ3ti6r7cm5KQLujp0ZD/TIpIsnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:MIME-Version; bh=ADXmVPuEb003R1aM8g/hKSxvgm4AHaoi/KKxXLl7Qz0=; b=xvTAFF9Yxi5d52qruojc41ynpCstQudiFuUHh8TQDNwKqQ2vDnlQr6Hsmite+uBtSPB+kmd4IpLDpWZgBHrrEqGugopEMplzSXa6w4qR0dJhE2LBfBWtGPb/NzUMk6ci2GCFBPEFKQiL5MihaDK+L3K6T21yTH4LCfqnd/L/hRFH6VawO4K90Tp2luefJxnNkuQZZeNGoUCiLvOcdhLbZsQQh+yCvoRyu2aMDYtMlCyUnOcE7K+7yffGuJWSuDPotJ518xRIWjv34qGHaJpRF4bq1X2Tj4+qeNmnvgXcbnZrSUxEurHAhbBr5w2I/ZsXFhPmSNfyLMqdVlx/1tDi2Q== 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 CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) by LO3P123MB3339.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:bf::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.13; Mon, 31 Aug 2026 18:16:06 +0000 Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230]) by CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230%4]) with mapi id 15.21.0360.008; Mon, 31 Aug 2026 18:16:06 +0000 From: Aaron Tomlin To: tj@kernel.org Cc: leitao@debian.org, atomlin@atomlin.com, linux-kernel@vger.kernel.org Subject: [PATCH 2/2] tools/workqueue/wq_dump.py: Add busy worker inspection and BH pool states Date: Mon, 31 Aug 2026 14:15:54 -0400 Message-ID: <20260831181554.117795-3-atomlin@atomlin.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260831181554.117795-1-atomlin@atomlin.com> References: <20260831181554.117795-1-atomlin@atomlin.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BN9PR03CA0053.namprd03.prod.outlook.com (2603:10b6:408:fb::28) To CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) 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: CWLP123MB6607:EE_|LO3P123MB3339:EE_ X-MS-Office365-Filtering-Correlation-Id: 5eba45e1-3a89-4f05-fcde-08df078bec78 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|23010399003|366016|6133799003|10067099003|22082099003|18002099003|3023799007|56012099006; X-Microsoft-Antispam-Message-Info: xYm5Xx2gEsra8uE4hFQtAJt0aCBQWWsUpJi6IQLUSLSDKK2Q+cycJLnSIrlXIYFTAqMKJ2x11j0lnL2BHMIPg1OE2IBDUaOZdyrq5Nrf64N6QE5gl5gbfvci9+0r8v9TIqoEeXaV7a/rVRHbP7EonVebqBgqP9FVsB1/BdHsltk69f0dNmjy8rSt4DGhyaFtZZafKHGjBxLANUou5IfSUJwjqo0C/dF9dcCBCnIwAUAK6k8MbQsVIWh7UkqQuKzR8rtvODgBEhXDl3dn2toQplNn50aMpeF7PqEGQReg/SXORvbwZu6XwkjmPpfTbrO97U9d9Fp5YVuvvHZaJAv1cUaW0N+3FZfCdTOTyRX9RBs4OD3Vvp9LQKK8q4dIIkSkPEhOy9eHMeV1xnPPNJ6oiASWLTh6kMQ4eL1K8jFC2nbDWgjgDgenfPMTVgX1AP6QHpJk3MELvBMRLy0fQm+9mQcvrabfAAJ+KHa1l4v81wCPjGzJbmS79k2YCsImS8VUTv7NETAaMYBTzUMcB7ntWkr7IR2EcTzOUAIpDYhO0RfUgKoZ8d889Iwd3i5xL2UyopOUSSmzxb4Pyllp1wEDXVxqA/0U9e5DMC2k/njk59t/o+bueW+FoHE648pO22uGNbY+xKitta4uW81TlH+/J+td6iaQXc9S39MUhpDGoJY= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(23010399003)(366016)(6133799003)(10067099003)(22082099003)(18002099003)(3023799007)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?xpWRPF/jFiNF0MgUs0y8AqqBRXkAQX8cxCziagDdyI6195QhnM62ePywAYBe?= =?us-ascii?Q?9hOQyNG1gtfuQHly1yfjdGEUNc45axcJIR9/8JRBDyQ0CFrbe4CDPB++tpqE?= =?us-ascii?Q?AsRLND1YATW/OpVrNqYpnpt02EK8V+tXe6paP6SZuSn+tIw3RTG3lxttY3Kx?= =?us-ascii?Q?oQGlFqJs2/09PhnbR0lBw08nSP5/7Tn44GkciLMELPL+O+6fc1PPNaiaTDrt?= =?us-ascii?Q?TgkM1PSDb1vX1rFgq91nOri/B3IRwYa8U5eN+qemyvEUMHh2anja92nkoZbV?= =?us-ascii?Q?BXUGUGQX4FCJOTnC/HXdoDHcVMVttAeDkM/LI/pnXK+J8b2wvFpecMJuTuwZ?= =?us-ascii?Q?3ENIwhQfy4xmZRF1x/Vpjj0MSf/Z5kZqlJOLKj1w3/YYkxKwnFflQMoPK6Ru?= =?us-ascii?Q?gybHoWIBWpOCY10YiofmQ7kVL0Xcm+qT+664Zq+NDDXpBDCGGAjx0pN0Rbqm?= =?us-ascii?Q?DnoZZ/sIffcqBSU3GwzOqO15ugatcTbZVFdl7zn6ruMvhbb71tHqr98yIN8p?= =?us-ascii?Q?iMDrpKTZvrXEMF5tALWturRx2F+Bjxr0W/CUgei4qbyKCadIIYCbJbyIm7z2?= =?us-ascii?Q?ycYn+adDkocSYZpNUvsK+srwuTVz0W5/W/VBakKleE3A7AWK7WhmT41ZUP0V?= =?us-ascii?Q?0p6oX1GKSVg4I0VtlILflIyHfoy8aacb8efE2fIL5TJueErvpBsIyDelirwB?= =?us-ascii?Q?xqiZDEtLosh27jgugXEDbJWXaAtfkNayWrakPOV27QMteGzDVc5bfeUXS1a+?= =?us-ascii?Q?y2ckBR2xOYH69WFb3thsRvWhTkSk4/i2XQuxlcmt2NXhXnLkl3zl4l36rhYx?= =?us-ascii?Q?OKAK6jHNYMvGSKm1CaIxqb9rmNEVm96nNPeUcT4fd0ND7y/fHQ87dWffehDP?= =?us-ascii?Q?G3kRTgDxfkpwmaH1JKOfi2vtkBAsGadOlAC6Gt3sA30nfQH5cI42KIvdaAIj?= =?us-ascii?Q?Qy01KgmpkR8nuwa5QuXMevoXAj+8Cjy1XGwiqacBT9UYl/PvyHa577MqmoAy?= =?us-ascii?Q?6cie5XGxrYpn7BBOAo1p7mcSoJgGsGpkN6vzdnBTUkAthKR7Ya1VHtlK0aqj?= =?us-ascii?Q?UmWK5a/EcTXmP9XuiFXqSP2mSymBkh/IPlHH7eS/dLUYR2Xl86K9Z5ccRWWw?= =?us-ascii?Q?C1xIBSHkMopZsbCWgDJYQfRntriCUXUX3PehpELJZjaTwpyDYmIpdQbZehLL?= =?us-ascii?Q?B7SuqcXWa4qZn1svgNcEFQ3Bh+YCyzUlif5aybOohRS5XIDRRN4jsweeYXxA?= =?us-ascii?Q?6HHKoRZ2DPa+3pxhq+lNBk7pl4M5dG1mCSFDxnNKWZd5h2RjshCBa0DSDhMi?= =?us-ascii?Q?RWmeau+Q+fZm93gPFk8YD6+P0NRzxkonJiq36ooApG8zmnWuMRmV+pW+TMRh?= =?us-ascii?Q?LUAJutlc4XOTeia9t0AMvr//+SzG1mlcHfSYXwxx+zgSeXJzKA2LQBoOjp+d?= =?us-ascii?Q?dZyARTIad+eUU3N0KJMCUDujJakU7MGOiDhgkPL1CkmVPvw/2ftagwbq7z8t?= =?us-ascii?Q?niPJt3sjz228sAX2iXV1KIAvvMGNqGbDQMrZ0hk7c7tnVmGcL8sRRmf3r6vO?= =?us-ascii?Q?yfMyzzSpxp4yM9hnUH9/DmTzlxNTAHkIB/v46YTJhCMEvgpLEDDh7UrprJuQ?= =?us-ascii?Q?cCHdDt39DVaIUwUka3IEj2arSVzAcM6wR8enwC69/gknmbkgwY8wuyCWu/f7?= =?us-ascii?Q?03N01hmfzshJ+4eC9kmt55PNX37yzo49W04jywfY/s5G/HjRG9a/DdHvUOWQ?= =?us-ascii?Q?h9H81XO4+g=3D=3D?= X-OriginatorOrg: atomlin.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5eba45e1-3a89-4f05-fcde-08df078bec78 X-MS-Exchange-CrossTenant-AuthSource: CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2026 18:16:06.0839 (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: BnGjoZJBDd7EXcRQ4BzxhCi8KtDkttbgDAwCliy1IXEzWBFTA8uRdRwyX1Ow1n1ChTc7zsox9GDPeroYolMCxw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO3P123MB3339 Content-Type: text/plain; charset="utf-8" Currently, wq_dump.py displays static affinity scopes and pool topology, offering no visibility into in-flight work items or transient pool states. Enhance wq_dump.py with live busy worker inspection (i.e., option -b|--busy) to dump active worker tasks, callback functions, workqueues, descriptions, and elapsed durations. Signed-off-by: Aaron Tomlin --- tools/workqueue/wq_dump.py | 50 +++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/tools/workqueue/wq_dump.py b/tools/workqueue/wq_dump.py index 9313ebe0c525..1659bba6c0dd 100644 --- a/tools/workqueue/wq_dump.py +++ b/tools/workqueue/wq_dump.py @@ -29,6 +29,10 @@ Lists all worker pools indexed by their ID. For each poo= l: workers number of all workers cpu CPU the pool is associated with (per-cpu pool) cpus CPUs the workers in the pool can run on (unbound pool) + flags pool flags (bh, draining, disassociated) + + If -b|--busy is specified, lists all busy workers currently executing + work items, their task PID/comm, workqueue, callback function, and durat= ion. =20 Workqueue CPU -> pool =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D @@ -49,12 +53,14 @@ import sys import argparse parser =3D argparse.ArgumentParser(description=3Ddesc, formatter_class=3Dargparse.RawTextHelpFor= matter) +parser.add_argument('-b', '--busy', action=3D'store_true', + help=3D'Show busy workers currently executing work ite= ms') args =3D parser.parse_args() =20 import drgn -from drgn.helpers.linux.list import list_for_each_entry,list_empty +from drgn.helpers.linux.list import list_for_each_entry, list_empty, hlist= _for_each_entry from drgn.helpers.linux.percpu import per_cpu_ptr -from drgn.helpers.linux.cpumask import for_each_cpu,for_each_possible_cpu +from drgn.helpers.linux.cpumask import for_each_cpu, for_each_possible_cpu from drgn.helpers.linux.nodemask import for_each_node from drgn.helpers.linux.idr import idr_for_each =20 @@ -62,6 +68,10 @@ def err(s): print(s, file=3Dsys.stderr, flush=3DTrue) sys.exit(1) =20 +def get_hz(): + cs =3D prog['clocksource_jiffies'] + return round(1000000000 / (cs.mult.value_() >> cs.shift.value_())) + def cpumask_str(cpumask): output =3D "" base =3D 0 @@ -118,9 +128,13 @@ WQ_AFFN_NUMA =3D prog['WQ_AFFN_NUMA'] WQ_AFFN_SYSTEM =3D prog['WQ_AFFN_SYSTEM'] =20 POOL_BH =3D prog['POOL_BH'] +POOL_BH_DRAINING =3D prog['POOL_BH_DRAINING'] +POOL_DISASSOCIATED =3D prog['POOL_DISASSOCIATED'] +HIGHPRI_NICE_LEVEL =3D prog['HIGHPRI_NICE_LEVEL'] =20 WQ_NAME_LEN =3D prog['WQ_NAME_LEN'].value_() cpumask_str_len =3D len(cpumask_str(wq_unbound_cpumask)) +hz =3D get_hz() =20 print('Affinity Scopes') print('=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D') @@ -168,14 +182,44 @@ for pi, pool in idr_for_each(worker_pool_idr): if pool.cpu >=3D 0: print(f'cpu=3D{pool.cpu.value_():3}', end=3D'') if pool.flags & POOL_BH: - print(' bh', end=3D'') + bh_type =3D 'bh-hi' if pool.attrs.nice =3D=3D HIGHPRI_NICE_LEV= EL else 'bh' + print(f' {bh_type}', end=3D'') + if pool.flags & POOL_BH_DRAINING: + print(' draining', end=3D'') + if pool.flags & POOL_DISASSOCIATED: + print(' disassociated', end=3D'') else: print(f'cpus=3D{cpumask_str(pool.attrs.cpumask)}', end=3D'') print(f' pod_cpus=3D{cpumask_str(pool.attrs.__pod_cpumask)}', end= =3D'') if pool.attrs.affn_strict: print(' strict', end=3D'') + if pool.flags & POOL_DISASSOCIATED: + print(' disassociated', end=3D'') print('') =20 + if args.busy: + for bkt in pool.busy_hash: + for worker in hlist_for_each_entry('struct worker', bkt.addres= s_of_(), 'hentry'): + wq_name =3D worker.current_pwq.wq.name.string_().decode() + fn_name =3D prog.symbol(worker.current_func.value_()).name + + dur_str =3D '' + if 'jiffies' in prog and worker.current_start.value_(): + jiffies =3D prog['jiffies'].value_() + dur_s =3D max(0, (jiffies - worker.current_start.value= _()) // hz) + dur_str =3D f' for {dur_s}s' + + if pool.flags & POOL_BH: + w_id =3D 'bh' if pool.attrs.nice !=3D HIGHPRI_NICE_LEV= EL else 'bh-hi' + elif worker.task.value_(): + w_id =3D f'PID {worker.task.pid.value_():<6} ({worker.= task.comm.string_().decode()})' + else: + w_id =3D f'worker[{worker.id.value_()}]' + + desc =3D worker.desc.string_().decode() + desc_str =3D f' desc=3D"{desc}"' if desc and desc !=3D wq_= name else '' + print(f' busy: {w_id}: {wq_name}:{fn_name}{dur_str}{des= c_str}') + print('') print('Workqueue CPU -> pool') print('=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D') --=20 2.55.0