1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2024-11-20 00:44:05 +02:00

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
This commit is contained in:
mb 2009-02-26 19:19:59 +00:00
parent 0bd45e87d9
commit f0a7d59dbd

View File

@ -494,7 +494,7 @@ __devinit ubsec_ssb_probe(struct ssb_device *sdev,
err = ssb_bus_powerup(sdev->bus, 0); err = ssb_bus_powerup(sdev->bus, 0);
if (err) { if (err) {
dev_err(sdev->dev, "Failed to powerup the bus\n"); 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, 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) { if (err) {
dev_err(sdev->dev, dev_err(sdev->dev,
"Required 32BIT DMA mask unsupported by the system.\n"); "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", 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); ssb_device_enable(sdev, 0);
if (ubsec_attach(sdev, ent, sdev->dev) != 0) if (ubsec_attach(sdev, ent, sdev->dev) != 0)
goto err_disable_interrupt; goto err_out_disable;
#ifdef UBSEC_DEBUG #ifdef UBSEC_DEBUG
procdebug = create_proc_entry(DRV_MODULE_NAME, S_IRUSR, NULL); procdebug = create_proc_entry(DRV_MODULE_NAME, S_IRUSR, NULL);
@ -534,14 +534,16 @@ __devinit ubsec_ssb_probe(struct ssb_device *sdev,
return 0; return 0;
err_disable_interrupt: err_out_disable:
ssb_device_disable(sdev, 0);
err_out_free_irq:
free_irq(sdev->irq, sdev); free_irq(sdev->irq, sdev);
err_out_powerdown: err_out_powerdown:
ssb_bus_may_powerdown(sdev->bus); ssb_bus_may_powerdown(sdev->bus);
err_powerup: err_out:
ssb_device_disable(sdev, 0);
return err; return err;
} }
@ -587,8 +589,8 @@ static void __devexit ubsec_ssb_remove(struct ssb_device *sdev) {
sc->sc_queuea[i] = NULL; sc->sc_queuea[i] = NULL;
} }
ssb_bus_may_powerdown(sdev->bus);
ssb_device_disable(sdev, 0); ssb_device_disable(sdev, 0);
ssb_bus_may_powerdown(sdev->bus);
ssb_set_drvdata(sdev, NULL); ssb_set_drvdata(sdev, NULL);
#ifdef UBSEC_DEBUG #ifdef UBSEC_DEBUG