aboutsummaryrefslogtreecommitdiffstats
path: root/package/ubsec_ssb/src/ubsec_ssb.c
diff options
context:
space:
mode:
authorMichael Büsch <mb@bu3sch.de>2009-02-26 19:19:59 +0000
committerMichael Büsch <mb@bu3sch.de>2009-02-26 19:19:59 +0000
commit689149cdbcc3674c4a56bade65a91a7c7f2eb25c (patch)
tree7769f5f59e1448a6b93b57d6fea83c3a97af72b8 /package/ubsec_ssb/src/ubsec_ssb.c
parent86307b4db2cc678440b0456c09d6b0388602094a (diff)
downloadupstream-689149cdbcc3674c4a56bade65a91a7c7f2eb25c.tar.gz
upstream-689149cdbcc3674c4a56bade65a91a7c7f2eb25c.tar.bz2
upstream-689149cdbcc3674c4a56bade65a91a7c7f2eb25c.zip
ubsec: Fix bus disable ordering and fix probe error path.
SVN-Revision: 14677
Diffstat (limited to 'package/ubsec_ssb/src/ubsec_ssb.c')
-rw-r--r--package/ubsec_ssb/src/ubsec_ssb.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/package/ubsec_ssb/src/ubsec_ssb.c b/package/ubsec_ssb/src/ubsec_ssb.c
index 4ca06d6631..6994504140 100644
--- a/package/ubsec_ssb/src/ubsec_ssb.c
+++ b/package/ubsec_ssb/src/ubsec_ssb.c
@@ -494,7 +494,7 @@ __devinit ubsec_ssb_probe(struct ssb_device *sdev,
err = ssb_bus_powerup(sdev->bus, 0);
if (err) {
dev_err(sdev->dev, "Failed to powerup the bus\n");
- goto err_powerup;
+ goto err_out;
}
err = request_irq(sdev->irq, (irq_handler_t)ubsec_ssb_isr,
@@ -508,7 +508,7 @@ __devinit ubsec_ssb_probe(struct ssb_device *sdev,
if (err) {
dev_err(sdev->dev,
"Required 32BIT DMA mask unsupported by the system.\n");
- goto err_out_powerdown;
+ goto err_out_free_irq;
}
printk(KERN_INFO "Sentry5(tm) ROBOGateway(tm) IPSec Core at IRQ %u\n",
@@ -520,7 +520,7 @@ __devinit ubsec_ssb_probe(struct ssb_device *sdev,
ssb_device_enable(sdev, 0);
if (ubsec_attach(sdev, ent, sdev->dev) != 0)
- goto err_disable_interrupt;
+ goto err_out_disable;
#ifdef UBSEC_DEBUG
procdebug = create_proc_entry(DRV_MODULE_NAME, S_IRUSR, NULL);
@@ -534,15 +534,17 @@ __devinit ubsec_ssb_probe(struct ssb_device *sdev,
return 0;
-err_disable_interrupt:
+err_out_disable:
+ ssb_device_disable(sdev, 0);
+
+err_out_free_irq:
free_irq(sdev->irq, sdev);
err_out_powerdown:
ssb_bus_may_powerdown(sdev->bus);
-err_powerup:
- ssb_device_disable(sdev, 0);
- return err;
+err_out:
+ return err;
}
static void __devexit ubsec_ssb_remove(struct ssb_device *sdev) {
@@ -587,8 +589,8 @@ static void __devexit ubsec_ssb_remove(struct ssb_device *sdev) {
sc->sc_queuea[i] = NULL;
}
- ssb_bus_may_powerdown(sdev->bus);
ssb_device_disable(sdev, 0);
+ ssb_bus_may_powerdown(sdev->bus);
ssb_set_drvdata(sdev, NULL);
#ifdef UBSEC_DEBUG