[PATCH net-next v2 11/13] net: renesas: rswitch: add passing of rswitch_private into notifiers
From: Michael Dege
Date: Fri Mar 27 2026 - 04:32:27 EST
Provide struct rswitch_private to notifiers. This will be needed
to access the HW in the notification handlers.
Signed-off-by: Michael Dege <michael.dege@xxxxxxxxxxx>
---
drivers/net/ethernet/renesas/rswitch.h | 5 ++++
drivers/net/ethernet/renesas/rswitch_l2.c | 45 ++++++++++++-----------------
drivers/net/ethernet/renesas/rswitch_l2.h | 6 ++--
drivers/net/ethernet/renesas/rswitch_main.c | 4 +--
4 files changed, 28 insertions(+), 32 deletions(-)
diff --git a/drivers/net/ethernet/renesas/rswitch.h b/drivers/net/ethernet/renesas/rswitch.h
index 42c8bbafa27d..6dfc53c6b985 100644
--- a/drivers/net/ethernet/renesas/rswitch.h
+++ b/drivers/net/ethernet/renesas/rswitch.h
@@ -1199,6 +1199,11 @@ struct rswitch_private {
struct rswitch_etha etha[RSWITCH_NUM_PORTS];
struct rswitch_mfwd mfwd;
+ /* Notifiers */
+ struct notifier_block rswitch_netdevice_nb;
+ struct notifier_block rswitch_switchdev_nb;
+ struct notifier_block rswitch_switchdev_blocking_nb;
+
struct list_head port_list;
spinlock_t lock; /* lock interrupt registers' control */
diff --git a/drivers/net/ethernet/renesas/rswitch_l2.c b/drivers/net/ethernet/renesas/rswitch_l2.c
index ae3857ef9af6..f1c5c96027ba 100644
--- a/drivers/net/ethernet/renesas/rswitch_l2.c
+++ b/drivers/net/ethernet/renesas/rswitch_l2.c
@@ -285,48 +285,39 @@ static int rswitch_switchdev_blocking_event(struct notifier_block *nb,
return notifier_from_errno(ret);
}
-static struct notifier_block rswitch_netdevice_nb = {
- .notifier_call = rswitch_netdevice_event,
-};
-
-static struct notifier_block rswitch_switchdev_nb = {
- .notifier_call = rswitch_switchdev_event,
-};
-
-static struct notifier_block rswitch_switchdev_blocking_nb = {
- .notifier_call = rswitch_switchdev_blocking_event,
-};
-
-int rswitch_register_notifiers(void)
+int rswitch_register_notifiers(struct rswitch_private *priv)
{
- int ret;
+ int err;
- ret = register_netdevice_notifier(&rswitch_netdevice_nb);
- if (ret)
+ priv->rswitch_netdevice_nb.notifier_call = rswitch_netdevice_event;
+ err = register_netdevice_notifier(&priv->rswitch_netdevice_nb);
+ if (err)
goto register_netdevice_notifier_failed;
- ret = register_switchdev_notifier(&rswitch_switchdev_nb);
- if (ret)
+ priv->rswitch_switchdev_nb.notifier_call = rswitch_switchdev_event;
+ err = register_switchdev_notifier(&priv->rswitch_switchdev_nb);
+ if (err)
goto register_switchdev_notifier_failed;
- ret = register_switchdev_blocking_notifier(&rswitch_switchdev_blocking_nb);
- if (ret)
+ priv->rswitch_switchdev_blocking_nb.notifier_call = rswitch_switchdev_blocking_event;
+ err = register_switchdev_blocking_notifier(&priv->rswitch_switchdev_blocking_nb);
+ if (err)
goto register_switchdev_blocking_notifier_failed;
return 0;
register_switchdev_blocking_notifier_failed:
- unregister_switchdev_notifier(&rswitch_switchdev_nb);
+ unregister_switchdev_notifier(&priv->rswitch_switchdev_nb);
register_switchdev_notifier_failed:
- unregister_netdevice_notifier(&rswitch_netdevice_nb);
+ unregister_netdevice_notifier(&priv->rswitch_netdevice_nb);
register_netdevice_notifier_failed:
- return ret;
+ return err;
}
-void rswitch_unregister_notifiers(void)
+void rswitch_unregister_notifiers(struct rswitch_private *priv)
{
- unregister_switchdev_blocking_notifier(&rswitch_switchdev_blocking_nb);
- unregister_switchdev_notifier(&rswitch_switchdev_nb);
- unregister_netdevice_notifier(&rswitch_netdevice_nb);
+ unregister_switchdev_blocking_notifier(&priv->rswitch_switchdev_blocking_nb);
+ unregister_switchdev_notifier(&priv->rswitch_switchdev_nb);
+ unregister_netdevice_notifier(&priv->rswitch_netdevice_nb);
}
diff --git a/drivers/net/ethernet/renesas/rswitch_l2.h b/drivers/net/ethernet/renesas/rswitch_l2.h
index 57050ede8f31..af9780c63c9a 100644
--- a/drivers/net/ethernet/renesas/rswitch_l2.h
+++ b/drivers/net/ethernet/renesas/rswitch_l2.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: GPL-2.0 */
/* Renesas Ethernet Switch device driver
*
- * Copyright (C) 2025 Renesas Electronics Corporation
+ * Copyright (C) 2025 - 2026 Renesas Electronics Corporation
*/
#ifndef __RSWITCH_L2_H__
@@ -9,7 +9,7 @@
void rswitch_update_l2_offload(struct rswitch_private *priv);
-int rswitch_register_notifiers(void);
-void rswitch_unregister_notifiers(void);
+int rswitch_register_notifiers(struct rswitch_private *priv);
+void rswitch_unregister_notifiers(struct rswitch_private *priv);
#endif /* #ifndef __RSWITCH_L2_H__ */
diff --git a/drivers/net/ethernet/renesas/rswitch_main.c b/drivers/net/ethernet/renesas/rswitch_main.c
index da984027239c..4e0a481ef403 100644
--- a/drivers/net/ethernet/renesas/rswitch_main.c
+++ b/drivers/net/ethernet/renesas/rswitch_main.c
@@ -2272,7 +2272,7 @@ static int renesas_eth_sw_probe(struct platform_device *pdev)
if (list_empty(&priv->port_list))
dev_warn(&pdev->dev, "could not initialize any ports\n");
- ret = rswitch_register_notifiers();
+ ret = rswitch_register_notifiers(priv);
if (ret) {
dev_err(&pdev->dev, "could not register notifiers\n");
return ret;
@@ -2311,7 +2311,7 @@ static void renesas_eth_sw_remove(struct platform_device *pdev)
{
struct rswitch_private *priv = platform_get_drvdata(pdev);
- rswitch_unregister_notifiers();
+ rswitch_unregister_notifiers(priv);
rswitch_deinit(priv);
pm_runtime_put(&pdev->dev);
--
2.43.0