drivers/mcb/mcb-core.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
__mcb_register_driver() makes some sanity checks over mcb_driver
to check if .probe and .remove callbacks are set. However, not all
mcb device drivers implement .remove callback.
Remove .remove check to ensure all mcb device drivers can be loaded.
Signed-off-by: Jose Javier Rodriguez Barbarin <dev-josejavier.rodriguez@duagon.com>
---
drivers/mcb/mcb-core.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/mcb/mcb-core.c b/drivers/mcb/mcb-core.c
index c1367223e71a..3d487d75c483 100644
--- a/drivers/mcb/mcb-core.c
+++ b/drivers/mcb/mcb-core.c
@@ -85,7 +85,8 @@ static void mcb_remove(struct device *dev)
struct mcb_device *mdev = to_mcb_device(dev);
struct module *carrier_mod;
- mdrv->remove(mdev);
+ if (mdrv->remove)
+ mdrv->remove(mdev);
carrier_mod = mdev->dev.parent->driver->owner;
module_put(carrier_mod);
@@ -176,13 +177,13 @@ static const struct device_type mcb_carrier_device_type = {
* @owner: The @mcb_driver's module
* @mod_name: The name of the @mcb_driver's module
*
- * Register a @mcb_driver at the system. Perform some sanity checks, if
- * the .probe and .remove methods are provided by the driver.
+ * Register a @mcb_driver at the system. Perform a sanity check, if
+ * .probe method is provided by the driver.
*/
int __mcb_register_driver(struct mcb_driver *drv, struct module *owner,
const char *mod_name)
{
- if (!drv->probe || !drv->remove)
+ if (!drv->probe)
return -EINVAL;
drv->driver.owner = owner;
--
2.51.1
On 11/20/25 12:37 PM, Jose Javier Rodriguez Barbarin wrote:
> __mcb_register_driver() makes some sanity checks over mcb_driver
> to check if .probe and .remove callbacks are set. However, not all
> mcb device drivers implement .remove callback.
>
> Remove .remove check to ensure all mcb device drivers can be loaded.
The only driver I can see that doesn't implement a .remove method is
gpio-menz127.c.
Is this safe?
>
> Signed-off-by: Jose Javier Rodriguez Barbarin <dev-josejavier.rodriguez@duagon.com>
> ---
> drivers/mcb/mcb-core.c | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/mcb/mcb-core.c b/drivers/mcb/mcb-core.c
> index c1367223e71a..3d487d75c483 100644
> --- a/drivers/mcb/mcb-core.c
> +++ b/drivers/mcb/mcb-core.c
> @@ -85,7 +85,8 @@ static void mcb_remove(struct device *dev)
> struct mcb_device *mdev = to_mcb_device(dev);
> struct module *carrier_mod;
>
> - mdrv->remove(mdev);
> + if (mdrv->remove)
> + mdrv->remove(mdev);
>
> carrier_mod = mdev->dev.parent->driver->owner;
> module_put(carrier_mod);
> @@ -176,13 +177,13 @@ static const struct device_type mcb_carrier_device_type = {
> * @owner: The @mcb_driver's module
> * @mod_name: The name of the @mcb_driver's module
> *
> - * Register a @mcb_driver at the system. Perform some sanity checks, if
> - * the .probe and .remove methods are provided by the driver.
> + * Register a @mcb_driver at the system. Perform a sanity check, if
> + * .probe method is provided by the driver.
> */
> int __mcb_register_driver(struct mcb_driver *drv, struct module *owner,
> const char *mod_name)
> {
> - if (!drv->probe || !drv->remove)
> + if (!drv->probe)
> return -EINVAL;
>
> drv->driver.owner = owner;
On Thu, Nov 20, 2025 at 12:48:45PM +0100, Johannes Thumshirn wrote:
> On 11/20/25 12:37 PM, Jose Javier Rodriguez Barbarin wrote:
> > __mcb_register_driver() makes some sanity checks over mcb_driver
> > to check if .probe and .remove callbacks are set. However, not all
> > mcb device drivers implement .remove callback.
> >
> > Remove .remove check to ensure all mcb device drivers can be loaded.
>
> The only driver I can see that doesn't implement a .remove method is
> gpio-menz127.c.
Yes. In the past gpio-menz127.c also implemented .remove method, however in
3bd13ae04ccc ("gpio: menz127: simplify error path and remove remove()")
The driver changed, using now devm_* functions so .remove was no longer necessary.
>
> Is this safe?
>
From the point of view of mcb bus it should be safe becase I protected the call
of .remove on mcb_remove(), preventing possible crashes when the driver is removed
from the bus.
I'm afraid I'm lossing something because I cannot understand why these changes are or
not safe. Could you explain me why you understand that these changes are unsafe?
The other possible approach is to adding an empty .remove method on gpio-menz127 but
I guess this is not the best way of fixing this.
Regards,
Javier R.
>
> >
> > Signed-off-by: Jose Javier Rodriguez Barbarin <dev-josejavier.rodriguez@duagon.com>
> > ---
> > drivers/mcb/mcb-core.c | 9 +++++----
> > 1 file changed, 5 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/mcb/mcb-core.c b/drivers/mcb/mcb-core.c
> > index c1367223e71a..3d487d75c483 100644
> > --- a/drivers/mcb/mcb-core.c
> > +++ b/drivers/mcb/mcb-core.c
> > @@ -85,7 +85,8 @@ static void mcb_remove(struct device *dev)
> > struct mcb_device *mdev = to_mcb_device(dev);
> > struct module *carrier_mod;
> > - mdrv->remove(mdev);
> > + if (mdrv->remove)
> > + mdrv->remove(mdev);
> > carrier_mod = mdev->dev.parent->driver->owner;
> > module_put(carrier_mod);
> > @@ -176,13 +177,13 @@ static const struct device_type mcb_carrier_device_type = {
> > * @owner: The @mcb_driver's module
> > * @mod_name: The name of the @mcb_driver's module
> > *
> > - * Register a @mcb_driver at the system. Perform some sanity checks, if
> > - * the .probe and .remove methods are provided by the driver.
> > + * Register a @mcb_driver at the system. Perform a sanity check, if
> > + * .probe method is provided by the driver.
> > */
> > int __mcb_register_driver(struct mcb_driver *drv, struct module *owner,
> > const char *mod_name)
> > {
> > - if (!drv->probe || !drv->remove)
> > + if (!drv->probe)
> > return -EINVAL;
> > drv->driver.owner = owner;
>
>
On 11/21/25 11:33 AM, Jose Javier Rodriguez Barbarin wrote:
> On Thu, Nov 20, 2025 at 12:48:45PM +0100, Johannes Thumshirn wrote:
>> On 11/20/25 12:37 PM, Jose Javier Rodriguez Barbarin wrote:
>>> __mcb_register_driver() makes some sanity checks over mcb_driver
>>> to check if .probe and .remove callbacks are set. However, not all
>>> mcb device drivers implement .remove callback.
>>>
>>> Remove .remove check to ensure all mcb device drivers can be loaded.
>> The only driver I can see that doesn't implement a .remove method is
>> gpio-menz127.c.
> Yes. In the past gpio-menz127.c also implemented .remove method, however in
>
> 3bd13ae04ccc ("gpio: menz127: simplify error path and remove remove()")
>
> The driver changed, using now devm_* functions so .remove was no longer necessary.
>
>> Is this safe?
>>
> From the point of view of mcb bus it should be safe becase I protected the call
> of .remove on mcb_remove(), preventing possible crashes when the driver is removed
> from the bus.
>
> I'm afraid I'm lossing something because I cannot understand why these changes are or
> not safe. Could you explain me why you understand that these changes are unsafe?
Thanks this is the information I was missing from the changelog. I'll
change the commit message to:
__mcb_register_driver() makes some sanity checks over mcb_driver
to check if .probe and .remove callbacks are set. However, since commit
3bd13ae04ccc ("gpio: menz127: simplify error path and remove remove()")
removed the .remove callback from menz127-gpio.c, not all mcb device
drivers implement .remove callback.
Remove .remove check to ensure all mcb device drivers can be loaded.
I'll also add
Fixes: 3bd13ae04ccc ("gpio: menz127: simplify error path and remove remove()")
Thanks,
Johannes
On Fri, Nov 21, 2025 at 11:54:08AM +0100, Johannes Thumshirn wrote:
> On 11/21/25 11:33 AM, Jose Javier Rodriguez Barbarin wrote:
> > On Thu, Nov 20, 2025 at 12:48:45PM +0100, Johannes Thumshirn wrote:
> > > On 11/20/25 12:37 PM, Jose Javier Rodriguez Barbarin wrote:
> > > > __mcb_register_driver() makes some sanity checks over mcb_driver
> > > > to check if .probe and .remove callbacks are set. However, not all
> > > > mcb device drivers implement .remove callback.
> > > >
> > > > Remove .remove check to ensure all mcb device drivers can be loaded.
> > > The only driver I can see that doesn't implement a .remove method is
> > > gpio-menz127.c.
> > Yes. In the past gpio-menz127.c also implemented .remove method, however in
> >
> > 3bd13ae04ccc ("gpio: menz127: simplify error path and remove remove()")
> >
> > The driver changed, using now devm_* functions so .remove was no longer necessary.
> >
> > > Is this safe?
> > >
> > From the point of view of mcb bus it should be safe becase I protected the call
> > of .remove on mcb_remove(), preventing possible crashes when the driver is removed
> > from the bus.
> >
> > I'm afraid I'm lossing something because I cannot understand why these changes are or
> > not safe. Could you explain me why you understand that these changes are unsafe?
>
>
> Thanks this is the information I was missing from the changelog. I'll change
> the commit message to:
>
> __mcb_register_driver() makes some sanity checks over mcb_driver
> to check if .probe and .remove callbacks are set. However, since commit
> 3bd13ae04ccc ("gpio: menz127: simplify error path and remove remove()")
> removed the .remove callback from menz127-gpio.c, not all mcb device
> drivers implement .remove callback.
>
> Remove .remove check to ensure all mcb device drivers can be loaded.
>
> I'll also add
>
> Fixes: 3bd13ae04ccc ("gpio: menz127: simplify error path and remove remove()")
>
>
> Thanks,
>
> Johannes
>
Hi Johannes,
It is OK to me.
Thank you so much.
Javier R.
© 2016 - 2025 Red Hat, Inc.