aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c
diff options
context:
space:
mode:
authorLinu Cherian <lcherian@marvell.com>2018-11-22 17:18:36 +0530
committerDavid S. Miller <davem@davemloft.net>2018-11-23 17:23:25 -0800
commitc929323609aefdd6da40d02860c2d59fb4a9d421 (patch)
tree6b305f427100d9dc1870f762bb198ff9b3ef74e4 /drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c
parentocteontx2-af: Handle non-contiguous CGX LMAC interfaces (diff)
downloadlinux-dev-c929323609aefdd6da40d02860c2d59fb4a9d421.tar.xz
linux-dev-c929323609aefdd6da40d02860c2d59fb4a9d421.zip
octeontx2-af: Unregister cgx event callbacks gracefully
Added provision to unregister cgx event callbacks. This enables the exit path to ensure event callbacks are unregistered before workqueues get destroyed. Signed-off-by: Linu Cherian <lcherian@marvell.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to '')
-rw-r--r--drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c
index d5cca78d5d47..66d94df9b8a2 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c
@@ -296,6 +296,20 @@ int rvu_cgx_init(struct rvu *rvu)
int rvu_cgx_exit(struct rvu *rvu)
{
+ int cgx, lmac;
+ void *cgxd;
+
+ for (cgx = 0; cgx <= rvu->cgx_cnt_max; cgx++) {
+ cgxd = rvu_cgx_pdata(cgx, rvu);
+ if (!cgxd)
+ continue;
+ for (lmac = 0; lmac < cgx_get_lmac_cnt(cgxd); lmac++)
+ cgx_lmac_evh_unregister(cgxd, lmac);
+ }
+
+ /* Ensure event handler unregister is completed */
+ mb();
+
rvu_cgx_wq_destroy(rvu);
return 0;
}