ag71xx: ag71xx: use device name for debugfs entry
authorGabor Juhos <juhosg@openwrt.org>
Tue, 17 Dec 2013 15:12:50 +0000 (15:12 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Tue, 17 Dec 2013 15:12:50 +0000 (15:12 +0000)
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>
SVN-Revision: 39115

target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_debugfs.c

index 65f2be198fe16b7beb602230f921675464b92687..757a572b0096ac8342e0b7c30925c3ca29c0eea1 100644 (file)
@@ -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);