Commit 481a7d15 authored by Jiping Ma's avatar Jiping Ma Committed by David S. Miller
Browse files

stmmac: debugfs entry name is not be changed when udev rename device name.



Add one notifier for udev changes net device name.
Fixes: b6601323ef9e ("net: stmmac: debugfs entry name is not be changed when udev rename")

Signed-off-by: default avatarJiping Ma <jiping.ma2@windriver.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c101fffc
Loading
Loading
Loading
Loading
+32 −0
Original line number Original line Diff line number Diff line
@@ -106,6 +106,7 @@ MODULE_PARM_DESC(chain_mode, "To use chain instead of ring mode");
static irqreturn_t stmmac_interrupt(int irq, void *dev_id);
static irqreturn_t stmmac_interrupt(int irq, void *dev_id);


#ifdef CONFIG_DEBUG_FS
#ifdef CONFIG_DEBUG_FS
static const struct net_device_ops stmmac_netdev_ops;
static void stmmac_init_fs(struct net_device *dev);
static void stmmac_init_fs(struct net_device *dev);
static void stmmac_exit_fs(struct net_device *dev);
static void stmmac_exit_fs(struct net_device *dev);
#endif
#endif
@@ -4256,6 +4257,34 @@ static int stmmac_dma_cap_show(struct seq_file *seq, void *v)
}
}
DEFINE_SHOW_ATTRIBUTE(stmmac_dma_cap);
DEFINE_SHOW_ATTRIBUTE(stmmac_dma_cap);


/* Use network device events to rename debugfs file entries.
 */
static int stmmac_device_event(struct notifier_block *unused,
			       unsigned long event, void *ptr)
{
	struct net_device *dev = netdev_notifier_info_to_dev(ptr);
	struct stmmac_priv *priv = netdev_priv(dev);

	if (dev->netdev_ops != &stmmac_netdev_ops)
		goto done;

	switch (event) {
	case NETDEV_CHANGENAME:
		if (priv->dbgfs_dir)
			priv->dbgfs_dir = debugfs_rename(stmmac_fs_dir,
							 priv->dbgfs_dir,
							 stmmac_fs_dir,
							 dev->name);
		break;
	}
done:
	return NOTIFY_DONE;
}

static struct notifier_block stmmac_notifier = {
	.notifier_call = stmmac_device_event,
};

static void stmmac_init_fs(struct net_device *dev)
static void stmmac_init_fs(struct net_device *dev)
{
{
	struct stmmac_priv *priv = netdev_priv(dev);
	struct stmmac_priv *priv = netdev_priv(dev);
@@ -4270,12 +4299,15 @@ static void stmmac_init_fs(struct net_device *dev)
	/* Entry to report the DMA HW features */
	/* Entry to report the DMA HW features */
	debugfs_create_file("dma_cap", 0444, priv->dbgfs_dir, dev,
	debugfs_create_file("dma_cap", 0444, priv->dbgfs_dir, dev,
			    &stmmac_dma_cap_fops);
			    &stmmac_dma_cap_fops);

	register_netdevice_notifier(&stmmac_notifier);
}
}


static void stmmac_exit_fs(struct net_device *dev)
static void stmmac_exit_fs(struct net_device *dev)
{
{
	struct stmmac_priv *priv = netdev_priv(dev);
	struct stmmac_priv *priv = netdev_priv(dev);


	unregister_netdevice_notifier(&stmmac_notifier);
	debugfs_remove_recursive(priv->dbgfs_dir);
	debugfs_remove_recursive(priv->dbgfs_dir);
}
}
#endif /* CONFIG_DEBUG_FS */
#endif /* CONFIG_DEBUG_FS */