Re: [PATCH v5 08/11] devm-helpers: Add resource managed version of debugfs directory create function

2024-03-25 Thread Dan Carpenter
On Sat, Mar 23, 2024 at 10:10:40PM +0100, Christophe JAILLET wrote:
> >   static int pvt_ts_dbgfs_create(struct pvt_device *pvt, struct device *dev)
> >   {
> > -   pvt->dbgfs_dir = debugfs_create_dir(dev_name(dev), NULL);
> > +   pvt->dbgfs_dir = devm_debugfs_create_dir(dev, dev_name(dev), NULL);
> > +   if (IS_ERR(pvt->dbgfs_dir))
> > +   return PTR_ERR(pvt->dbgfs_dir);
> 
> Not sure if the test and error handling should be added here.

Yep.  debugfs_create_dir() is not supposed to be checked here.  It
breaks the driver if CONFIG_DEBUGFS is disabled.  I have written a blog
about this:

https://staticthinking.wordpress.com/2023/07/24/debugfs-functions-are-not-supposed-to-be-checked/

regards,
dan carpenter



Re: [PATCH v5 08/11] devm-helpers: Add resource managed version of debugfs directory create function

2024-03-24 Thread Marek Behún
On Sun, 24 Mar 2024 10:21:28 +0100
Christophe JAILLET  wrote:

> Le 23/03/2024 à 22:25, Marek Behún a écrit :
> > On Sat, 23 Mar 2024 22:10:40 +0100
> > Christophe JAILLET  wrote:
> >   
> 
> ...
> 
> >>>static int pvt_ts_dbgfs_create(struct pvt_device *pvt, struct device 
> >>> *dev)
> >>>{
> >>> - pvt->dbgfs_dir = debugfs_create_dir(dev_name(dev), NULL);
> >>> + pvt->dbgfs_dir = devm_debugfs_create_dir(dev, dev_name(dev), NULL);
> >>> + if (IS_ERR(pvt->dbgfs_dir))
> >>> + return PTR_ERR(pvt->dbgfs_dir);  
> >>
> >> Not sure if the test and error handling should be added here.
> >> *If I'm correct*, functions related to debugfs already handle this case
> >> and just do nothing. And failure in debugfs related code is not
> >> considered as something that need to be reported and abort a probe 
> >> function.
> >>
> >> Maybe the same other (already existing) tests in this patch should be
> >> removed as well, in a separated patch.  
> > 
> > Functions related to debugfs maybe do, but devm_ resource management
> > functions may fail to allocate release structure, and those errors need
> > to be handled, AFAIK.  
> 
> I would say no.
> If this memory allocation fails, then debugfs_create_dir() will not be 
> called, but that's not a really big deal if the driver itself can still 
> run normally without it.

debugfs_create_dir() will always be called. Resource allocation is done
afterwards, and if it fails, then the created dir will be removed.

But now I don't know what to do, because yes, it seems that the debugfs
errors are being ignored at many places...

> 
> Up to you to leave it as-is or remove what I think is a useless error 
> handling.
> At least, maybe it could be said in the commit log, so that maintainers 
> can comment on it, if they don't spot the error handling you introduce.
> 
> CJ
> 
> > 
> > Marek
> >   
> 



Re: [PATCH v5 08/11] devm-helpers: Add resource managed version of debugfs directory create function

2024-03-24 Thread Christophe JAILLET

Le 23/03/2024 à 22:25, Marek Behún a écrit :

On Sat, 23 Mar 2024 22:10:40 +0100
Christophe JAILLET  wrote:



...


   static int pvt_ts_dbgfs_create(struct pvt_device *pvt, struct device *dev)
   {
-   pvt->dbgfs_dir = debugfs_create_dir(dev_name(dev), NULL);
+   pvt->dbgfs_dir = devm_debugfs_create_dir(dev, dev_name(dev), NULL);
+   if (IS_ERR(pvt->dbgfs_dir))
+   return PTR_ERR(pvt->dbgfs_dir);


Not sure if the test and error handling should be added here.
*If I'm correct*, functions related to debugfs already handle this case
and just do nothing. And failure in debugfs related code is not
considered as something that need to be reported and abort a probe function.

Maybe the same other (already existing) tests in this patch should be
removed as well, in a separated patch.


Functions related to debugfs maybe do, but devm_ resource management
functions may fail to allocate release structure, and those errors need
to be handled, AFAIK.


I would say no.
If this memory allocation fails, then debugfs_create_dir() will not be 
called, but that's not a really big deal if the driver itself can still 
run normally without it.


Up to you to leave it as-is or remove what I think is a useless error 
handling.
At least, maybe it could be said in the commit log, so that maintainers 
can comment on it, if they don't spot the error handling you introduce.


CJ



Marek





Re: [PATCH v5 08/11] devm-helpers: Add resource managed version of debugfs directory create function

2024-03-23 Thread Marek Behún
On Sat, 23 Mar 2024 22:10:40 +0100
Christophe JAILLET  wrote:

> > -   return devm_add_action_or_reset(dev, gpio_mockup_debugfs_cleanup, chip);
> > +   return devm_add_action_or_reset(dev, devm_debugfs_dir_recursive_drop,
> > +   chip->dbg_dir);  
> 
> This look strange. Shouldn't the debugfs_create_dir() call in 
> gpio_mockup_debugfs_setup() be changed, instead?
> 
> (I've not look in the previous version if something was said about it, 
> so apologies if already discussed)

Yeah, this specific user needs a more complicated refactoring.

I was reluctant to do more complicated refactors in the patch that also
introduces these helpers.

But Guenter asked me to split the patch anyway...

> >   static int pvt_ts_dbgfs_create(struct pvt_device *pvt, struct device *dev)
> >   {
> > -   pvt->dbgfs_dir = debugfs_create_dir(dev_name(dev), NULL);
> > +   pvt->dbgfs_dir = devm_debugfs_create_dir(dev, dev_name(dev), NULL);
> > +   if (IS_ERR(pvt->dbgfs_dir))
> > +   return PTR_ERR(pvt->dbgfs_dir);  
> 
> Not sure if the test and error handling should be added here.
> *If I'm correct*, functions related to debugfs already handle this case 
> and just do nothing. And failure in debugfs related code is not 
> considered as something that need to be reported and abort a probe function.
> 
> Maybe the same other (already existing) tests in this patch should be 
> removed as well, in a separated patch.

Functions related to debugfs maybe do, but devm_ resource management
functions may fail to allocate release structure, and those errors need
to be handled, AFAIK.

Marek


Re: [PATCH v5 08/11] devm-helpers: Add resource managed version of debugfs directory create function

2024-03-23 Thread Christophe JAILLET

Le 23/03/2024 à 17:43, Marek Behún a écrit :

A few drivers register a devm action to remove a debugfs directory,
implementing a one-liner function that calls debufs_remove_recursive().
Help drivers avoid this repeated implementations by adding managed
version of debugfs directory create function.

Use the new function devm_debugfs_create_dir() in the following
drivers:
   drivers/crypto/caam/ctrl.c
   drivers/gpu/drm/bridge/ti-sn65dsi86.c
   drivers/hwmon/hp-wmi-sensors.c
   drivers/hwmon/mr75203.c
   drivers/hwmon/pmbus/pmbus_core.c

Also use the action function devm_debugfs_dir_recursive_drop() in
driver
   drivers/gpio/gpio-mockup.c

As per Dan Williams' request [1], do not touch the driver
   drivers/cxl/mem.c

[1] 
https://lore.kernel.org/linux-gpio/65d7918b358a5_1ee3129...@dwillia2-mobl3.amr.corp.intel.com.notmuch/

Signed-off-by: Marek Behún 
---
  drivers/crypto/caam/ctrl.c| 16 +++
  drivers/gpio/gpio-mockup.c| 11 ++--
  drivers/gpu/drm/bridge/ti-sn65dsi86.c | 13 ++---
  drivers/hwmon/hp-wmi-sensors.c| 15 ++
  drivers/hwmon/mr75203.c   | 15 --
  drivers/hwmon/pmbus/pmbus_core.c  | 16 ---
  include/linux/devm-helpers.h  | 40 +++
  7 files changed, 61 insertions(+), 65 deletions(-)


...


diff --git a/drivers/gpio/gpio-mockup.c b/drivers/gpio/gpio-mockup.c
index 455eecf6380e..adbe0fe09490 100644
--- a/drivers/gpio/gpio-mockup.c
+++ b/drivers/gpio/gpio-mockup.c
@@ -12,6 +12,7 @@
  #include 
  #include 
  #include 
+#include 
  #include 
  #include 
  #include 
@@ -390,13 +391,6 @@ static void gpio_mockup_debugfs_setup(struct device *dev,
}
  }
  
-static void gpio_mockup_debugfs_cleanup(void *data)

-{
-   struct gpio_mockup_chip *chip = data;
-
-   debugfs_remove_recursive(chip->dbg_dir);
-}
-
  static void gpio_mockup_dispose_mappings(void *data)
  {
struct gpio_mockup_chip *chip = data;
@@ -480,7 +474,8 @@ static int gpio_mockup_probe(struct platform_device *pdev)
  
  	gpio_mockup_debugfs_setup(dev, chip);
  
-	return devm_add_action_or_reset(dev, gpio_mockup_debugfs_cleanup, chip);

+   return devm_add_action_or_reset(dev, devm_debugfs_dir_recursive_drop,
+   chip->dbg_dir);


This look strange. Shouldn't the debugfs_create_dir() call in 
gpio_mockup_debugfs_setup() be changed, instead?


(I've not look in the previous version if something was said about it, 
so apologies if already discussed)



  }
  
  static const struct of_device_id gpio_mockup_of_match[] = {


...



diff --git a/drivers/hwmon/mr75203.c b/drivers/hwmon/mr75203.c
index 50a8b9c3f94d..50f348fca108 100644
--- a/drivers/hwmon/mr75203.c
+++ b/drivers/hwmon/mr75203.c
@@ -10,6 +10,7 @@
  #include 
  #include 
  #include 
+#include 
  #include 
  #include 
  #include 
@@ -216,17 +217,11 @@ static const struct file_operations pvt_ts_coeff_j_fops = 
{
.llseek = default_llseek,
  };
  
-static void devm_pvt_ts_dbgfs_remove(void *data)

-{
-   struct pvt_device *pvt = (struct pvt_device *)data;
-
-   debugfs_remove_recursive(pvt->dbgfs_dir);
-   pvt->dbgfs_dir = NULL;
-}
-
  static int pvt_ts_dbgfs_create(struct pvt_device *pvt, struct device *dev)
  {
-   pvt->dbgfs_dir = debugfs_create_dir(dev_name(dev), NULL);
+   pvt->dbgfs_dir = devm_debugfs_create_dir(dev, dev_name(dev), NULL);
+   if (IS_ERR(pvt->dbgfs_dir))
+   return PTR_ERR(pvt->dbgfs_dir);


Not sure if the test and error handling should be added here.
*If I'm correct*, functions related to debugfs already handle this case 
and just do nothing. And failure in debugfs related code is not 
considered as something that need to be reported and abort a probe function.


Maybe the same other (already existing) tests in this patch should be 
removed as well, in a separated patch.


just my 2c

CJ

  
  	debugfs_create_u32("ts_coeff_h", 0644, pvt->dbgfs_dir,

   >ts_coeff.h);
@@ -237,7 +232,7 @@ static int pvt_ts_dbgfs_create(struct pvt_device *pvt, 
struct device *dev)
debugfs_create_file("ts_coeff_j", 0644, pvt->dbgfs_dir, pvt,
_ts_coeff_j_fops);
  
-	return devm_add_action_or_reset(dev, devm_pvt_ts_dbgfs_remove, pvt);

+   return 0;
  }


...



Re: [PATCH v5 08/11] devm-helpers: Add resource managed version of debugfs directory create function

2024-03-23 Thread Guenter Roeck

On 3/23/24 09:43, Marek Behún wrote:

A few drivers register a devm action to remove a debugfs directory,
implementing a one-liner function that calls debufs_remove_recursive().
Help drivers avoid this repeated implementations by adding managed
version of debugfs directory create function.

Use the new function devm_debugfs_create_dir() in the following
drivers:
   drivers/crypto/caam/ctrl.c
   drivers/gpu/drm/bridge/ti-sn65dsi86.c
   drivers/hwmon/hp-wmi-sensors.c
   drivers/hwmon/mr75203.c
   drivers/hwmon/pmbus/pmbus_core.c



Please split this up into multiple patches, at least separating out
the hwmon patches.

Guenter



[PATCH v5 08/11] devm-helpers: Add resource managed version of debugfs directory create function

2024-03-23 Thread Marek Behún
A few drivers register a devm action to remove a debugfs directory,
implementing a one-liner function that calls debufs_remove_recursive().
Help drivers avoid this repeated implementations by adding managed
version of debugfs directory create function.

Use the new function devm_debugfs_create_dir() in the following
drivers:
  drivers/crypto/caam/ctrl.c
  drivers/gpu/drm/bridge/ti-sn65dsi86.c
  drivers/hwmon/hp-wmi-sensors.c
  drivers/hwmon/mr75203.c
  drivers/hwmon/pmbus/pmbus_core.c

Also use the action function devm_debugfs_dir_recursive_drop() in
driver
  drivers/gpio/gpio-mockup.c

As per Dan Williams' request [1], do not touch the driver
  drivers/cxl/mem.c

[1] 
https://lore.kernel.org/linux-gpio/65d7918b358a5_1ee3129...@dwillia2-mobl3.amr.corp.intel.com.notmuch/

Signed-off-by: Marek Behún 
---
 drivers/crypto/caam/ctrl.c| 16 +++
 drivers/gpio/gpio-mockup.c| 11 ++--
 drivers/gpu/drm/bridge/ti-sn65dsi86.c | 13 ++---
 drivers/hwmon/hp-wmi-sensors.c| 15 ++
 drivers/hwmon/mr75203.c   | 15 --
 drivers/hwmon/pmbus/pmbus_core.c  | 16 ---
 include/linux/devm-helpers.h  | 40 +++
 7 files changed, 61 insertions(+), 65 deletions(-)

diff --git a/drivers/crypto/caam/ctrl.c b/drivers/crypto/caam/ctrl.c
index bdf367f3f679..ea3ed9a17f1a 100644
--- a/drivers/crypto/caam/ctrl.c
+++ b/drivers/crypto/caam/ctrl.c
@@ -7,6 +7,7 @@
  */
 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -604,11 +605,6 @@ static int init_clocks(struct device *dev, const struct 
caam_imx_data *data)
return devm_add_action_or_reset(dev, disable_clocks, ctrlpriv);
 }
 
-static void caam_remove_debugfs(void *root)
-{
-   debugfs_remove_recursive(root);
-}
-
 #ifdef CONFIG_FSL_MC_BUS
 static bool check_version(struct fsl_mc_version *mc_version, u32 major,
  u32 minor, u32 revision)
@@ -1058,13 +1054,9 @@ static int caam_probe(struct platform_device *pdev)
ctrlpriv->era = caam_get_era(perfmon);
ctrlpriv->domain = iommu_get_domain_for_dev(dev);
 
-   dfs_root = debugfs_create_dir(dev_name(dev), NULL);
-   if (IS_ENABLED(CONFIG_DEBUG_FS)) {
-   ret = devm_add_action_or_reset(dev, caam_remove_debugfs,
-  dfs_root);
-   if (ret)
-   return ret;
-   }
+   dfs_root = devm_debugfs_create_dir(dev, dev_name(dev), NULL);
+   if (IS_ERR(dfs_root))
+   return PTR_ERR(dfs_root);
 
caam_debugfs_init(ctrlpriv, perfmon, dfs_root);
 
diff --git a/drivers/gpio/gpio-mockup.c b/drivers/gpio/gpio-mockup.c
index 455eecf6380e..adbe0fe09490 100644
--- a/drivers/gpio/gpio-mockup.c
+++ b/drivers/gpio/gpio-mockup.c
@@ -12,6 +12,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -390,13 +391,6 @@ static void gpio_mockup_debugfs_setup(struct device *dev,
}
 }
 
-static void gpio_mockup_debugfs_cleanup(void *data)
-{
-   struct gpio_mockup_chip *chip = data;
-
-   debugfs_remove_recursive(chip->dbg_dir);
-}
-
 static void gpio_mockup_dispose_mappings(void *data)
 {
struct gpio_mockup_chip *chip = data;
@@ -480,7 +474,8 @@ static int gpio_mockup_probe(struct platform_device *pdev)
 
gpio_mockup_debugfs_setup(dev, chip);
 
-   return devm_add_action_or_reset(dev, gpio_mockup_debugfs_cleanup, chip);
+   return devm_add_action_or_reset(dev, devm_debugfs_dir_recursive_drop,
+   chip->dbg_dir);
 }
 
 static const struct of_device_id gpio_mockup_of_match[] = {
diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c 
b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
index 84698a0b27a8..85987350f108 100644
--- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c
+++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
@@ -10,6 +10,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -427,18 +428,12 @@ static int status_show(struct seq_file *s, void *data)
 
 DEFINE_SHOW_ATTRIBUTE(status);
 
-static void ti_sn65dsi86_debugfs_remove(void *data)
-{
-   debugfs_remove_recursive(data);
-}
-
 static void ti_sn65dsi86_debugfs_init(struct ti_sn65dsi86 *pdata)
 {
struct device *dev = pdata->dev;
struct dentry *debugfs;
-   int ret;
 
-   debugfs = debugfs_create_dir(dev_name(dev), NULL);
+   debugfs = devm_debugfs_create_dir(dev, dev_name(dev), NULL);
 
/*
 * We might get an error back if debugfs wasn't enabled in the kernel
@@ -447,10 +442,6 @@ static void ti_sn65dsi86_debugfs_init(struct ti_sn65dsi86 
*pdata)
if (IS_ERR_OR_NULL(debugfs))
return;
 
-   ret = devm_add_action_or_reset(dev, ti_sn65dsi86_debugfs_remove, 
debugfs);
-   if (ret)
-   return;
-
debugfs_create_file("status", 0600, debugfs, pdata, _fops);
 }
 
diff --git a/drivers/hwmon/hp-wmi-sensors.c