aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ixgbe/ixgbe_fcoe.c2
-rw-r--r--drivers/net/ixgbe/ixgbe_main.c4
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00.h6
-rw-r--r--net/mac80211/agg-tx.c8
4 files changed, 15 insertions, 5 deletions
diff --git a/drivers/net/ixgbe/ixgbe_fcoe.c b/drivers/net/ixgbe/ixgbe_fcoe.c
index fa9f24e23683..28cf104e36cc 100644
--- a/drivers/net/ixgbe/ixgbe_fcoe.c
+++ b/drivers/net/ixgbe/ixgbe_fcoe.c
@@ -336,7 +336,7 @@ int ixgbe_fcoe_ddp(struct ixgbe_adapter *adapter,
336 /* return 0 to bypass going to ULD for DDPed data */ 336 /* return 0 to bypass going to ULD for DDPed data */
337 if (fcstat == IXGBE_RXDADV_STAT_FCSTAT_DDP) 337 if (fcstat == IXGBE_RXDADV_STAT_FCSTAT_DDP)
338 rc = 0; 338 rc = 0;
339 else 339 else if (ddp->len)
340 rc = ddp->len; 340 rc = ddp->len;
341 } 341 }
342 342
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
index 71df9ed9b534..8a8518dd6948 100644
--- a/drivers/net/ixgbe/ixgbe_main.c
+++ b/drivers/net/ixgbe/ixgbe_main.c
@@ -494,12 +494,12 @@ static void ixgbe_receive_skb(struct ixgbe_q_vector *q_vector,
494 494
495 skb_record_rx_queue(skb, ring->queue_index); 495 skb_record_rx_queue(skb, ring->queue_index);
496 if (!(adapter->flags & IXGBE_FLAG_IN_NETPOLL)) { 496 if (!(adapter->flags & IXGBE_FLAG_IN_NETPOLL)) {
497 if (adapter->vlgrp && is_vlan && (tag != 0)) 497 if (adapter->vlgrp && is_vlan && (tag & VLAN_VID_MASK))
498 vlan_gro_receive(napi, adapter->vlgrp, tag, skb); 498 vlan_gro_receive(napi, adapter->vlgrp, tag, skb);
499 else 499 else
500 napi_gro_receive(napi, skb); 500 napi_gro_receive(napi, skb);
501 } else { 501 } else {
502 if (adapter->vlgrp && is_vlan && (tag != 0)) 502 if (adapter->vlgrp && is_vlan && (tag & VLAN_VID_MASK))
503 vlan_hwaccel_rx(skb, adapter->vlgrp, tag); 503 vlan_hwaccel_rx(skb, adapter->vlgrp, tag);
504 else 504 else
505 netif_rx(skb); 505 netif_rx(skb);
diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h
index 5bc100db28d4..99e89596cef6 100644
--- a/drivers/net/wireless/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/rt2x00/rt2x00.h
@@ -851,13 +851,15 @@ struct rt2x00_dev {
851static inline void rt2x00_rf_read(struct rt2x00_dev *rt2x00dev, 851static inline void rt2x00_rf_read(struct rt2x00_dev *rt2x00dev,
852 const unsigned int word, u32 *data) 852 const unsigned int word, u32 *data)
853{ 853{
854 *data = rt2x00dev->rf[word]; 854 BUG_ON(word < 1 || word > rt2x00dev->ops->rf_size / sizeof(u32));
855 *data = rt2x00dev->rf[word - 1];
855} 856}
856 857
857static inline void rt2x00_rf_write(struct rt2x00_dev *rt2x00dev, 858static inline void rt2x00_rf_write(struct rt2x00_dev *rt2x00dev,
858 const unsigned int word, u32 data) 859 const unsigned int word, u32 data)
859{ 860{
860 rt2x00dev->rf[word] = data; 861 BUG_ON(word < 1 || word > rt2x00dev->ops->rf_size / sizeof(u32));
862 rt2x00dev->rf[word - 1] = data;
861} 863}
862 864
863/* 865/*
diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c
index 1958c7c42cd9..bd765f30dba2 100644
--- a/net/mac80211/agg-tx.c
+++ b/net/mac80211/agg-tx.c
@@ -381,6 +381,14 @@ static void ieee80211_agg_splice_packets(struct ieee80211_local *local,
381 &local->hw, queue, 381 &local->hw, queue,
382 IEEE80211_QUEUE_STOP_REASON_AGGREGATION); 382 IEEE80211_QUEUE_STOP_REASON_AGGREGATION);
383 383
384 if (!(sta->ampdu_mlme.tid_state_tx[tid] & HT_ADDBA_REQUESTED_MSK))
385 return;
386
387 if (WARN(!sta->ampdu_mlme.tid_tx[tid],
388 "TID %d gone but expected when splicing aggregates from"
389 "the pending queue\n", tid))
390 return;
391
384 if (!skb_queue_empty(&sta->ampdu_mlme.tid_tx[tid]->pending)) { 392 if (!skb_queue_empty(&sta->ampdu_mlme.tid_tx[tid]->pending)) {
385 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); 393 spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
386 /* copy over remaining packets */ 394 /* copy over remaining packets */