switch: fix switch-robo device reference counting
Fix incorrect device reference counting by switch-robo. Signed-off-by: George Kashperko <george@znau.edu.ua> SVN-Revision: 25619
This commit is contained in:
parent
650566c980
commit
640927dde3
2 changed files with 16 additions and 7 deletions
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (C) 2006 OpenWrt.org
|
||||
# Copyright (C) 2006-2011 OpenWrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
|
@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
|||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=kmod-switch
|
||||
PKG_RELEASE:=3
|
||||
PKG_RELEASE:=4
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
|
|
|
@ -301,7 +301,7 @@ static int robo_probe(char *devname)
|
|||
{
|
||||
__u32 phyid;
|
||||
unsigned int i;
|
||||
int err;
|
||||
int err = 1;
|
||||
|
||||
printk(KERN_INFO PFX "Probing device %s: ", devname);
|
||||
strcpy(robo.ifr.ifr_name, devname);
|
||||
|
@ -331,7 +331,7 @@ static int robo_probe(char *devname)
|
|||
(mii->phy_id != ROBO_PHY_ADDR_BCM63XX) &&
|
||||
(mii->phy_id != ROBO_PHY_ADDR_TG3)) {
|
||||
printk("Invalid phy address (%d)\n", mii->phy_id);
|
||||
return 1;
|
||||
goto done;
|
||||
}
|
||||
robo.use_et = 0;
|
||||
/* The robo has a fixed PHY address that is different from the
|
||||
|
@ -344,7 +344,7 @@ static int robo_probe(char *devname)
|
|||
|
||||
if (phyid == 0xffffffff || phyid == 0x55210022) {
|
||||
printk("No Robo switch in managed mode found, phy_id = 0x%08x\n", phyid);
|
||||
return 1;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Get the device ID */
|
||||
|
@ -361,11 +361,18 @@ static int robo_probe(char *devname)
|
|||
robo_switch_reset();
|
||||
err = robo_switch_enable();
|
||||
if (err)
|
||||
return err;
|
||||
goto done;
|
||||
err = 0;
|
||||
|
||||
printk("found a 5%s%x!%s\n", robo.devid & 0xff00 ? "" : "3", robo.devid,
|
||||
robo.is_5350 ? " It's a 5350." : "");
|
||||
return 0;
|
||||
|
||||
done:
|
||||
if (err) {
|
||||
dev_put(robo.dev);
|
||||
robo.dev = NULL;
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
|
@ -610,6 +617,8 @@ static int __init robo_init(void)
|
|||
static void __exit robo_exit(void)
|
||||
{
|
||||
switch_unregister_driver(DRIVER_NAME);
|
||||
if (robo.dev)
|
||||
dev_put(robo.dev);
|
||||
kfree(robo.device);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue