Patch 2.6.32.28 to 2.6.32.32
/drivers/net/wireless/hostap/hostap_cs.c
blob:6992f8ff229491bda4508dd1b724912b7eecd737 -> blob:b4ff1dc1d72d8cef60854d1bd3b9081f891b41e0
--- drivers/net/wireless/hostap/hostap_cs.c
+++ drivers/net/wireless/hostap/hostap_cs.c
@@ -662,6 +662,12 @@ static int prism2_config(struct pcmcia_d
link->dev_node = &hw_priv->node;
/*
+ * Make sure the IRQ handler cannot proceed until at least
+ * dev->base_addr is initialized.
+ */
+ spin_lock_irqsave(&local->irq_init_lock, flags);
+
+ /*
* Allocate an interrupt line. Note that this does not assign a
* handler to the interrupt, unless the 'Handler' member of the
* irq structure is initialized.
@@ -684,10 +690,9 @@ static int prism2_config(struct pcmcia_d
CS_CHECK(RequestConfiguration,
pcmcia_request_configuration(link, &link->conf));
- /* IRQ handler cannot proceed until at dev->base_addr is initialized */
- spin_lock_irqsave(&local->irq_init_lock, flags);
dev->irq = link->irq.AssignedIRQ;
dev->base_addr = link->io.BasePort1;
+
spin_unlock_irqrestore(&local->irq_init_lock, flags);
/* Finally, report what we've done */
@@ -719,6 +724,7 @@ static int prism2_config(struct pcmcia_d
return ret;
cs_failed:
+ spin_unlock_irqrestore(&local->irq_init_lock, flags);
cs_error(link, last_fn, last_ret);
failed: