diff options
author | Ravi Gunasekaran <r-gunasekaran@ti.com> | 2024-03-12 15:56:58 +0530 |
---|---|---|
committer | Praneeth Bajjuri <praneeth@ti.com> | 2024-03-12 15:51:03 -0500 |
commit | 0553610ace3e1b55eda28ca15863146c90080d83 (patch) | |
tree | 00e88a1fcf054f69536767886ecac585c4853604 | |
parent | c6abd1410cce11168822ad71f9c344108aa3c6d0 (diff) |
net: ethernet: ti: icssg_prueth: Fix processing NETDEV_CHANGEUPPER event
In HSR mode, the netdev notifier does not take care of the unlinking
event of the upper net device. Fix this.
Signed-off-by: Ravi Gunasekaran <r-gunasekaran@ti.com>
-rw-r--r-- | drivers/net/ethernet/ti/icssg_prueth.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/drivers/net/ethernet/ti/icssg_prueth.c b/drivers/net/ethernet/ti/icssg_prueth.c index b6b075bf64d0..56a2f6c622b3 100644 --- a/drivers/net/ethernet/ti/icssg_prueth.c +++ b/drivers/net/ethernet/ti/icssg_prueth.c @@ -2702,16 +2702,20 @@ static int prueth_netdevice_event(struct notifier_block *unused, if ((ndev->features & NETIF_PRUETH_HSR_OFFLOAD) && is_hsr_master(info->upper_dev)) { - if (!prueth->hsr_dev) { - prueth->hsr_dev = info->upper_dev; - - icssg_class_set_host_mac_addr(prueth->miig_rt, - prueth->hsr_dev->dev_addr); - } else { - if (prueth->hsr_dev != info->upper_dev) { - dev_err(prueth->dev, "Both interfaces must be linked to same upper device\n"); - return -EOPNOTSUPP; + if (info->linking) { + if (!prueth->hsr_dev) { + prueth->hsr_dev = info->upper_dev; + + icssg_class_set_host_mac_addr(prueth->miig_rt, + prueth->hsr_dev->dev_addr); + } else { + if (prueth->hsr_dev != info->upper_dev) { + dev_err(prueth->dev, "Both interfaces must be linked to same upper device\n"); + return -EOPNOTSUPP; + } } + } else { + prueth->hsr_dev = NULL; } } |