From patchwork Thu May 9 00:47:12 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rasmus Villemoes X-Patchwork-Id: 1933295 X-Patchwork-Delegate: sr@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=prevas.dk header.i=@prevas.dk header.a=rsa-sha256 header.s=selector1 header.b=eyZVsDG1; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VZYJh6rz3z20fh for ; Thu, 9 May 2024 10:47:48 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 638D88833D; Thu, 9 May 2024 02:47:30 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=prevas.dk Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=prevas.dk header.i=@prevas.dk header.b="eyZVsDG1"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 9BACC88460; Thu, 9 May 2024 02:47:29 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO,SPF_HELO_PASS, T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on20600.outbound.protection.outlook.com [IPv6:2a01:111:f403:2611::600]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id D867288412 for ; Thu, 9 May 2024 02:47:25 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=prevas.dk Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=rasmus.villemoes@prevas.dk ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dI0lHRH8Z+f6UXGTqw7Dis442RMTV1a4ib/IxpfE3vF38yTHiVIsOXA2wTiX83jhyhsdSFrNYRArJpwgFLbOGHOLLLZIDZJhr0Z3NnPWAU47taWrOaP0eC0SBO+I9cPVA8/SXwwDbX6sqHZYA/8o+Qfo8fYuINdGnCyf7UzMDc3IwbTdJtSSrcfMG6t7dBHzW40Q/NALUuDGilkS1HFcgWdvzFZseYVEYlUHDejPa9QQ4tyV8nRiaGaHM4UaKuxnapnlI+4mhsvDIyfoVcGLyD9XCF1jrIYzGyjd28/QkA4N+3K1e+XSMiKVjLz9MmLSIbvy051vJdeLD1Lcm3M1vA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=oynsCEbcFLA7uS0+MARxbdpLxc3jHEPRJa2HNxVQqgo=; b=QwNuJ3+cHQEBRcrXTnUa5cB8SbSIiM+BEFclxNpSgre4CA8JXxnJ5gMiCjYJuVFEafDL55howuVkqIPHEVPC/o6u0Jz9DIsjU7m2qSNIxw1xm0oJO5xRlBJTiTKyXDOEoqKJZwqo4Kh/DQzWgcCKBg2fAZn9HBWv+lQPW6UibztKkVDSS0huYBnfP0dLG8TvBMMsh4pkhL7EGWjZq4XneLROtNw8fRWX98FuqMIRg3VB4eVzR5MwTy4xQuSE1mYLn4Xpdn78e+T8bsxw7uGruhat8n3aYIV5f73OEmn24twvejzgN8kcCsAVJhIBEdtcPd/rHFB8SDZjpG1fZCgWTA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=prevas.dk; dmarc=pass action=none header.from=prevas.dk; dkim=pass header.d=prevas.dk; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=prevas.dk; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oynsCEbcFLA7uS0+MARxbdpLxc3jHEPRJa2HNxVQqgo=; b=eyZVsDG1ub+LkP9gCiTMAai28gNRbGwmdI5hqJKM85FsJOUWdEVvsQjsVdnasv4th2OOtMWKxoEgmTQ5WiS7Ci3lcpGsPrS3yP//K44Gnzg+gXIU+Yr7D7iJojpkchX7KpH01dtaAh7FnD4fITCzM5PtP9+pLrgucV89Wea4bvI= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=prevas.dk; Received: from DB9PR10MB7100.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:45a::14) by AS4PR10MB6063.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:582::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.47; Thu, 9 May 2024 00:47:23 +0000 Received: from DB9PR10MB7100.EURPRD10.PROD.OUTLOOK.COM ([fe80::9fcc:5df3:197:6691]) by DB9PR10MB7100.EURPRD10.PROD.OUTLOOK.COM ([fe80::9fcc:5df3:197:6691%3]) with mapi id 15.20.7544.041; Thu, 9 May 2024 00:47:23 +0000 From: Rasmus Villemoes To: u-boot@lists.denx.de Cc: Stefan Roese , Tom Rini , Marek Vasut , Rasmus Villemoes Subject: [PATCH 1/3] cyclic: stop strdup'ing name in cyclic_register() Date: Thu, 9 May 2024 02:47:12 +0200 Message-Id: <20240509004714.1394547-2-rasmus.villemoes@prevas.dk> X-Mailer: git-send-email 2.40.1.1.g1c60b9335d In-Reply-To: <20240509004714.1394547-1-rasmus.villemoes@prevas.dk> References: <20240509004714.1394547-1-rasmus.villemoes@prevas.dk> X-ClientProxiedBy: MM0P280CA0105.SWEP280.PROD.OUTLOOK.COM (2603:10a6:190:9::14) To DB9PR10MB7100.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:45a::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9PR10MB7100:EE_|AS4PR10MB6063:EE_ X-MS-Office365-Filtering-Correlation-Id: 85e7b44d-4690-43ee-f3ad-08dc6fc19701 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230031|366007|376005|52116005|1800799015|38350700005; X-Microsoft-Antispam-Message-Info: /0nCRTWwiZfSC67Xm2V/cPe+Nn4wb0/wJkSD6yp+9vuS2lGZTTHLZCKkC5hWsxdpI/GYpjrIiRmGxatm5jthUoeyXFGPCv9YJWARrSdE2k0r1lycgr0NLkJ2Rtwu4l524IjOMXPnezblikzaYSQpd62ayIVvG7AJOlo0ZYAWe026VSFw07d4M5QakUfhR0lBNnlxfWXUIx+ib552pWSL9f1vWRiM6h9vcFnXKNhrpYd5JPDeh5p1OTIAe1+1+3abGiSufNWrsN/aQe7S2+oVyMsaZRphFNzSYFa1MJeHyiXVy9kd8drjEjLPODsd6pYqQWGxF5Si/yfoyCdDmuL/FbgylgWVDPtCMGg0vEXfE6wIB517TzMGPQWtn+gglRJQ7LRbf8hQsbyVF82pqIl3H/+1HBmWO6hBwmZa2mujJQf8LSL7CodLMywvf2knONibHpDM0nHQs2KBcf8WDOlhAmUvEYNhoHUBHcfek/T+yXYOLfK1z/2EuOGgQFcqmqRqxCXiZ7A1gIHDI54nJG0baGaWocrUEqk/KteOeh+lYQA0TM6NkDl3DwtXivSDdcgQjyK+V0o2QohGzdwsZpS7uWuoemaBMrxQ3m0+uLXbk6nzS3nbxeO8QrMoRNEQC+DxM4xp1RmiULHmnvUFbzkn6vsjuMT1RILWkiOOxjw/RubNdYGOVw4aHbfLVb2OxdKvwrPODaukjngp5MR6BL6J2U5lSY2IeQC3BhKYKkLVOOHly7/IoXuGqX2B+WK5vfOt6bJT6av7Oj2rJk6oH5s/hc6yDxJ/NKv8bqs5cZSLuiKe86SEFurQiM94sq8ucD3ZZBBzzwHyN9mypgFeJVpGqafLVeDc0xp16uoGf9JCT9Q33xsAhKInb2wxUoOtcBDHn4euY2MNsQeOVTYN8W1yDykXHnk17AWm1ybSRyjKnj04iFHlbemcycYTz3VTxZgIZ791Gl0la7Nx7D8wByyZSr5zeUJdvYK6nX1qFXD5YOzUOmAzYZcu6FIIuBgCUqovAzJEAQHpTC8muxlTzAxkVC8891zrbk4ykMYmM9qRUOGOuv8/9pW9TAKwlBssd1iRCQDWPHf4xqi9CrPd825PvcOIxTRwmI6iyPC84sR3RHx2Z6WVi71+IBzZnEtTaKJONzJe/3lsh1JhWtlaMucdlV7ylaSnwuxAscPJ9iEEXEj9S7fzOHrC8VoCO73ETOMTqiVxR+GzqI+NsZiJyUbgg36QREo0HNshui7Oo9BcFDReMqDS4I+h1qYMI0FgH3fTuI7uNMBCMr/G8+KGT8ymzCXvbIeZpWbcvKMRb+QTOOFPe+Od99qV0aJPCNws1CJ+5xRcE7DBPG+npjLtEBy8gQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DB9PR10MB7100.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230031)(366007)(376005)(52116005)(1800799015)(38350700005); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: BKORXXIk7vGnblVVuHloTvrXB1bhbLxvsXhahhDz0KloIFqkzxbl4w3Y6zKPmTUBfreCfMqG3PIsBAo+iJi85b8k5uXgw9854oMa7/Q2UckUoeMqFGyON78FfFD1uX3SeI9qem5djVEi7qMhpxS4Tk4vMereAcBXed1vZHC9TbqhgdWWP+usMPyNKpr59EDZNIjF2wEzsZW6oO54rJc/brr2cR9uhPvP2sPAC+0rMFcY1GSsSjJRC2fUhNgfaBYabbDHEkq6c/9behKSN4cf+AtxhQG+E8p7SVZyH80iZsCYVS8HA0ysoE9+CtMQKLen6rMvwp0P1+uMAJ+XZB2MLOUyTL8LJaABeWtHcBuQx1S8W+eVIQcXBE52hqkvwolchukakL9DmonQwu9P5x1il3SHvw9S+ZjOYuhMjbg1/g6HoqZQZdtOm9REV98NRoRvhGovdFw0UGypykdOZvPeZfHeN811bJmLLQQ21Hh2kq0uw5b7BjU7IQWinkar8SE/5WGSH3+ODOwlG1ti3MH4QyCpdQYcfV0CKqUeFj9Ky7431isM0vmV5fxJtqyAouUBtm26jl9szxgPIhAMDcxaf7+yCOxRHI+jzd+/e7SkLX9D7jPWrdiVDEv/jSnRhkdQSJp3evvMq2zBRtLK3ihvkLbLhRlAnjDJHTK2PowP3oGmLjd72HG39/DlwNyc/PHw0/EWagGMx5u80eXDW9fIIvzubYwP/yxB32RdMbye605OJ7/NYCSOkRsxTQe2d37hOkHCW2Z7A0p+FOzMpp1acTg3nPfxquUC1sXON1S7kSC7Muo5OFi5qEeaVH3b5bmrXCFac9LoyYndOR0QGGDfLBf6O2pCs+9zDlJ1F9+BeNI/ck5tqz5DiQl2dhKgRVv9JQvmEi0iTkB6wVpJIZTX9rPLKUWy+1G2/+UU9ouoqoWDWc06XX7CZMWTBRtb42coCaJx6reNgdBogzoeetGUR4vpa7iXbKBd7tmHUk4LNx1OILKEJZ1FIIyUj7iZoS55eGWexFE8PVtorz3qAs6XsLEizaQZ9eONGwAy4+6AHbL+TsQm/mVhReYe4On7iZXKQXFTXd8WLXPrfJ+xUd4s4eO/ENczk2asIfDs4CEINrzOLvQ3rDCADyn24b9n0ddjdS7c7lozpWhPR6r70XYzIEul1rl7BYJEee0V6HJW5Z+6VbDvRqxctGif7xVFoQCaT1W//5/4U5dmH17w00SNfEMwq08mxSeo1aGZUQ2yNQX37t2yKJkrnuNhwYe80kxQdNDm4R27TnhNbY5XnMVgb0qrxpAbc5ot9t4kEIFjT8nGOSR2LBqaUJYSjKNML7ZqjTXdS9EBZ1wTkZPSvD0od/SMmu8gsU12v1bsa+BUBkgUG/t93uAkOrGzP9dMgdNFVnRUeLTfa+2wGMkGyflbp/FF4oO4HaAu9zU0dp6e/cpV9PqulJiwscTa+k311Du1qhGLpGsn3e5L8hhJCcYBdW2KPFVdfe1n9mclK6uQ9TqhsAjdDeuz0+rjIeAAGs3SxUrmiSoUsonQNaanBPU3un2sCbG5NxxSoz9YHvHPulRhmWtk1PsmHuJMfPiEay1xi1FLDEBReenrIKeFvVlBdQ== X-OriginatorOrg: prevas.dk X-MS-Exchange-CrossTenant-Network-Message-Id: 85e7b44d-4690-43ee-f3ad-08dc6fc19701 X-MS-Exchange-CrossTenant-AuthSource: DB9PR10MB7100.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 May 2024 00:47:23.3884 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: d350cf71-778d-4780-88f5-071a4cb1ed61 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ifBrYP90K36pYkrFn6ZsrpySncOED2YQbTKSVxanv8pTG8V27zeI4KekJFDmwUKODoHf1hFw5Kl0UzrmqrxDrgz8W9/LAAv0/FNW9Q1vlfs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4PR10MB6063 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean We are not checking the return value of strdup(), nor freeing the string in cyclic_unregister(). However, all current users either pass a string literal or the dev->name of the client device. So in all cases the name string will live at least as long as the cyclic_info is registered, so just make that a requirement. Signed-off-by: Rasmus Villemoes Reviewed-by: Stefan Roese --- common/cyclic.c | 2 +- include/cyclic.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/cyclic.c b/common/cyclic.c index a49bfc88f5c..c62e7fa7d19 100644 --- a/common/cyclic.c +++ b/common/cyclic.c @@ -40,7 +40,7 @@ struct cyclic_info *cyclic_register(cyclic_func_t func, uint64_t delay_us, /* Store values in struct */ cyclic->func = func; cyclic->ctx = ctx; - cyclic->name = strdup(name); + cyclic->name = name; cyclic->delay_us = delay_us; cyclic->start_time_us = timer_get_us(); hlist_add_head(&cyclic->list, cyclic_get_list()); diff --git a/include/cyclic.h b/include/cyclic.h index 44ad3cb6b80..38946216fb8 100644 --- a/include/cyclic.h +++ b/include/cyclic.h @@ -31,7 +31,7 @@ struct cyclic_info { void (*func)(void *ctx); void *ctx; - char *name; + const char *name; uint64_t delay_us; uint64_t start_time_us; uint64_t cpu_time_us; From patchwork Thu May 9 00:47:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rasmus Villemoes X-Patchwork-Id: 1933294 X-Patchwork-Delegate: sr@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=prevas.dk header.i=@prevas.dk header.a=rsa-sha256 header.s=selector1 header.b=XuBWdia9; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VZYJR5sY4z20fh for ; Thu, 9 May 2024 10:47:35 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id E6FAB882A9; Thu, 9 May 2024 02:47:27 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=prevas.dk Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=prevas.dk header.i=@prevas.dk header.b="XuBWdia9"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 91808882AE; Thu, 9 May 2024 02:47:27 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO,SPF_HELO_PASS, T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on20600.outbound.protection.outlook.com [IPv6:2a01:111:f403:2611::600]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 5BB7088245 for ; Thu, 9 May 2024 02:47:25 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=prevas.dk Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=rasmus.villemoes@prevas.dk ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lrFJ9cfa+ovcZw/n+jBlJmMv5aThufcUlfIWEBSMAsXpQml6US+i4DOy978LnWrstfzH4MjFjVyqgoaquuZz83nOcxAj7MkbDyCVoIS1Z4mbo/BMXJOU0D+rAeTq7SLMj3RikCqU66mudBYWG0GZKY83nuATMfGVS5FjYDezuGoiYY5+FXnoBnJKN5PCKE5vWu0PZpUqkGC0dKsADE57/AR16CucR3paRbbor22ZfOn6zIMt6k4Gd/WAntMm00m1pWLMoJQsx8ZTuAgCTHE/q4Eh7xXGRzSjer8WjTq37HAPeESJB/Yp4zBlbrjsgFAcymS/34qEPaAgpUExm9Od3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=BP2nsYBt1BCf09q8xMcg6Vwc+2sAjBQoBR9w6bPQW6g=; b=g2d022t/Q8EnR1QgX9ynalbCuRSBqA/FLMCBnMa7Yu7d0cuwgZy8aJKFFsvu/ghT/HtksiexSNQBRcCr8UGg2cfvGFUf4ZbHn+6Z94g4+xUoWiBNJV8HkoH/o0GWSsLho7fz3k4ortONlu2nvZGuZgqi7vEKgCA9a6+orBbO6hhJ6azdpX7tR1rMjtxtsc9O+TwS6goC6Jfw0OXk02xExFIyrE79ra0FrIc5gyTu5WxgqGRz2Wz8Ax/xVGlk8D37OQLNNvtaictYyU4OOySFXBrObB9zNkiExtpKzEkmt/R2XFB/eJd4Mq/yQeW1vQ7ko6QKPm6oX6sNDvVyKZXsIg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=prevas.dk; dmarc=pass action=none header.from=prevas.dk; dkim=pass header.d=prevas.dk; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=prevas.dk; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BP2nsYBt1BCf09q8xMcg6Vwc+2sAjBQoBR9w6bPQW6g=; b=XuBWdia999gLqcBQpNJxhNgfX7oeQKos/pASiQIpmK4z16C6S+5a87VvCw+SkEDg3GmVQ/bAXNJ0MI3X9yz/Oo3mSRxnby1nyPLbL9tjaxppmjNK8oL5fn4+G5mN1vDGGbDvlIgyV1278WrdE8uOlYiJToJoLBtQMgfxjvUaDT4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=prevas.dk; Received: from DB9PR10MB7100.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:45a::14) by AS4PR10MB6063.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:582::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.47; Thu, 9 May 2024 00:47:23 +0000 Received: from DB9PR10MB7100.EURPRD10.PROD.OUTLOOK.COM ([fe80::9fcc:5df3:197:6691]) by DB9PR10MB7100.EURPRD10.PROD.OUTLOOK.COM ([fe80::9fcc:5df3:197:6691%3]) with mapi id 15.20.7544.041; Thu, 9 May 2024 00:47:23 +0000 From: Rasmus Villemoes To: u-boot@lists.denx.de Cc: Stefan Roese , Tom Rini , Marek Vasut , Rasmus Villemoes Subject: [PATCH 2/3] wdt-uclass: prevent multiple cyclic_register calls Date: Thu, 9 May 2024 02:47:13 +0200 Message-Id: <20240509004714.1394547-3-rasmus.villemoes@prevas.dk> X-Mailer: git-send-email 2.40.1.1.g1c60b9335d In-Reply-To: <20240509004714.1394547-1-rasmus.villemoes@prevas.dk> References: <20240509004714.1394547-1-rasmus.villemoes@prevas.dk> X-ClientProxiedBy: MM0P280CA0105.SWEP280.PROD.OUTLOOK.COM (2603:10a6:190:9::14) To DB9PR10MB7100.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:45a::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9PR10MB7100:EE_|AS4PR10MB6063:EE_ X-MS-Office365-Filtering-Correlation-Id: 7167b8c4-0cee-4db9-7680-08dc6fc1974f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230031|366007|376005|52116005|1800799015|38350700005; X-Microsoft-Antispam-Message-Info: uXIDlQavR5bjXlrJIFrhTbj+N23vBeeT7oc/3uECkBnNIWd9bKu9el/Ibpcl4aNB/TDmdotHYVfo1FJxZLlE+q2YXayUFbqdXr8ywhzqmLlNi9AjGvgCV4I6X9or17FTEZwf6p+WSAY6NCEwCjCQdbSMxLNJuSrFwVL+1jVpCFvD7oqBdtg8A1GRlJRqW/Bb+4pNS6kPTZEHVo7Y7h8qSiusMNoh7Mt0j7phwv5HRQ6pMxV9wS1sLio7zNJpvznB8rEvtADQNsRLkHhcfLrG3MHrczP/jjZD7JwXS7e5Mgjt2Ekb4GS88q6GqRof2bAsapaJ15V57RtGPbszfzuWEJpuTg2CqlTWBBqnPMpxTP+kYcG1biE1WfnPJ/3fMuqOpx/tQhbDVCabl/nEv75DI4V/E83RH4AiuAy1MRMYTTyJZLLsviwwebgSrgJ2JDNcCppaDVBubfNKmwnH6k3d8IEYsfXVzFaZ1U78wCo3xaautmDZhUbLxICADorwGhn+7bCnioqHbkg13AMBvR7hR3ZQue5kPjyHcbhDn2nIiIfgSvQRI6runD91nBGSnUk+WNXfpMDPfgex8aSjLM65INKD/t1td2KGK69K3O2J9DC5N5t9eeChjOqFs/UjVUCJAgJswafFJfN9L43Bs6dBUOcRExkvClFp01FCoDH9lr6aCk05kaZWYlsyfiHHsePzbrFylGbYu9GV6RsvYzG8rnL4tMmleFNn6Fe7QoHrjR6dy0mlsL4u2jUMSBWJcJpkG6UzMCLXdO38VcwTPkCvcl7KtQyZ+FppZYDI0sl+HPCpMwtrtXS9STqulvAPPQSL2WeNvWH2u2kMBv/B/jRSFqImWGidu2eiGCf0t8Mmd57iPDyGeFoRLf63M0wZ5H53q7Nlr/G1uPQ95ho7a93PJt2klnjAa8UfW5+mL4Sq0DURcUlqy+lZ4ttO5+X6XJPrGggln8I1Q2yi+Y5g/KkUgziBEE33NYxgfJ1gcNLbD65cVuc+l3r7dyoERVDSYLBUJ4u2d0LxAb5OR8w3qfDEnHEfr6kyedHe6zxqZ0V/gpWB26qyszNPdDySfE5xX22bflb/CDeVVhw6Hea+CEtYdstTnR4HOWtKGaeoF7PO1k1ifrphnQlnUR/RB2u3GOclWPXt7hhvV+gpG/TP0PUcZWT8Jeyt/QWfelNMh9H27vYsv7SdI/9nvK6yZ8TWnyiVFtjeiLEj+KZs2JZNgS81w91ieQbQLwVCyqH0Cj8f+eMK4VvBfuATFta91xHW+QWUxTUZe8YUiiI6FKhOqp1rxi7cTtWo9xq+d2eRXnKoQKhRg3WGsLEB4JxzglBhWyLtAw94qfj9aWh6E3Or9hgq4A== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DB9PR10MB7100.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230031)(366007)(376005)(52116005)(1800799015)(38350700005); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: M/TIvki1oFsK3K9UxuQ8HQMTETPV0zLleh/qcNIYS/nhsDmmrD0/ncJoEqxZqSj3ofoOijyCdsEIGzVOSruV8HFUrUx6qr6AUCl25YxFrmMo4GUyhS56rsAunOL/Y9aEjkeXqBgSpEtMnR9KedWeez+9s2QjQHwdhktIscP3Yji53DzLrwUurMDX0EHgnebG0q1iFRhW3IiGqcDO2dXqm9RDRjPrmm/xa56FOyHeAoLdvbK4NgkyXTP5W/jMiaCToEzHYGpkfvpmshJGgPf9j2Pk7e/w7trTN2D/IbvdqUSfkgM0SlPITpDl6LfFrBxK8m6i+iCaCjjGTzk/v3I6X9ykNLimXajtn5fzaw65p9fyIguOdgqrIufBnNUhRaeHQyT8i8r9h9OLuKZkgkMdlxXZwpjPL95XdHwzndG+IVq4aDI5zGldSS9TSNpq1aiOwqMWAP1nxpEzJkJCnWAM4pmTNUhq2Th3xIhcyWc33iPL7DsWhb9v8je/08WRYqLKHfrD+5DpSIwhola+sBZHCMBlFqk4KKzSZMhu5/ACIRK4EsULbpO/22aRx7a6ARAfR74827wezoM+9EjQxUMsOQiDbnO7p5B7WBWzaRP1mBHLP+sy9ZWjbFAfmnPAmLewlVBlRj4HLGT2af/kj0t8qO19/EULbu8FI5+POPg29KzQujDpjpkghFbnPmtteE4vnkl/B/RFiKnGZbhyB1MT8aU9DjhM1fwXkK+NKI2DR2ViGJm4skkWo6qR2WkyESPQaOEOCB9/pzpB8+l8kklyN8GbyLJrUnN2yoz8ozt8gBRvKH9jNd29jIiQY1ikc5EtRp0GavX5JLa7Bg9u7VRssmdAJDGsr06VvizVM+6i+voYjaiWGpWB74ZGOlDe0WITI6PIOiKwdZsZNCIfUkBlPuDTkik1fPHfUbAXMm4z8VsUR9M/b+6hSiGwcRvrKwK9+FGO/hOo7v7F2qHDFykCM/H7BmqmVGnPU+geB/6wUg/ggYL3wNYq5LcdqIWOSqn/Dm+kX8CVIt8nn8Xyfry188A3JAiGXVA55bDaIomqs8V0xUya+iYpIugokOq+XclGcCDlr/ktix6FzwVBd5PKQgUW71+3pW763dyB7pgPOU1zFDo0IJFhnmpl9wFhHm4itE6Qv6J/vxGQ6p5iDt9HHIkAfMTsTEHKjpFMB8MzCRsVuiHuMFE3GRO/X+ugbHU6FTMxg9sJKPD5SFaPwlBFJ0SyNEKijGFqkjsldqdbg/oFK7SFeFPE8gIdfJu0neWv51xrRby717Sk3injRwFjNQvDj+r9gkJr5lmxMg8/bLhYPfNGaGQ8GlDSwKxaYu5Bs5ob/uw7b4F0fLYAJ6amq47M+aCIesAjdk6uwocpdrbeBIRCU7ZxLKuRXEO7SkuTCq6f+k+pkJooXQ0rqodK1gsjzaWsayANdRKb5hjZDK+K0gxSXAAKglEFh+9zh9UYjSzqKrYBvs5A1TzXKWYDEp0cuXpc22ihngdXpITjksW6kcPNhzS3doIgntHTK+k9gf0WhogebAHLFR5cgldPKwGihxpwM1nA/IVLkpH6S5FQafcgi2zIVgeHxv7nbiIY9MYOF0yX4JSpxqTFx2xUpA== X-OriginatorOrg: prevas.dk X-MS-Exchange-CrossTenant-Network-Message-Id: 7167b8c4-0cee-4db9-7680-08dc6fc1974f X-MS-Exchange-CrossTenant-AuthSource: DB9PR10MB7100.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 May 2024 00:47:23.8710 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: d350cf71-778d-4780-88f5-071a4cb1ed61 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 7inSL5W6S9rzN2i+66Vpmvq0neKBxZzUEUc5/fkD6rSQpGTSngt6eJmfFoaJM71Mfbd5bqG2m/NioLD14E+y0deApFFQQt6fbbtVvTE/gv0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4PR10MB6063 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Currently, the cyclic_register() done in wdt_start() is not undone in wdt_stop(). Moreover, calling wdt_start multiple times (which is perfectly allowed on an already started device, e.g. to change the timeout value) will result in another struct cyclic_info being registered, referring to the same watchdog device. This can easily be seen on e.g. a wandboard: => cyclic list function: watchdog@20bc000, cpu-time: 22 us, frequency: 1.01 times/s => wdt list watchdog@20bc000 (imx_wdt) => wdt dev watchdog@20bc000 => wdt start 50000 WDT: Started watchdog@20bc000 with servicing every 1000ms (50s timeout) => cyclic list function: watchdog@20bc000, cpu-time: 37 us, frequency: 1.03 times/s function: watchdog@20bc000, cpu-time: 241 us, frequency: 1.01 times/s => wdt start 12345 WDT: Started watchdog@20bc000 with servicing every 1000ms (12s timeout) => cyclic list function: watchdog@20bc000, cpu-time: 36 us, frequency: 1.03 times/s function: watchdog@20bc000, cpu-time: 100 us, frequency: 1.04 times/s function: watchdog@20bc000, cpu-time: 299 us, frequency: 1.00 times/s So properly unregister the watchdog device from the cyclic framework in wdt_stop(). In wdt_start(), we cannot just skip the registration, as the (new) timeout value may mean that we have to ask the cyclic framework to call us more often. So if we're already running, first unregister the old cyclic instance. Signed-off-by: Rasmus Villemoes Reviewed-by: Stefan Roese --- drivers/watchdog/wdt-uclass.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/watchdog/wdt-uclass.c b/drivers/watchdog/wdt-uclass.c index 417e8d7eef9..caa1567e0c3 100644 --- a/drivers/watchdog/wdt-uclass.c +++ b/drivers/watchdog/wdt-uclass.c @@ -122,10 +122,11 @@ int wdt_start(struct udevice *dev, u64 timeout_ms, ulong flags) struct wdt_priv *priv = dev_get_uclass_priv(dev); char str[16]; - priv->running = true; - memset(str, 0, 16); if (IS_ENABLED(CONFIG_WATCHDOG)) { + if (priv->running) + cyclic_unregister(priv->cyclic); + /* Register the watchdog driver as a cyclic function */ priv->cyclic = cyclic_register(wdt_cyclic, priv->reset_period * 1000, @@ -140,6 +141,7 @@ int wdt_start(struct udevice *dev, u64 timeout_ms, ulong flags) } } + priv->running = true; printf("WDT: Started %s with%s servicing %s (%ds timeout)\n", dev->name, IS_ENABLED(CONFIG_WATCHDOG) ? "" : "out", str, (u32)lldiv(timeout_ms, 1000)); @@ -160,6 +162,9 @@ int wdt_stop(struct udevice *dev) if (ret == 0) { struct wdt_priv *priv = dev_get_uclass_priv(dev); + if (IS_ENABLED(CONFIG_WATCHDOG) && priv->running) + cyclic_unregister(priv->cyclic); + priv->running = false; } From patchwork Thu May 9 00:47:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rasmus Villemoes X-Patchwork-Id: 1933297 X-Patchwork-Delegate: sr@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=prevas.dk header.i=@prevas.dk header.a=rsa-sha256 header.s=selector1 header.b=fzC5MsX8; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VZYK04lQNz20fh for ; Thu, 9 May 2024 10:48:04 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 6509788472; Thu, 9 May 2024 02:47:33 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=prevas.dk Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=prevas.dk header.i=@prevas.dk header.b="fzC5MsX8"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id E52B188472; Thu, 9 May 2024 02:47:31 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO,SPF_HELO_PASS, T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on20600.outbound.protection.outlook.com [IPv6:2a01:111:f403:2611::600]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 028B388445 for ; Thu, 9 May 2024 02:47:26 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=prevas.dk Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=rasmus.villemoes@prevas.dk ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JwLpxu3sc0O5eC2OSUTlPnc7WXeSW7zLkFL20EhQJCwMATZazxmOpYhQmbCuVD9Gxm7e+sb1OE2sDRcjzyROvvSaIyUEUP9aDPKxw2BAgRjBFngo+2JVgcNWsjnvJU3diJYOG1uzIFV1uduQKNgP5MFA9tY+VWqT4z6zVv4Q4M18iT+0Zjulk2dCqIwf17dyav2wfukg3QKbx0TLgrLHUmrjiJEpJhc/J3ye7vRDVJ0o7gywGTNGCzsb2qVFx2Z3eivtl2K2ld+C7t3m9So+OmnacRLaVEMAgAZQe3aebzQlq1iuVd81A0hBnU81T3qR7fGBDLyMXHgipT7R8qv5gg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=WyreIx7bNiw1sIPYVXPE3aZ63Gu7tIMblN1UkIOGibg=; b=k+QGTvTFLb5yVUdRrEaVuvL5KzA0VbraEcQjW4f7kyBFCQ/i/9J1mvTBgIZ473BaR1MdiTYXzx4K5WZgr80Rfd/4aJ7YmZc1Tr2JdYII+oPbfnL546zaGJC6h6/hLgd+5QJruJFoIsrexk4okeG0KNpJwzix8Q2ZuCst1MX75zndrIgSEgLFkarnBH92gtJLlz/w0AO35+UVvX1xSwAv/NwkoWg2UE05URpFCPzbkbiucemOKAvaRgS3BSQSacri0oWpyXERSvXGIvTBkbq52qTw0g9CZNH6cvxC+6sUQdb4y2Oju0mHgEzsh6BSdGCLRuJ1AQoige1U/mo8p7b4mA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=prevas.dk; dmarc=pass action=none header.from=prevas.dk; dkim=pass header.d=prevas.dk; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=prevas.dk; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WyreIx7bNiw1sIPYVXPE3aZ63Gu7tIMblN1UkIOGibg=; b=fzC5MsX8RCazFPBng1UaePr/GgvawS4xRGG7Hfp5oYRKDSezDIMudAR8nc5R3tN1SePW11erUbFP3Qzbf3/rwTFvmsPEaPPZhR9opUo+L8uO2i2oJbBoIczcI+I9Jl1NrHPGT8HZq0Cl9bxyFiQpnsfTqeq7MFEcudE1e0pAdd4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=prevas.dk; Received: from DB9PR10MB7100.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:45a::14) by AS4PR10MB6063.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:582::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.47; Thu, 9 May 2024 00:47:24 +0000 Received: from DB9PR10MB7100.EURPRD10.PROD.OUTLOOK.COM ([fe80::9fcc:5df3:197:6691]) by DB9PR10MB7100.EURPRD10.PROD.OUTLOOK.COM ([fe80::9fcc:5df3:197:6691%3]) with mapi id 15.20.7544.041; Thu, 9 May 2024 00:47:24 +0000 From: Rasmus Villemoes To: u-boot@lists.denx.de Cc: Stefan Roese , Tom Rini , Marek Vasut , Rasmus Villemoes Subject: [PATCH 3/3] cyclic: make clients embed a struct cyclic_info in their own data structure Date: Thu, 9 May 2024 02:47:14 +0200 Message-Id: <20240509004714.1394547-4-rasmus.villemoes@prevas.dk> X-Mailer: git-send-email 2.40.1.1.g1c60b9335d In-Reply-To: <20240509004714.1394547-1-rasmus.villemoes@prevas.dk> References: <20240509004714.1394547-1-rasmus.villemoes@prevas.dk> X-ClientProxiedBy: MM0P280CA0105.SWEP280.PROD.OUTLOOK.COM (2603:10a6:190:9::14) To DB9PR10MB7100.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:45a::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9PR10MB7100:EE_|AS4PR10MB6063:EE_ X-MS-Office365-Filtering-Correlation-Id: c7a47783-6b54-4cbd-9416-08dc6fc1979d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230031|366007|376005|52116005|1800799015|38350700005; X-Microsoft-Antispam-Message-Info: De/AWG3L5xcGcIYau+sHwjai4wY3c4r1kOkugTOwaLfQ6AG58xwAj2Ix+eTPZaVVKVzkFazrbnrjNSc/op9cwaw0nlzZgTpEcv9pAujDDZv6aSuwdr4CniUKEVNy0WoZKMhCoveHnbNvcDarVOHujVCTJsbsIRSxxDOGBwXWt/eHiVk+smiFmXvVHzKBC5Sk4Z/TqUShgQgOD3t3cW8XHwGc3ejIza76Ntv2sv5a+7HEAVnR3gS0UaZvJerSCwjddBRJgqHAEEjf8GKEd14qqJAQDTakEWlXpgJZsSA95ObRIPUoeSgLqX9Qdr1agjfRb+ZIzfPEXshI4i1KtUBJlEi/cJfy7omd6YbkhgMrFD++/XToBJnKmypdmZZvRgV146Tpwb9IGSLxHbTukJpF3moTU01cLBiITG1N8GQXwncX7JXKT2bwt17Lq6WqUI+gW2erZLUpJg3n+phdmml3/qfH49pp00gOHd2jMIqsUetmkd9vV0besRh1RAwPDV4o9bQL9YlmPIDsF0Stm5j6uSHoaqy6j4H16VS38XO8hG+HAVTuv3KVPPdMwoKRKZkuL2fgvGNz0lKke2XL7RS9BRaU0TB7Xu536np0ds045KER9TIXa5RAE2iJiSqC2k0CqJpbWMyNtZLIqHAXavSc6rAh2/7/s9yJnlR6rhKdUyjaXcNCMmYvi5Ge+fB0lJMU0eNgAS6h/PXobBvIscfUWM5HczTGPfPS3VdX7VUUTIb1Z39SzqJjMdkiucYXCOa+c0x7lF9SY85Ucoq58Va3E3TxXqYvfo190xD+iIONC3KlW+lIkdj10h5vjizxNPHZc8R68LpzCCM4cCYKthsXcvCE/soLPFIj6CT3EtWOsMbCrAyeOP9UAtpR8eq2mdJoSPxJVEbeesBVZQVaYoe1qBy2r4QgB5JJE+g1JhDh+GWN1KvRJFIL3ZpQ/EnLI3+Ag6ceGYPkwFJI8N5QEOHeMd4GuLJ8+57jXYaMKRaGziiGuNfdoGZH70w6CGeEtfegxfyFeznm7LFroETC8qT37evZ91I3s8YXFee+r7+89y3s6lOEMAgOQigVOt9DjMZUFytCjfF3uIu1+JF+hQ7+7S12TN2lB3M0C+IiqCpk52W2lzbtDg/4ZsZ9xSk4m5YC4KnMMAzBjWQkvc6FmuUiqyerGYGZt7Hwx2xBiHPJVrnc7itrhjR/TP96zb7pGaYdE6IB3YALzrzGEASVyL6tKfc6FcZtvaDY5xJson2WMgutmq8orPCkpzgzOvnBa/7eNp9ZzQ3BUq/+Yz2XcJYcUw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DB9PR10MB7100.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230031)(366007)(376005)(52116005)(1800799015)(38350700005); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: KSRxEJLq+2LfXX/WYOXNcD0cPsFeS7pCSyEKVLT5lHKlDzZAxU1eIeYahelCnG/wL6VFx66wQCIiqIk882bUB/WLJzg6mWBiblEp2DoUdrycnlJhcVUK3H/lF2qOxlLfS9+CiNS9+rhnorDcf3g+5ESdea5E4Q5776bxarHeWiOpqh3NYvONAWNcOrzVUNiGYhvfEyzMPTDIeBtsJoE0qwBwTwwc8PFHM/ah0B9gfeO8s4u0N3XuqvWRu1gTI+fq24jX7JZbfVNdJbsO3B0uyeBs6Uv/9Xgj1r7KMybpN2cjtWaAL48npftLGuv+mL8CJFsdchrcBkYggf0h9ykhdjvpsMgkN86B8n5WFms15E7Wa5ZWbgesng0R5XIfEiVrmLba53QmVNkbaQy3YzapRBa/k6sJ+HP/xE10Hw3mu8pyc0tbCLyAKiuRrk9GsDbA2ZxbvU2oGnbYyxN8Er/eQPLQ6QYDB4yFCSHkuzEDeo2DlYSQFNhYQDDBNotuzY5tpWPaOQtBy1OdeW6qJt04t+jg7W9ezQttnl+FhMQhlXx0O11qtyykmJ2Fb5npbZtuGwMI9YNYcRSb0J9SBwaDVMbbA2ULy6baalrn6IPU2fMb5lBZ/kHO3wi0xrWaRUAAoB4Nt9HLai+TCoDfsd/blUGPDzjKNDN+w0uT/c5O68oKf2CR9qslv8Z4AbD79eIVMdoMkWVgBWNRmJ2fTWsdLSOuLCJLggFQhuVOQ3tkbK+I1uUSK2RRpNAV4yhcj47ZXBvS1kpBiMGoIKGMkB3Fval+pmnf6Hhd5dD+PgRP8B1VkEoUzJ0d7b/hKJ2zpmd04UMU3X5qMYYm03l+z8jOw7qoHMdVkhv2Yp07R9u9JczvUddf0ildE/Ogf83V0DQ0XQvh+R5TrzSKIHmMwdZVF8lK8keSLzgmO5Nz974/ergm+3Fe17NtqT/vT1KW2a5PUpvIkNqKLQNEzfpC418E2B4v4rES3eguqiDWtR0GnzdPaLcmv/0HoI+f/Xx6fI/18j1aMJIG2iHOBH20ti1SeYvfcWlpDryWnpTAvropUjLQjHPBUskpREvK/bTr8H2TGmlALkHd4zxkHDJJUB7vEDOLtZ/qmeEOAKlWyXooJM51W4xfsDjIvKLaSzVUkx19BPCrJK7L/+QHHXyR7o6BOY2qK/vYgnahsbYiTYfXuidKOwJlIhf29F8G/6jJCkyayfsBneGVJqLSvtq6V7mRO0HpIR8fsaknUXcDB4PzKziLB4nPCps6V+q6eBBQEYyGz8OsAFkC3/b/SeiR+2UA3KMOCdLeiQsqT7sghEg4ukBK3SaM5dpdhVj8P/ILm0dIgPQkIhsrmez4KYTedsB6zG/CMBgm24vyPi7NloYcScZA240dLk8HCy7/f7oFqa0A1B/grg/98X1jjne/34gsWOZHcovjVelH9fg6Ej6DwPbPqK6nRMGA30usHtD0MiRLRsyaYuWwFblbBglwKn05ZWKZ/Q3VaWujXpLf8HXzdbwIXz5PUuo+Rpkz5jnFL7kxiiYv6Rc71xoytGnNQYfuesQ+a4laf0F/uDoGU6UV7CzQRUWiqpSQD9SLlEieJu03HpBF6CyuRmx1oJdaNSISww== X-OriginatorOrg: prevas.dk X-MS-Exchange-CrossTenant-Network-Message-Id: c7a47783-6b54-4cbd-9416-08dc6fc1979d X-MS-Exchange-CrossTenant-AuthSource: DB9PR10MB7100.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 May 2024 00:47:24.3858 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: d350cf71-778d-4780-88f5-071a4cb1ed61 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: UaqECH53I785Ie8COVnXgg1jmFOMpdOVfkTBDyRVIWK4kMl4uYen0avaWpAO3tHdKv2G3dqEfYMpQwabKaWrFF1PBTGOy5bk6eyJJe7GPE0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4PR10MB6063 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean There are of course not a whole lot of examples in-tree yet, but before they appear, let's make this API change: Instead of separately allocating a 'struct cyclic_info', make the users embed such an instance in their own structure, and make the convention that the callback simply receives the 'struct cyclic_info *', from which the clients can get their own data using the container_of() macro. This has a number of advantages. First, it means cyclic_register() simply cannot fail, simplifying the code. The necessary storage will simply be allocated automatically when the client's own structure is allocated (often via uclass_priv_auto or similar). Second, code for which CONFIG_CYCLIC is just an option can more easily be written without #ifdefs, if we just provide an empty struct cyclic_info {}. For example, the nested CONFIG_IS_ENABLED()s in https://lore.kernel.org/u-boot/20240316201416.211480-1-marek.vasut+renesas@mailbox.org/ are mostly due to the existence of the 'struct cyclic_info *' member being guarded by #ifdef CONFIG_CYCLIC. And we do probably want to avoid the extra memory overhead of that member when !CONFIG_CYCLIC. But that is automatic if, instead of a 'struct cyclic_info *', one simply embeds a 'struct cyclic_info', which will have size 0 when !CONFIG_CYCLIC. Also, the no-op cyclic_register() function can just unconditionally be called, and the compiler will see that (1) the callback is referenced, so not emit a warning for a maybe-unused function and (2) see that it can actually never be reached, so not emit any code for it. Signed-off-by: Rasmus Villemoes Reviewed-by: Stefan Roese --- board/Marvell/octeon_nic23/board.c | 9 +++++--- cmd/cyclic.c | 12 +++++------ common/cyclic.c | 22 +++++-------------- doc/develop/cyclic.rst | 26 ++++++++++++++--------- drivers/watchdog/wdt-uclass.c | 33 +++++++++++++---------------- include/cyclic.h | 34 +++++++++++++++--------------- 6 files changed, 64 insertions(+), 72 deletions(-) diff --git a/board/Marvell/octeon_nic23/board.c b/board/Marvell/octeon_nic23/board.c index bc9332cb74a..74b9c741b7b 100644 --- a/board/Marvell/octeon_nic23/board.c +++ b/board/Marvell/octeon_nic23/board.c @@ -357,10 +357,13 @@ int board_late_init(void) board_configure_qlms(); /* Register cyclic function for PCIe FLR fixup */ - cyclic = cyclic_register(octeon_board_restore_pf, 100, - "pcie_flr_fix", NULL); - if (!cyclic) + cyclic = calloc(1, sizeof(*cyclic)); + if (cyclic) { + cyclic_register(cyclic, octeon_board_restore_pf, 100, + "pcie_flr_fix"); + } else { printf("Registering of cyclic function failed\n"); + } return 0; } diff --git a/cmd/cyclic.c b/cmd/cyclic.c index ad7fc3b975e..315546515f0 100644 --- a/cmd/cyclic.c +++ b/cmd/cyclic.c @@ -14,14 +14,16 @@ #include #include #include +#include struct cyclic_demo_info { + struct cyclic_info cyclic; uint delay_us; }; -static void cyclic_demo(void *ctx) +static void cyclic_demo(struct cyclic_info *c) { - struct cyclic_demo_info *info = ctx; + struct cyclic_demo_info *info = container_of(c, struct cyclic_demo_info, cyclic); /* Just a small dummy delay here */ udelay(info->delay_us); @@ -31,7 +33,6 @@ static int do_cyclic_demo(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) { struct cyclic_demo_info *info; - struct cyclic_info *cyclic; uint time_ms; if (argc < 3) @@ -47,10 +48,7 @@ static int do_cyclic_demo(struct cmd_tbl *cmdtp, int flag, int argc, info->delay_us = simple_strtoul(argv[2], NULL, 0); /* Register demo cyclic function */ - cyclic = cyclic_register(cyclic_demo, time_ms * 1000, "cyclic_demo", - info); - if (!cyclic) - printf("Registering of cyclic_demo failed\n"); + cyclic_register(&info->cyclic, cyclic_demo, time_ms * 1000, "cyclic_demo"); printf("Registered function \"%s\" to be executed all %dms\n", "cyclic_demo", time_ms); diff --git a/common/cyclic.c b/common/cyclic.c index c62e7fa7d19..ec38fad6775 100644 --- a/common/cyclic.c +++ b/common/cyclic.c @@ -26,34 +26,22 @@ struct hlist_head *cyclic_get_list(void) return (struct hlist_head *)&gd->cyclic_list; } -struct cyclic_info *cyclic_register(cyclic_func_t func, uint64_t delay_us, - const char *name, void *ctx) +void cyclic_register(struct cyclic_info *cyclic, cyclic_func_t func, + uint64_t delay_us, const char *name) { - struct cyclic_info *cyclic; - - cyclic = calloc(1, sizeof(struct cyclic_info)); - if (!cyclic) { - pr_debug("Memory allocation error\n"); - return NULL; - } + memset(cyclic, 0, sizeof(*cyclic)); /* Store values in struct */ cyclic->func = func; - cyclic->ctx = ctx; cyclic->name = name; cyclic->delay_us = delay_us; cyclic->start_time_us = timer_get_us(); hlist_add_head(&cyclic->list, cyclic_get_list()); - - return cyclic; } -int cyclic_unregister(struct cyclic_info *cyclic) +void cyclic_unregister(struct cyclic_info *cyclic) { hlist_del(&cyclic->list); - free(cyclic); - - return 0; } void cyclic_run(void) @@ -76,7 +64,7 @@ void cyclic_run(void) if (time_after_eq64(now, cyclic->next_call)) { /* Call cyclic function and account it's cpu-time */ cyclic->next_call = now + cyclic->delay_us; - cyclic->func(cyclic->ctx); + cyclic->func(cyclic); cyclic->run_cnt++; cpu_time = timer_get_us() - now; cyclic->cpu_time_us += cpu_time; diff --git a/doc/develop/cyclic.rst b/doc/develop/cyclic.rst index 67831496a70..bcc1ca6ce6d 100644 --- a/doc/develop/cyclic.rst +++ b/doc/develop/cyclic.rst @@ -19,20 +19,26 @@ Registering a cyclic function To register a cyclic function, use something like this:: - static void cyclic_demo(void *ctx) + struct donkey { + struct cyclic_info cyclic; + void (*say)(const char *s); + }; + + static void cyclic_demo(struct cyclic_info *c) { - /* Just a small dummy delay here */ - udelay(10); + struct donkey *donkey = container_of(c, struct donkey, cyclic); + + donkey->say("Are we there yet?"); } - - int board_init(void) + + int donkey_init(void) { - struct cyclic_info *cyclic; - + struct donkey *donkey; + + /* Initialize donkey ... */ + /* Register demo cyclic function */ - cyclic = cyclic_register(cyclic_demo, 10 * 1000, "cyclic_demo", NULL); - if (!cyclic) - printf("Registering of cyclic_demo failed\n"); + cyclic_register(&donkey->cyclic, cyclic_demo, 10 * 1000, "cyclic_demo"); return 0; } diff --git a/drivers/watchdog/wdt-uclass.c b/drivers/watchdog/wdt-uclass.c index caa1567e0c3..c0332f39dfb 100644 --- a/drivers/watchdog/wdt-uclass.c +++ b/drivers/watchdog/wdt-uclass.c @@ -18,12 +18,15 @@ #include #include #include +#include DECLARE_GLOBAL_DATA_PTR; #define WATCHDOG_TIMEOUT_SECS (CONFIG_WATCHDOG_TIMEOUT_MSECS / 1000) struct wdt_priv { + /* The udevice owning this wdt_priv. */ + struct udevice *dev; /* Timeout, in seconds, to configure this device to. */ u32 timeout; /* @@ -41,18 +44,17 @@ struct wdt_priv { /* autostart */ bool autostart; - struct cyclic_info *cyclic; + struct cyclic_info cyclic; }; -static void wdt_cyclic(void *ctx) +static void wdt_cyclic(struct cyclic_info *c) { - struct udevice *dev = ctx; - struct wdt_priv *priv; + struct wdt_priv *priv = container_of(c, struct wdt_priv, cyclic); + struct udevice *dev = priv->dev; if (!device_active(dev)) return; - priv = dev_get_uclass_priv(dev); if (!priv->running) return; @@ -125,20 +127,14 @@ int wdt_start(struct udevice *dev, u64 timeout_ms, ulong flags) memset(str, 0, 16); if (IS_ENABLED(CONFIG_WATCHDOG)) { if (priv->running) - cyclic_unregister(priv->cyclic); + cyclic_unregister(&priv->cyclic); /* Register the watchdog driver as a cyclic function */ - priv->cyclic = cyclic_register(wdt_cyclic, - priv->reset_period * 1000, - dev->name, dev); - if (!priv->cyclic) { - printf("cyclic_register for %s failed\n", - dev->name); - return -ENODEV; - } else { - snprintf(str, 16, "every %ldms", - priv->reset_period); - } + cyclic_register(&priv->cyclic, wdt_cyclic, + priv->reset_period * 1000, + dev->name); + + snprintf(str, 16, "every %ldms", priv->reset_period); } priv->running = true; @@ -163,7 +159,7 @@ int wdt_stop(struct udevice *dev) struct wdt_priv *priv = dev_get_uclass_priv(dev); if (IS_ENABLED(CONFIG_WATCHDOG) && priv->running) - cyclic_unregister(priv->cyclic); + cyclic_unregister(&priv->cyclic); priv->running = false; } @@ -263,6 +259,7 @@ static int wdt_pre_probe(struct udevice *dev) autostart = true; } priv = dev_get_uclass_priv(dev); + priv->dev = dev; priv->timeout = timeout; priv->reset_period = reset_period; priv->autostart = autostart; diff --git a/include/cyclic.h b/include/cyclic.h index 38946216fb8..dc0749ba03d 100644 --- a/include/cyclic.h +++ b/include/cyclic.h @@ -18,7 +18,6 @@ * struct cyclic_info - Information about cyclic execution function * * @func: Function to call periodically - * @ctx: Context pointer to get passed to this function * @name: Name of the cyclic function, e.g. shown in the commands * @delay_ns: Delay is ns after which this function shall get executed * @start_time_us: Start time in us, when this function started its execution @@ -29,8 +28,7 @@ * @already_warned: Flag that we've warned about exceeding CPU time usage */ struct cyclic_info { - void (*func)(void *ctx); - void *ctx; + void (*func)(struct cyclic_info *c); const char *name; uint64_t delay_us; uint64_t start_time_us; @@ -42,28 +40,30 @@ struct cyclic_info { }; /** Function type for cyclic functions */ -typedef void (*cyclic_func_t)(void *ctx); +typedef void (*cyclic_func_t)(struct cyclic_info *c); #if defined(CONFIG_CYCLIC) /** * cyclic_register - Register a new cyclic function * + * @cyclic: Cyclic info structure * @func: Function to call periodically * @delay_us: Delay is us after which this function shall get executed * @name: Cyclic function name/id - * @ctx: Context to pass to the function - * @return: pointer to cyclic_struct if OK, NULL on error + * + * The function @func will be called with @cyclic as its + * argument. @cyclic will usually be embedded in some device-specific + * structure, which the callback can retrieve using container_of(). */ -struct cyclic_info *cyclic_register(cyclic_func_t func, uint64_t delay_us, - const char *name, void *ctx); +void cyclic_register(struct cyclic_info *cyclic, cyclic_func_t func, + uint64_t delay_us, const char *name); /** * cyclic_unregister - Unregister a cyclic function * * @cyclic: Pointer to cyclic_struct of the function that shall be removed - * @return: 0 if OK, -ve on error */ -int cyclic_unregister(struct cyclic_info *cyclic); +void cyclic_unregister(struct cyclic_info *cyclic); /** * cyclic_unregister_all() - Clean up cyclic functions @@ -97,17 +97,17 @@ void cyclic_run(void); */ void schedule(void); #else -static inline struct cyclic_info *cyclic_register(cyclic_func_t func, - uint64_t delay_us, - const char *name, - void *ctx) + +struct cyclic_info { +}; + +static inline void cyclic_register(struct cyclic_info *cyclic, cyclic_func_t func, + uint64_t delay_us, const char *name) { - return NULL; } -static inline int cyclic_unregister(struct cyclic_info *cyclic) +static inline void cyclic_unregister(struct cyclic_info *cyclic) { - return 0; } static inline void cyclic_run(void)