| From 0c0c69fb3475f86c069afdd89c1f58637e75cf24 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 22 May 2021 17:16:11 +0800 |
| Subject: net: macb: ensure the device is available before accessing GEMGXL |
| control registers |
| |
| From: Zong Li <zong.li@sifive.com> |
| |
| [ Upstream commit 5eff1461a6dec84f04fafa9128548bad51d96147 ] |
| |
| If runtime power menagement is enabled, the gigabit ethernet PLL would |
| be disabled after macb_probe(). During this period of time, the system |
| would hang up if we try to access GEMGXL control registers. |
| |
| We can't put runtime_pm_get/runtime_pm_put/ there due to the issue of |
| sleep inside atomic section (7fa2955ff70ce453 ("sh_eth: Fix sleeping |
| function called from invalid context"). Add netif_running checking to |
| ensure the device is available before accessing GEMGXL device. |
| |
| Changed in v2: |
| - Use netif_running instead of its own flag |
| |
| Signed-off-by: Zong Li <zong.li@sifive.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/cadence/macb_main.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c |
| index 0f6a6cb7e98d..51b19172d63b 100644 |
| --- a/drivers/net/ethernet/cadence/macb_main.c |
| +++ b/drivers/net/ethernet/cadence/macb_main.c |
| @@ -2837,6 +2837,9 @@ static struct net_device_stats *gem_get_stats(struct macb *bp) |
| struct gem_stats *hwstat = &bp->hw_stats.gem; |
| struct net_device_stats *nstat = &bp->dev->stats; |
| |
| + if (!netif_running(bp->dev)) |
| + return nstat; |
| + |
| gem_update_stats(bp); |
| |
| nstat->rx_errors = (hwstat->rx_frame_check_sequence_errors + |
| -- |
| 2.30.2 |
| |