diff options
author | Johannes Berg <johannes.berg@intel.com> | 2016-08-04 02:57:59 -0400 |
---|---|---|
committer | Luca Coelho <luciano.coelho@intel.com> | 2016-09-19 02:14:11 -0400 |
commit | 61b0f5d7c41408ff523a5cd3925feafa82b971f5 (patch) | |
tree | 6075337ef1cf77abb4e65d3fb54f6f569b07ee02 | |
parent | 5a710b8606cc3ec12f60a400248a051743ee35d1 (diff) |
iwlwifi: mvm: compare full command ID
When comparing command IDs, the group should be taken
into account so the same command/notification from a
different group doesn't trigger anything unexpected.
Fix this by comparing to the wide ID.
Fixes: commit 1738d60b31d7 ("iwlwifi: mvm: handle RX MPDUs separately")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
-rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c index 43ea1e5fdfc6..de34c9f4f0f4 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c | |||
@@ -966,10 +966,11 @@ static void iwl_mvm_rx(struct iwl_op_mode *op_mode, | |||
966 | { | 966 | { |
967 | struct iwl_rx_packet *pkt = rxb_addr(rxb); | 967 | struct iwl_rx_packet *pkt = rxb_addr(rxb); |
968 | struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); | 968 | struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); |
969 | u16 cmd = WIDE_ID(pkt->hdr.group_id, pkt->hdr.cmd); | ||
969 | 970 | ||
970 | if (likely(pkt->hdr.cmd == REPLY_RX_MPDU_CMD)) | 971 | if (likely(cmd == WIDE_ID(LEGACY_GROUP, REPLY_RX_MPDU_CMD))) |
971 | iwl_mvm_rx_rx_mpdu(mvm, napi, rxb); | 972 | iwl_mvm_rx_rx_mpdu(mvm, napi, rxb); |
972 | else if (pkt->hdr.cmd == REPLY_RX_PHY_CMD) | 973 | else if (cmd == WIDE_ID(LEGACY_GROUP, REPLY_RX_PHY_CMD)) |
973 | iwl_mvm_rx_rx_phy_cmd(mvm, rxb); | 974 | iwl_mvm_rx_rx_phy_cmd(mvm, rxb); |
974 | else | 975 | else |
975 | iwl_mvm_rx_common(mvm, rxb, pkt); | 976 | iwl_mvm_rx_common(mvm, rxb, pkt); |
@@ -981,13 +982,14 @@ static void iwl_mvm_rx_mq(struct iwl_op_mode *op_mode, | |||
981 | { | 982 | { |
982 | struct iwl_rx_packet *pkt = rxb_addr(rxb); | 983 | struct iwl_rx_packet *pkt = rxb_addr(rxb); |
983 | struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); | 984 | struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); |
985 | u16 cmd = WIDE_ID(pkt->hdr.group_id, pkt->hdr.cmd); | ||
984 | 986 | ||
985 | if (likely(pkt->hdr.cmd == REPLY_RX_MPDU_CMD)) | 987 | if (likely(cmd == WIDE_ID(LEGACY_GROUP, REPLY_RX_MPDU_CMD))) |
986 | iwl_mvm_rx_mpdu_mq(mvm, napi, rxb, 0); | 988 | iwl_mvm_rx_mpdu_mq(mvm, napi, rxb, 0); |
987 | else if (unlikely(pkt->hdr.group_id == DATA_PATH_GROUP && | 989 | else if (unlikely(cmd == WIDE_ID(DATA_PATH_GROUP, |
988 | pkt->hdr.cmd == RX_QUEUES_NOTIFICATION)) | 990 | RX_QUEUES_NOTIFICATION))) |
989 | iwl_mvm_rx_queue_notif(mvm, rxb, 0); | 991 | iwl_mvm_rx_queue_notif(mvm, rxb, 0); |
990 | else if (pkt->hdr.cmd == FRAME_RELEASE) | 992 | else if (cmd == WIDE_ID(LEGACY_GROUP, FRAME_RELEASE)) |
991 | iwl_mvm_rx_frame_release(mvm, napi, rxb, 0); | 993 | iwl_mvm_rx_frame_release(mvm, napi, rxb, 0); |
992 | else | 994 | else |
993 | iwl_mvm_rx_common(mvm, rxb, pkt); | 995 | iwl_mvm_rx_common(mvm, rxb, pkt); |
@@ -1666,13 +1668,14 @@ static void iwl_mvm_rx_mq_rss(struct iwl_op_mode *op_mode, | |||
1666 | { | 1668 | { |
1667 | struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); | 1669 | struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); |
1668 | struct iwl_rx_packet *pkt = rxb_addr(rxb); | 1670 | struct iwl_rx_packet *pkt = rxb_addr(rxb); |
1671 | u16 cmd = WIDE_ID(pkt->hdr.group_id, pkt->hdr.cmd); | ||
1669 | 1672 | ||
1670 | if (unlikely(pkt->hdr.cmd == FRAME_RELEASE)) | 1673 | if (unlikely(cmd == WIDE_ID(LEGACY_GROUP, FRAME_RELEASE))) |
1671 | iwl_mvm_rx_frame_release(mvm, napi, rxb, queue); | 1674 | iwl_mvm_rx_frame_release(mvm, napi, rxb, queue); |
1672 | else if (unlikely(pkt->hdr.cmd == RX_QUEUES_NOTIFICATION && | 1675 | else if (unlikely(cmd == WIDE_ID(DATA_PATH_GROUP, |
1673 | pkt->hdr.group_id == DATA_PATH_GROUP)) | 1676 | RX_QUEUES_NOTIFICATION))) |
1674 | iwl_mvm_rx_queue_notif(mvm, rxb, queue); | 1677 | iwl_mvm_rx_queue_notif(mvm, rxb, queue); |
1675 | else if (likely(pkt->hdr.cmd == REPLY_RX_MPDU_CMD)) | 1678 | else if (likely(cmd == WIDE_ID(LEGACY_GROUP, REPLY_RX_MPDU_CMD))) |
1676 | iwl_mvm_rx_mpdu_mq(mvm, napi, rxb, queue); | 1679 | iwl_mvm_rx_mpdu_mq(mvm, napi, rxb, queue); |
1677 | } | 1680 | } |
1678 | 1681 | ||