[PATCH v3] cache: sifive_ccache: remove debugfs on driver register failure

Pengpeng Hou posted 1 patch 1 month, 2 weeks ago
drivers/cache/sifive_ccache.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
[PATCH v3] cache: sifive_ccache: remove debugfs on driver register failure
Posted by Pengpeng Hou 1 month, 2 weeks ago
sifive_ccache_init() creates its debugfs entries before registering the
platform driver. If platform_driver_register() fails, the current error
path unmaps ccache_base but leaves the debugfs file and its write
callback reachable.

Remove the debugfs directory on that failure path before unmapping the
controller registers.

Fixes: c90847bcbfb6 ("cache: sifive_ccache: Partially convert to a platform driver")

Assisted-by: Codex:gpt-5
Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>
---
Changes since v2: https://lore.kernel.org/all/20260623015527.32846-1-pengpeng@iscas.ac.cn/
- no source-code changes
- rebase on current RISC-V sources
- add the coding-assistant disclosure

The error path was reviewed statically. It was not exercised on SiFive
hardware.

 drivers/cache/sifive_ccache.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/cache/sifive_ccache.c b/drivers/cache/sifive_ccache.c
index 2acb8bdf06d5..3b7a78fc7feb 100644
--- a/drivers/cache/sifive_ccache.c
+++ b/drivers/cache/sifive_ccache.c
@@ -338,12 +338,16 @@ static int __init sifive_ccache_init(void)
 
 	rc = platform_driver_register(&sifive_ccache_driver);
 	if (rc)
-		goto err_unmap;
+		goto err_remove_debugfs;
 
 	of_node_put(np);
 
 	return 0;
 
+err_remove_debugfs:
+#ifdef CONFIG_DEBUG_FS
+	debugfs_remove_recursive(sifive_test);
+#endif
 err_unmap:
 	iounmap(ccache_base);
 err_node_put:
-- 
2.50.1 (Apple Git-155)
Re: [PATCH v3] cache: sifive_ccache: remove debugfs on driver register failure
Posted by Jonathan Cameron 1 month, 2 weeks ago
On Fri, 14 Aug 2026 16:13:34 +0800
Pengpeng Hou <pengpeng@iscas.ac.cn> wrote:

> sifive_ccache_init() creates its debugfs entries before registering the
> platform driver. If platform_driver_register() fails, the current error
> path unmaps ccache_base but leaves the debugfs file and its write
> callback reachable.
> 
> Remove the debugfs directory on that failure path before unmapping the
> controller registers.
> 
> Fixes: c90847bcbfb6 ("cache: sifive_ccache: Partially convert to a platform driver")
> 

No blank lines in tag blocks.  That breaks a bunch of tooling that 
runs on the kernel + tends to get you a message from one 
of the bots that is there to prevent this getting merged.

> Assisted-by: Codex:gpt-5
> Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>
> ---
> Changes since v2: https://lore.kernel.org/all/20260623015527.32846-1-pengpeng@iscas.ac.cn/
> - no source-code changes
> - rebase on current RISC-V sources
> - add the coding-assistant disclosure
> 
> The error path was reviewed statically. It was not exercised on SiFive
> hardware.
> 
>  drivers/cache/sifive_ccache.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/cache/sifive_ccache.c b/drivers/cache/sifive_ccache.c
> index 2acb8bdf06d5..3b7a78fc7feb 100644
> --- a/drivers/cache/sifive_ccache.c
> +++ b/drivers/cache/sifive_ccache.c
> @@ -338,12 +338,16 @@ static int __init sifive_ccache_init(void)
>  
>  	rc = platform_driver_register(&sifive_ccache_driver);
>  	if (rc)
> -		goto err_unmap;
> +		goto err_remove_debugfs;
>  
>  	of_node_put(np);
>  
>  	return 0;
>  
> +err_remove_debugfs:
> +#ifdef CONFIG_DEBUG_FS

It is stubbed out in debugfs.h so no need for guards here.

So for that matter are the creation functions used in here.
Ideally follow this patch with one removing ifdef CONFIG_DEBUG_FS
from the driver.  Both calls will return errors but that is
fine as they aren't checked anyway (common for debugfs
as a driver is almost never expected to fail probe just because
debugfs isn't there).  Note removing those guards should (feel
free to check) result in no overhead as they dead code should get
removed.

Jonathan



> +	debugfs_remove_recursive(sifive_test);
> +#endif
>  err_unmap:
>  	iounmap(ccache_base);
>  err_node_put: