* [PULL REQUEST] net-fixes: IXP4xx
@ 2009-05-09 17:50 Krzysztof Halasa
2009-05-09 20:21 ` David Miller
0 siblings, 1 reply; 2+ messages in thread
From: Krzysztof Halasa @ 2009-05-09 17:50 UTC (permalink / raw)
To: David Miller; +Cc: netdev
Hi David,
Please pull - a couple of fixes for 2.6.30:
The following changes since commit be8be9eccbf2d908a7e56b3f7a71105cd88da06b:
Simon Horman (1):
ipvs: Fix IPv4 FWMARK virtual services
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/chris/linux-2.6.git net-fixes
Krzysztof Hałasa (2):
IXP4xx: use "ENODEV" instead of "ENOSYS" in module initialization.
(now modutils don't complain about missing module support, same
as c101 and n2 changes months ago).
IXP4xx: complete Ethernet netdev setup before calling
register_netdev() (recently spotted by Lubomir Rintel and
Andreas Mohr).
arch/arm/mach-ixp4xx/ixp4xx_npe.c | 2 +-
drivers/net/arm/ixp4xx_eth.c | 31 ++++++++++++++++---------------
drivers/net/wan/ixp4xx_hss.c | 4 ++--
3 files changed, 19 insertions(+), 18 deletions(-)
Thanks.
I'm attaching the diff as well.
--
Krzysztof Halasa
diff --git a/arch/arm/mach-ixp4xx/ixp4xx_npe.c b/arch/arm/mach-ixp4xx/ixp4xx_npe.c
index 2523102..7bb8e77 100644
--- a/arch/arm/mach-ixp4xx/ixp4xx_npe.c
+++ b/arch/arm/mach-ixp4xx/ixp4xx_npe.c
@@ -714,7 +714,7 @@ static int __init npe_init_module(void)
}
if (!found)
- return -ENOSYS;
+ return -ENODEV;
return 0;
}
diff --git a/drivers/net/arm/ixp4xx_eth.c b/drivers/net/arm/ixp4xx_eth.c
index 448487e..a740053 100644
--- a/drivers/net/arm/ixp4xx_eth.c
+++ b/drivers/net/arm/ixp4xx_eth.c
@@ -338,12 +338,12 @@ static int ixp4xx_mdio_register(void)
if (cpu_is_ixp43x()) {
/* IXP43x lacks NPE-B and uses NPE-C for MII PHY access */
if (!(ixp4xx_read_feature_bits() & IXP4XX_FEATURE_NPEC_ETH))
- return -ENOSYS;
+ return -ENODEV;
mdio_regs = (struct eth_regs __iomem *)IXP4XX_EthC_BASE_VIRT;
} else {
/* All MII PHY accesses use NPE-B Ethernet registers */
if (!(ixp4xx_read_feature_bits() & IXP4XX_FEATURE_NPEB_ETH0))
- return -ENOSYS;
+ return -ENODEV;
mdio_regs = (struct eth_regs __iomem *)IXP4XX_EthB_BASE_VIRT;
}
@@ -1174,7 +1174,7 @@ static int __devinit eth_init_one(struct platform_device *pdev)
regs_phys = IXP4XX_EthC_BASE_PHYS;
break;
default:
- err = -ENOSYS;
+ err = -ENODEV;
goto err_free;
}
@@ -1189,15 +1189,10 @@ static int __devinit eth_init_one(struct platform_device *pdev)
goto err_free;
}
- if (register_netdev(dev)) {
- err = -EIO;
- goto err_npe_rel;
- }
-
port->mem_res = request_mem_region(regs_phys, REGS_SIZE, dev->name);
if (!port->mem_res) {
err = -EBUSY;
- goto err_unreg;
+ goto err_npe_rel;
}
port->plat = plat;
@@ -1215,20 +1210,25 @@ static int __devinit eth_init_one(struct platform_device *pdev)
snprintf(phy_id, BUS_ID_SIZE, PHY_ID_FMT, "0", plat->phy);
port->phydev = phy_connect(dev, phy_id, &ixp4xx_adjust_link, 0,
PHY_INTERFACE_MODE_MII);
- if (IS_ERR(port->phydev)) {
- printk(KERN_ERR "%s: Could not attach to PHY\n", dev->name);
- return PTR_ERR(port->phydev);
- }
+ if ((err = IS_ERR(port->phydev)))
+ goto err_free_mem;
port->phydev->irq = PHY_POLL;
+ if ((err = register_netdev(dev)))
+ goto err_phy_dis;
+
printk(KERN_INFO "%s: MII PHY %i on %s\n", dev->name, plat->phy,
npe_name(port->npe));
return 0;
-err_unreg:
- unregister_netdev(dev);
+err_phy_dis:
+ phy_disconnect(port->phydev);
+err_free_mem:
+ npe_port_tab[NPE_ID(port->id)] = NULL;
+ platform_set_drvdata(pdev, NULL);
+ release_resource(port->mem_res);
err_npe_rel:
npe_release(port->npe);
err_free:
@@ -1242,6 +1242,7 @@ static int __devexit eth_remove_one(struct platform_device *pdev)
struct port *port = netdev_priv(dev);
unregister_netdev(dev);
+ phy_disconnect(port->phydev);
npe_port_tab[NPE_ID(port->id)] = NULL;
platform_set_drvdata(pdev, NULL);
npe_release(port->npe);
diff --git a/drivers/net/wan/ixp4xx_hss.c b/drivers/net/wan/ixp4xx_hss.c
index 3bf7d3f..765a7f5 100644
--- a/drivers/net/wan/ixp4xx_hss.c
+++ b/drivers/net/wan/ixp4xx_hss.c
@@ -1249,7 +1249,7 @@ static int __devinit hss_init_one(struct platform_device *pdev)
return -ENOMEM;
if ((port->npe = npe_request(0)) == NULL) {
- err = -ENOSYS;
+ err = -ENODEV;
goto err_free;
}
@@ -1311,7 +1311,7 @@ static int __init hss_init_module(void)
if ((ixp4xx_read_feature_bits() &
(IXP4XX_FEATURE_HDLC | IXP4XX_FEATURE_HSS)) !=
(IXP4XX_FEATURE_HDLC | IXP4XX_FEATURE_HSS))
- return -ENOSYS;
+ return -ENODEV;
spin_lock_init(&npe_lock);
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PULL REQUEST] net-fixes: IXP4xx
2009-05-09 17:50 [PULL REQUEST] net-fixes: IXP4xx Krzysztof Halasa
@ 2009-05-09 20:21 ` David Miller
0 siblings, 0 replies; 2+ messages in thread
From: David Miller @ 2009-05-09 20:21 UTC (permalink / raw)
To: khc; +Cc: netdev
From: Krzysztof Halasa <khc@pm.waw.pl>
Date: Sat, 09 May 2009 19:50:00 +0200
> The following changes since commit be8be9eccbf2d908a7e56b3f7a71105cd88da06b:
> Simon Horman (1):
> ipvs: Fix IPv4 FWMARK virtual services
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/chris/linux-2.6.git net-fixes
>
> Krzysztof Hałasa (2):
> IXP4xx: use "ENODEV" instead of "ENOSYS" in module initialization.
> (now modutils don't complain about missing module support, same
> as c101 and n2 changes months ago).
>
> IXP4xx: complete Ethernet netdev setup before calling
> register_netdev() (recently spotted by Lubomir Rintel and
> Andreas Mohr).
>
> arch/arm/mach-ixp4xx/ixp4xx_npe.c | 2 +-
> drivers/net/arm/ixp4xx_eth.c | 31 ++++++++++++++++---------------
> drivers/net/wan/ixp4xx_hss.c | 4 ++--
> 3 files changed, 19 insertions(+), 18 deletions(-)
Pulled, thanks!
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2009-05-09 20:21 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-05-09 17:50 [PULL REQUEST] net-fixes: IXP4xx Krzysztof Halasa
2009-05-09 20:21 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox