Loading MAINTAINERS +2 −8 Original line number Diff line number Diff line Loading @@ -2978,20 +2978,14 @@ F: drivers/net/ixgb/ F: drivers/net/ixgbe/ INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT M: Reinette Chatre <reinette.chatre@intel.com> M: Intel Linux Wireless <ilw@linux.intel.com> L: linux-wireless@vger.kernel.org W: http://ipw2100.sourceforge.net S: Odd Fixes S: Orphan F: Documentation/networking/README.ipw2100 F: drivers/net/wireless/ipw2x00/ipw2100.* INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT M: Reinette Chatre <reinette.chatre@intel.com> M: Intel Linux Wireless <ilw@linux.intel.com> L: linux-wireless@vger.kernel.org W: http://ipw2200.sourceforge.net S: Odd Fixes S: Orphan F: Documentation/networking/README.ipw2200 F: drivers/net/wireless/ipw2x00/ipw2200.* Loading drivers/net/wireless/hostap/hostap_cs.c +13 −2 Original line number Diff line number Diff line Loading @@ -594,6 +594,7 @@ static int prism2_config(struct pcmcia_device *link) local_info_t *local; int ret = 1; struct hostap_cs_priv *hw_priv; unsigned long flags; PDEBUG(DEBUG_FLOW, "prism2_config()\n"); Loading Loading @@ -625,9 +626,15 @@ static int prism2_config(struct pcmcia_device *link) local->hw_priv = hw_priv; hw_priv->link = link; /* * Make sure the IRQ handler cannot proceed until at least * dev->base_addr is initialized. */ spin_lock_irqsave(&local->irq_init_lock, flags); ret = pcmcia_request_irq(link, prism2_interrupt); if (ret) goto failed; goto failed_unlock; /* * This actually configures the PCMCIA socket -- setting up Loading @@ -636,11 +643,13 @@ static int prism2_config(struct pcmcia_device *link) */ ret = pcmcia_request_configuration(link, &link->conf); if (ret) goto failed; goto failed_unlock; dev->irq = link->irq; dev->base_addr = link->io.BasePort1; spin_unlock_irqrestore(&local->irq_init_lock, flags); /* Finally, report what we've done */ printk(KERN_INFO "%s: index 0x%02x: ", dev_info, link->conf.ConfigIndex); Loading @@ -667,6 +676,8 @@ static int prism2_config(struct pcmcia_device *link) return ret; failed_unlock: spin_unlock_irqrestore(&local->irq_init_lock, flags); failed: kfree(hw_priv); prism2_release((u_long)link); Loading drivers/net/wireless/hostap/hostap_hw.c +13 −0 Original line number Diff line number Diff line Loading @@ -2621,6 +2621,18 @@ static irqreturn_t prism2_interrupt(int irq, void *dev_id) iface = netdev_priv(dev); local = iface->local; /* Detect early interrupt before driver is fully configued */ spin_lock(&local->irq_init_lock); if (!dev->base_addr) { if (net_ratelimit()) { printk(KERN_DEBUG "%s: Interrupt, but dev not configured\n", dev->name); } spin_unlock(&local->irq_init_lock); return IRQ_HANDLED; } spin_unlock(&local->irq_init_lock); prism2_io_debug_add(dev, PRISM2_IO_DEBUG_CMD_INTERRUPT, 0, 0); if (local->func->card_present && !local->func->card_present(local)) { Loading Loading @@ -3138,6 +3150,7 @@ prism2_init_local_data(struct prism2_helper_functions *funcs, int card_idx, spin_lock_init(&local->cmdlock); spin_lock_init(&local->baplock); spin_lock_init(&local->lock); spin_lock_init(&local->irq_init_lock); mutex_init(&local->rid_bap_mtx); if (card_idx < 0 || card_idx >= MAX_PARM_DEVICES) Loading drivers/net/wireless/hostap/hostap_wlan.h +1 −1 Original line number Diff line number Diff line Loading @@ -654,7 +654,7 @@ struct local_info { rwlock_t iface_lock; /* hostap_interfaces read lock; use write lock * when removing entries from the list. * TX and RX paths can use read lock. */ spinlock_t cmdlock, baplock, lock; spinlock_t cmdlock, baplock, lock, irq_init_lock; struct mutex rid_bap_mtx; u16 infofid; /* MAC buffer id for info frame */ /* txfid, intransmitfid, next_txtid, and next_alloc are protected by Loading drivers/net/wireless/iwlwifi/iwl-agn-tx.c +5 −0 Original line number Diff line number Diff line Loading @@ -1299,6 +1299,11 @@ void iwlagn_rx_reply_compressed_ba(struct iwl_priv *priv, sta_id = ba_resp->sta_id; tid = ba_resp->tid; agg = &priv->stations[sta_id].tid[tid].agg; if (unlikely(agg->txq_id != scd_flow)) { IWL_ERR(priv, "BA scd_flow %d does not match txq_id %d\n", scd_flow, agg->txq_id); return; } /* Find index just before block-ack window */ index = iwl_queue_dec_wrap(ba_resp_scd_ssn & 0xff, txq->q.n_bd); Loading Loading
MAINTAINERS +2 −8 Original line number Diff line number Diff line Loading @@ -2978,20 +2978,14 @@ F: drivers/net/ixgb/ F: drivers/net/ixgbe/ INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT M: Reinette Chatre <reinette.chatre@intel.com> M: Intel Linux Wireless <ilw@linux.intel.com> L: linux-wireless@vger.kernel.org W: http://ipw2100.sourceforge.net S: Odd Fixes S: Orphan F: Documentation/networking/README.ipw2100 F: drivers/net/wireless/ipw2x00/ipw2100.* INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT M: Reinette Chatre <reinette.chatre@intel.com> M: Intel Linux Wireless <ilw@linux.intel.com> L: linux-wireless@vger.kernel.org W: http://ipw2200.sourceforge.net S: Odd Fixes S: Orphan F: Documentation/networking/README.ipw2200 F: drivers/net/wireless/ipw2x00/ipw2200.* Loading
drivers/net/wireless/hostap/hostap_cs.c +13 −2 Original line number Diff line number Diff line Loading @@ -594,6 +594,7 @@ static int prism2_config(struct pcmcia_device *link) local_info_t *local; int ret = 1; struct hostap_cs_priv *hw_priv; unsigned long flags; PDEBUG(DEBUG_FLOW, "prism2_config()\n"); Loading Loading @@ -625,9 +626,15 @@ static int prism2_config(struct pcmcia_device *link) local->hw_priv = hw_priv; hw_priv->link = link; /* * Make sure the IRQ handler cannot proceed until at least * dev->base_addr is initialized. */ spin_lock_irqsave(&local->irq_init_lock, flags); ret = pcmcia_request_irq(link, prism2_interrupt); if (ret) goto failed; goto failed_unlock; /* * This actually configures the PCMCIA socket -- setting up Loading @@ -636,11 +643,13 @@ static int prism2_config(struct pcmcia_device *link) */ ret = pcmcia_request_configuration(link, &link->conf); if (ret) goto failed; goto failed_unlock; dev->irq = link->irq; dev->base_addr = link->io.BasePort1; spin_unlock_irqrestore(&local->irq_init_lock, flags); /* Finally, report what we've done */ printk(KERN_INFO "%s: index 0x%02x: ", dev_info, link->conf.ConfigIndex); Loading @@ -667,6 +676,8 @@ static int prism2_config(struct pcmcia_device *link) return ret; failed_unlock: spin_unlock_irqrestore(&local->irq_init_lock, flags); failed: kfree(hw_priv); prism2_release((u_long)link); Loading
drivers/net/wireless/hostap/hostap_hw.c +13 −0 Original line number Diff line number Diff line Loading @@ -2621,6 +2621,18 @@ static irqreturn_t prism2_interrupt(int irq, void *dev_id) iface = netdev_priv(dev); local = iface->local; /* Detect early interrupt before driver is fully configued */ spin_lock(&local->irq_init_lock); if (!dev->base_addr) { if (net_ratelimit()) { printk(KERN_DEBUG "%s: Interrupt, but dev not configured\n", dev->name); } spin_unlock(&local->irq_init_lock); return IRQ_HANDLED; } spin_unlock(&local->irq_init_lock); prism2_io_debug_add(dev, PRISM2_IO_DEBUG_CMD_INTERRUPT, 0, 0); if (local->func->card_present && !local->func->card_present(local)) { Loading Loading @@ -3138,6 +3150,7 @@ prism2_init_local_data(struct prism2_helper_functions *funcs, int card_idx, spin_lock_init(&local->cmdlock); spin_lock_init(&local->baplock); spin_lock_init(&local->lock); spin_lock_init(&local->irq_init_lock); mutex_init(&local->rid_bap_mtx); if (card_idx < 0 || card_idx >= MAX_PARM_DEVICES) Loading
drivers/net/wireless/hostap/hostap_wlan.h +1 −1 Original line number Diff line number Diff line Loading @@ -654,7 +654,7 @@ struct local_info { rwlock_t iface_lock; /* hostap_interfaces read lock; use write lock * when removing entries from the list. * TX and RX paths can use read lock. */ spinlock_t cmdlock, baplock, lock; spinlock_t cmdlock, baplock, lock, irq_init_lock; struct mutex rid_bap_mtx; u16 infofid; /* MAC buffer id for info frame */ /* txfid, intransmitfid, next_txtid, and next_alloc are protected by Loading
drivers/net/wireless/iwlwifi/iwl-agn-tx.c +5 −0 Original line number Diff line number Diff line Loading @@ -1299,6 +1299,11 @@ void iwlagn_rx_reply_compressed_ba(struct iwl_priv *priv, sta_id = ba_resp->sta_id; tid = ba_resp->tid; agg = &priv->stations[sta_id].tid[tid].agg; if (unlikely(agg->txq_id != scd_flow)) { IWL_ERR(priv, "BA scd_flow %d does not match txq_id %d\n", scd_flow, agg->txq_id); return; } /* Find index just before block-ack window */ index = iwl_queue_dec_wrap(ba_resp_scd_ssn & 0xff, txq->q.n_bd); Loading