summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>2013-12-17 15:12:50 +0000
committerjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>2013-12-17 15:12:50 +0000
commitc45fd03e7029c018ac8ab99a2826e1ca5557f235 (patch)
tree2b5ea917e70c1ba02a66f511b0fbe7ef24b81275
parent3b3759f54cbfabff6e266a98fd2d6a9fa8f0666d (diff)
ag71xx: ag71xx: use device name for debugfs entry
The ag71xx debugfs code uses the network device name for the device specific debugfs directory. Since r38689 'ar71xx: ag71xx: fix a race involving netdev registration' the debugfs initialization happens before the ethernet device gets registered and the network device name contains 'eth%d' at this point. If the board setup code registers multiple ag71xx devices, the debugfs code tries to create the device specific dir with the same name which causes an error like this: eth0: Atheros AG71xx at 0xba000000, irq 5, mode:GMII ag71xx ag71xx.0: connected to PHY at ag71xx-mdio.1:04 [uid=004dd041, driver=Generic PHY] ag71xx: probe of ag71xx.0 failed with error -12 Use the device name for the debugfs directory to avoid the collisions. Also add an error message and change the return code if the debugfs_create_dir call fails. Reported-by: Ronald Wahl <ronald.wahl@raritan.com> Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39115 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_debugfs.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_debugfs.c b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_debugfs.c
index 65f2be198f..757a572b00 100644
--- a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_debugfs.c
+++ b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_debugfs.c
@@ -244,10 +244,14 @@ void ag71xx_debugfs_exit(struct ag71xx *ag)
int ag71xx_debugfs_init(struct ag71xx *ag)
{
- ag->debug.debugfs_dir = debugfs_create_dir(ag->dev->name,
+ struct device *dev = &ag->pdev->dev;
+
+ ag->debug.debugfs_dir = debugfs_create_dir(dev_name(dev),
ag71xx_debugfs_root);
- if (!ag->debug.debugfs_dir)
- return -ENOMEM;
+ if (!ag->debug.debugfs_dir) {
+ dev_err(dev, "unable to create debugfs directory\n");
+ return -ENOENT;
+ }
debugfs_create_file("int_stats", S_IRUGO, ag->debug.debugfs_dir,
ag, &ag71xx_fops_int_stats);