Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d26acd92 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
  ipsec: Fix deadlock in xfrm_state management.
  ipv: Re-enable IP when MTU > 68
  net/xfrm: Use an IS_ERR test rather than a NULL test
  ath9: Fix ath_rx_flush_tid() for IRQs disabled kernel warning message.
  ath9k: Incorrect key used when group and pairwise ciphers are different.
  rt2x00: Compiler warning unmasked by fix of BUILD_BUG_ON
  mac80211: Fix debugfs union misuse and pointer corruption
  wireless/libertas/if_cs.c: fix memory leaks
  orinoco: Multicast to the specified addresses
  iwlwifi: fix 64bit platform firmware loading
  iwlwifi: fix apm_stop (wrong bit polarity for FLAG_INIT_DONE)
  iwlwifi: workaround interrupt handling no some platforms
  iwlwifi: do not use GFP_DMA in iwl_tx_queue_init
  net/wireless/Kconfig: clarify the description for CONFIG_WIRELESS_EXT_SYSFS
  net: Unbreak userspace usage of linux/mroute.h
  pkt_sched: Fix locking of qdisc_root with qdisc_root_sleeping_lock()
  ipv6: When we droped a packet, we should return NET_RX_DROP instead of 0
parents fbb16e24 37b08e34
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -7285,15 +7285,15 @@ ath9k_hw_set_keycache_entry(struct ath_hal *ah, u16 entry,
		}
		}
		break;
		break;
	case ATH9K_CIPHER_WEP:
	case ATH9K_CIPHER_WEP:
		if (k->kv_len < 40 / NBBY) {
		if (k->kv_len < LEN_WEP40) {
			DPRINTF(ah->ah_sc, ATH_DBG_KEYCACHE,
			DPRINTF(ah->ah_sc, ATH_DBG_KEYCACHE,
				 "%s: WEP key length %u too small\n",
				 "%s: WEP key length %u too small\n",
				 __func__, k->kv_len);
				 __func__, k->kv_len);
			return false;
			return false;
		}
		}
		if (k->kv_len <= 40 / NBBY)
		if (k->kv_len <= LEN_WEP40)
			keyType = AR_KEYTABLE_TYPE_40;
			keyType = AR_KEYTABLE_TYPE_40;
		else if (k->kv_len <= 104 / NBBY)
		else if (k->kv_len <= LEN_WEP104)
			keyType = AR_KEYTABLE_TYPE_104;
			keyType = AR_KEYTABLE_TYPE_104;
		else
		else
			keyType = AR_KEYTABLE_TYPE_128;
			keyType = AR_KEYTABLE_TYPE_128;
@@ -7313,7 +7313,7 @@ ath9k_hw_set_keycache_entry(struct ath_hal *ah, u16 entry,
	key2 = get_unaligned_le32(k->kv_val + 6) ^ xorMask;
	key2 = get_unaligned_le32(k->kv_val + 6) ^ xorMask;
	key3 = (get_unaligned_le16(k->kv_val + 10) ^ xorMask) & 0xffff;
	key3 = (get_unaligned_le16(k->kv_val + 10) ^ xorMask) & 0xffff;
	key4 = get_unaligned_le32(k->kv_val + 12) ^ xorMask;
	key4 = get_unaligned_le32(k->kv_val + 12) ^ xorMask;
	if (k->kv_len <= 104 / NBBY)
	if (k->kv_len <= LEN_WEP104)
		key4 &= 0xff;
		key4 &= 0xff;


	if (keyType == AR_KEYTABLE_TYPE_TKIP && ATH9K_IS_MIC_ENABLED(ah)) {
	if (keyType == AR_KEYTABLE_TYPE_TKIP && ATH9K_IS_MIC_ENABLED(ah)) {
+4 −2
Original line number Original line Diff line number Diff line
@@ -206,6 +206,7 @@ static int ath_key_config(struct ath_softc *sc,
	if (!ret)
	if (!ret)
		return -EIO;
		return -EIO;


	if (mac)
		sc->sc_keytype = hk.kv_type;
		sc->sc_keytype = hk.kv_type;
	return 0;
	return 0;
}
}
@@ -756,6 +757,7 @@ static int ath9k_set_key(struct ieee80211_hw *hw,
			key->hw_key_idx = key->keyidx;
			key->hw_key_idx = key->keyidx;
			/* push IV and Michael MIC generation to stack */
			/* push IV and Michael MIC generation to stack */
			key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
			key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
			if (key->alg == ALG_TKIP)
				key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
				key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
		}
		}
		break;
		break;
+3 −2
Original line number Original line Diff line number Diff line
@@ -360,8 +360,9 @@ static void ath_rx_flush_tid(struct ath_softc *sc,
	struct ath_arx_tid *rxtid, int drop)
	struct ath_arx_tid *rxtid, int drop)
{
{
	struct ath_rxbuf *rxbuf;
	struct ath_rxbuf *rxbuf;
	unsigned long flag;


	spin_lock_bh(&rxtid->tidlock);
	spin_lock_irqsave(&rxtid->tidlock, flag);
	while (rxtid->baw_head != rxtid->baw_tail) {
	while (rxtid->baw_head != rxtid->baw_tail) {
		rxbuf = rxtid->rxbuf + rxtid->baw_head;
		rxbuf = rxtid->rxbuf + rxtid->baw_head;
		if (!rxbuf->rx_wbuf) {
		if (!rxbuf->rx_wbuf) {
@@ -382,7 +383,7 @@ static void ath_rx_flush_tid(struct ath_softc *sc,
		INCR(rxtid->baw_head, ATH_TID_MAX_BUFS);
		INCR(rxtid->baw_head, ATH_TID_MAX_BUFS);
		INCR(rxtid->seq_next, IEEE80211_SEQ_MAX);
		INCR(rxtid->seq_next, IEEE80211_SEQ_MAX);
	}
	}
	spin_unlock_bh(&rxtid->tidlock);
	spin_unlock_irqrestore(&rxtid->tidlock, flag);
}
}


static struct sk_buff *ath_rxbuf_alloc(struct ath_softc *sc,
static struct sk_buff *ath_rxbuf_alloc(struct ath_softc *sc,
+2 −2
Original line number Original line Diff line number Diff line
@@ -474,8 +474,8 @@ static void iwl4965_apm_stop(struct iwl_priv *priv)
	iwl_set_bit(priv, CSR_RESET, CSR_RESET_REG_FLAG_SW_RESET);
	iwl_set_bit(priv, CSR_RESET, CSR_RESET_REG_FLAG_SW_RESET);


	udelay(10);
	udelay(10);

	/* clear "init complete"  move adapter D0A* --> D0U state */
	iwl_set_bit(priv, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_INIT_DONE);
	iwl_clear_bit(priv, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_INIT_DONE);
	spin_unlock_irqrestore(&priv->lock, flags);
	spin_unlock_irqrestore(&priv->lock, flags);
}
}


+6 −8
Original line number Original line Diff line number Diff line
@@ -145,7 +145,8 @@ static void iwl5000_apm_stop(struct iwl_priv *priv)


	udelay(10);
	udelay(10);


	iwl_set_bit(priv, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_INIT_DONE);
	/* clear "init complete"  move adapter D0A* --> D0U state */
	iwl_clear_bit(priv, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_INIT_DONE);


	spin_unlock_irqrestore(&priv->lock, flags);
	spin_unlock_irqrestore(&priv->lock, flags);
}
}
@@ -577,14 +578,11 @@ static int iwl5000_load_section(struct iwl_priv *priv,
		FH_TFDIB_CTRL0_REG(FH_SRVC_CHNL),
		FH_TFDIB_CTRL0_REG(FH_SRVC_CHNL),
		phy_addr & FH_MEM_TFDIB_DRAM_ADDR_LSB_MSK);
		phy_addr & FH_MEM_TFDIB_DRAM_ADDR_LSB_MSK);


	/* FIME: write the MSB of the phy_addr in CTRL1
	 * iwl_write_direct32(priv,
		IWL_FH_TFDIB_CTRL1_REG(IWL_FH_SRVC_CHNL),
		((phy_addr & MSB_MSK)
			<< FH_MEM_TFDIB_REG1_ADDR_BITSHIFT) | byte_count);
	 */
	iwl_write_direct32(priv,
	iwl_write_direct32(priv,
		FH_TFDIB_CTRL1_REG(FH_SRVC_CHNL), byte_cnt);
		FH_TFDIB_CTRL1_REG(FH_SRVC_CHNL),
		(iwl_get_dma_hi_address(phy_addr)
			<< FH_MEM_TFDIB_REG1_ADDR_BITSHIFT) | byte_cnt);

	iwl_write_direct32(priv,
	iwl_write_direct32(priv,
		FH_TCSR_CHNL_TX_BUF_STS_REG(FH_SRVC_CHNL),
		FH_TCSR_CHNL_TX_BUF_STS_REG(FH_SRVC_CHNL),
		1 << FH_TCSR_CHNL_TX_BUF_STS_REG_POS_TB_NUM |
		1 << FH_TCSR_CHNL_TX_BUF_STS_REG_POS_TB_NUM |
Loading