From 1c6a1e3f7ba39b7ab50e42e114f6deb2b9fbe8d7 Mon Sep 17 00:00:00 2001 From: Bhadram Varka Date: Thu, 3 Oct 2019 14:54:04 +0530 Subject: [PATCH] nvethernet: unregister HW timestamp source in close Issue: ether_get_ptptime() is registered as a callback function to read ptp time using tegra_register_hwtime_source. But it is not unregistered before interface is brought down. This causes clients to still query for timestamp even though interface is down and MAC is in reset, resulting in CBB errors. Fix: Unregister the callback function in ether_close() Bug 200556936 Change-Id: Idb5b698460f02101c931fd64fbdfc9c06949e05a Signed-off-by: Bhadram Varka Reviewed-on: https://git-master.nvidia.com/r/2210705 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/net/ethernet/nvidia/nvethernet/ether_linux.c | 3 +++ drivers/net/ethernet/nvidia/nvethernet/ether_linux.h | 1 + drivers/net/ethernet/nvidia/nvethernet/ptp.c | 1 - 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/nvidia/nvethernet/ether_linux.c b/drivers/net/ethernet/nvidia/nvethernet/ether_linux.c index 9fcd90fc..1b8906ef 100644 --- a/drivers/net/ethernet/nvidia/nvethernet/ether_linux.c +++ b/drivers/net/ethernet/nvidia/nvethernet/ether_linux.c @@ -1337,6 +1337,9 @@ static int ether_close(struct net_device *dev) struct ether_priv_data *pdata = netdev_priv(dev); int ret = 0; + /* Unregister broadcasting MAC timestamp to clients */ + tegra_unregister_hwtime_source(); + /* Stop workqueue to get further scheduled */ ether_stats_work_queue_stop(pdata); diff --git a/drivers/net/ethernet/nvidia/nvethernet/ether_linux.h b/drivers/net/ethernet/nvidia/nvethernet/ether_linux.h index f654ec62..7813780d 100644 --- a/drivers/net/ethernet/nvidia/nvethernet/ether_linux.h +++ b/drivers/net/ethernet/nvidia/nvethernet/ether_linux.h @@ -17,6 +17,7 @@ #ifndef ETHER_LINUX_H #define ETHER_LINUX_H +#include #include #include #include diff --git a/drivers/net/ethernet/nvidia/nvethernet/ptp.c b/drivers/net/ethernet/nvidia/nvethernet/ptp.c index c8324e92..4e9f1bab 100644 --- a/drivers/net/ethernet/nvidia/nvethernet/ptp.c +++ b/drivers/net/ethernet/nvidia/nvethernet/ptp.c @@ -15,7 +15,6 @@ */ #include "ether_linux.h" -#include /** * @brief DEFINE_RAW_SPINLOCK: raw spinlock to get HW PTP time and kernel time atomically