From 689149cdbcc3674c4a56bade65a91a7c7f2eb25c Mon Sep 17 00:00:00 2001
From: Michael Büsch <mb@bu3sch.de>
Date: Thu, 26 Feb 2009 19:19:59 +0000
Subject: ubsec: Fix bus disable ordering and fix probe error path.

SVN-Revision: 14677
---
 package/ubsec_ssb/src/ubsec_ssb.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

(limited to 'package/ubsec_ssb')

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
-- 
cgit v1.2.3