diff options
author | Michael Büsch <mb@bu3sch.de> | 2009-02-26 19:19:59 +0000 |
---|---|---|
committer | Michael Büsch <mb@bu3sch.de> | 2009-02-26 19:19:59 +0000 |
commit | a745b3a508a9b24b34fc71a32e5513b96b6ed8b9 (patch) | |
tree | 9d5d258b26624011edf806fcbd9b3111ba59e5b1 /package/ubsec_ssb/src | |
parent | c4789115a0963a1563d229b84a43df595b80f23b (diff) | |
download | master-187ad058-a745b3a508a9b24b34fc71a32e5513b96b6ed8b9.tar.gz master-187ad058-a745b3a508a9b24b34fc71a32e5513b96b6ed8b9.tar.bz2 master-187ad058-a745b3a508a9b24b34fc71a32e5513b96b6ed8b9.zip |
ubsec: Fix bus disable ordering and fix probe error path.
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@14677 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/ubsec_ssb/src')
-rw-r--r-- | package/ubsec_ssb/src/ubsec_ssb.c | 18 |
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 |