Skip to content

Commit

Permalink
net: stmmac: Move debugfs init/exit to ->probe()/->remove()
Browse files Browse the repository at this point in the history
[ Upstream commit 5f2b8b6 ]

Setting up and tearing down debugfs is current unbalanced, as seen by
this error during resume from suspend:

    [  752.134067] dwc-eth-dwmac 2490000.ethernet eth0: ERROR failed to create debugfs directory
    [  752.134347] dwc-eth-dwmac 2490000.ethernet eth0: stmmac_hw_setup: failed debugFS registration

The imbalance happens because the driver creates the debugfs hierarchy
when the device is opened and tears it down when the device is closed.
There's little gain in that, and it could be argued that it is even
surprising because it's not usually done for other devices. Fix the
imbalance by moving the debugfs creation and teardown to the driver's
->probe() and ->remove() implementations instead.

Note that the ring descriptors cannot be read while the interface is
down, so make sure to return an empty file when the descriptors_status
debugfs file is read.

Signed-off-by: Thierry Reding <[email protected]>
Acked-by: Jose Abreu <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
  • Loading branch information
thierryreding authored and gregkh committed May 16, 2019
1 parent acbce61 commit b3ff286
Showing 1 changed file with 13 additions and 10 deletions.
23 changes: 13 additions & 10 deletions drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2530,12 +2530,6 @@ static int stmmac_hw_setup(struct net_device *dev, bool init_ptp)
netdev_warn(priv->dev, "PTP init failed\n");
}

#ifdef CONFIG_DEBUG_FS
ret = stmmac_init_fs(dev);
if (ret < 0)
netdev_warn(priv->dev, "%s: failed debugFS registration\n",
__func__);
#endif
priv->tx_lpi_timer = STMMAC_DEFAULT_TWT_LS;

if ((priv->use_riwt) && (priv->hw->dma->rx_watchdog)) {
Expand Down Expand Up @@ -2729,10 +2723,6 @@ static int stmmac_release(struct net_device *dev)

netif_carrier_off(dev);

#ifdef CONFIG_DEBUG_FS
stmmac_exit_fs(dev);
#endif

stmmac_release_ptp(priv);

return 0;
Expand Down Expand Up @@ -3839,6 +3829,9 @@ static int stmmac_sysfs_ring_read(struct seq_file *seq, void *v)
u32 tx_count = priv->plat->tx_queues_to_use;
u32 queue;

if ((dev->flags & IFF_UP) == 0)
return 0;

for (queue = 0; queue < rx_count; queue++) {
struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];

Expand Down Expand Up @@ -4310,6 +4303,13 @@ int stmmac_dvr_probe(struct device *device,
goto error_netdev_register;
}

#ifdef CONFIG_DEBUG_FS
ret = stmmac_init_fs(ndev);
if (ret < 0)
netdev_warn(priv->dev, "%s: failed debugFS registration\n",
__func__);
#endif

return ret;

error_netdev_register:
Expand Down Expand Up @@ -4343,6 +4343,9 @@ int stmmac_dvr_remove(struct device *dev)

netdev_info(priv->dev, "%s: removing driver", __func__);

#ifdef CONFIG_DEBUG_FS
stmmac_exit_fs(ndev);
#endif
stmmac_stop_all_dma(priv);

priv->hw->mac->set_mac(priv->ioaddr, false);
Expand Down

0 comments on commit b3ff286

Please sign in to comment.