ath11k: Update tx descriptor search index properly
PATCH 1/1 ath11k: Update tx descriptor search index properly
Tx descriptor search index field should be updated with hw peer id and not by AST Hash. Incorrect search index causes throughput degradation in all the platforms. so updated the search index field with hw peer id, which is a common change applicable for all the platforms.
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01492-QCAHKSWPL_SILICONZ-1
--- drivers/net/wireless/ath/ath11k/core.h | 1 + drivers/net/wireless/ath/ath11k/dp_rx.c | 8 ++++++-- drivers/net/wireless/ath/ath11k/dp_tx.c | 1 + drivers/net/wireless/ath/ath11k/hal_tx.c | 2 ++ drivers/net/wireless/ath/ath11k/hal_tx.h | 1 + drivers/net/wireless/ath/ath11k/peer.c | 9 +++++++-- drivers/net/wireless/ath/ath11k/peer.h | 3 ++- 7 files changed, 20 insertions(+), 5 deletions(-)
drivers/net/wireless/ath/ath11k/core.h +1 -0
@@ -200,6 +200,7 @@ struct ath11k_vif {u32 beacon_interval;u32 dtim_period;u16 ast_hash; +u16 ast_idx;u16 tcl_metadata;u8 hal_addr_search_flags;u8 search_type;
drivers/net/wireless/ath/ath11k/dp_rx.c +6 -2
@@ -1652,6 +1652,7 @@ void ath11k_dp_htt_htc_t2h_msg_handler(struct ath11k_base *ab,u8 mac_addr[ETH_ALEN ];u16 peer_mac_h16;u16 ast_hash; +u16 hw_peer_id;ath11k_dbg (ab,ATH11K_DBG_DP_HTT ,"dp_htt rx msg type :0x%0x\n" , type);
@@ -1672,7 +1673,7 @@ void ath11k_dp_htt_htc_t2h_msg_handler(struct ath11k_base *ab, resp->peer_map_ev.info1);ath11k_dp_get_mac_addr (resp->peer_map_ev.mac_addr_l32, peer_mac_h16, mac_addr); -ath11k_peer_map_event (ab, vdev_id, peer_id, mac_addr,0 ); +ath11k_peer_map_event (ab, vdev_id, peer_id, mac_addr,0 ,0 );break ;case HTT_T2H_MSG_TYPE_PEER_MAP2 : vdev_id = FIELD_GET(HTT_T2H_PEER_MAP_INFO_VDEV_ID,
@@ -1685,7 +1686,10 @@ void ath11k_dp_htt_htc_t2h_msg_handler(struct ath11k_base *ab, peer_mac_h16, mac_addr); ast_hash =FIELD_GET (HTT_T2H_PEER_MAP_INFO2_AST_HASH_VAL , resp->peer_map_ev.info2); -ath11k_peer_map_event (ab, vdev_id, peer_id, mac_addr, ast_hash); + hw_peer_id =FIELD_GET (HTT_T2H_PEER_MAP_INFO1_HW_PEER_ID , + resp->peer_map_ev.info1); +ath11k_peer_map_event (ab, vdev_id, peer_id, mac_addr, ast_hash, + hw_peer_id);break ;case HTT_T2H_MSG_TYPE_PEER_UNMAP :case HTT_T2H_MSG_TYPE_PEER_UNMAP2 :
drivers/net/wireless/ath/ath11k/dp_tx.c +1 -0
@@ -165,6 +165,7 @@ int ath11k_dp_tx(struct ath11k *ar, struct ath11k_vif *arvif, ti.pkt_offset =0 ; ti.lmac_id = ar->lmac_id; ti.bss_ast_hash = arvif->ast_hash; + ti.bss_ast_idx = arvif->ast_idx; ti.dscp_tid_tbl_idx =0 ; if (skb->ip_summed == CHECKSUM_PARTIAL &&
drivers/net/wireless/ath/ath11k/hal_tx.c +2 -0
@@ -71,6 +71,8 @@ void ath11k_hal_tx_cmd_desc_setup(struct ath11k_base *ab, void *cmd, tcl_cmd->info3 =FIELD_PREP (HAL_TCL_DATA_CMD_INFO3_DSCP_TID_TABLE_IDX , ti->dscp_tid_tbl_idx) |FIELD_PREP (HAL_TCL_DATA_CMD_INFO3_SEARCH_INDEX , + ti->bss_ast_idx) | +FIELD_PREP (HAL_TCL_DATA_CMD_INFO3_CACHE_SET_NUM , ti->bss_ast_hash); tcl_cmd->info4 =0 ; }
drivers/net/wireless/ath/ath11k/hal_tx.h +1 -0
@@ -29,6 +29,7 @@ struct hal_tx_info {u32 flags1;/* %HAL_TCL_DATA_CMD_INFO2_ */ u16 addr_search_flags;/* %HAL_TCL_DATA_CMD_INFO0_ADDR(X/Y)_ */ u16 bss_ast_hash; +u16 bss_ast_idx;u8 tid;u8 search_type;/* %HAL_TX_ADDR_SEARCH_ */ u8 lmac_id;
drivers/net/wireless/ath/ath11k/peer.c +7 -2
@@ -118,7 +118,7 @@ void ath11k_peer_unmap_event(struct ath11k_base *ab, u16 peer_id) }void ath11k_peer_map_event (struct ath11k_base *ab,u8 vdev_id,u16 peer_id, -u8 *mac_addr,u16 ast_hash) +u8 *mac_addr,u16 ast_hash,u16 hw_peer_id) {struct ath11k_peer *peer;
@@ -132,6 +132,7 @@ void ath11k_peer_map_event(struct ath11k_base *ab, u8 vdev_id, u16 peer_id, peer->vdev_id = vdev_id; peer->peer_id = peer_id; peer->ast_hash = ast_hash; + peer->hw_peer_id = hw_peer_id;ether_addr_copy (peer->addr, mac_addr);list_add (&peer->list, &ab->peers);wake_up (&ab->peer_mapping_wq);
@@ -309,7 +310,11 @@ int ath11k_peer_create(struct ath11k *ar, struct ath11k_vif *arvif, peer->pdev_idx = ar->pdev_idx; peer->sta = sta; - arvif->ast_hash = peer->ast_hash; + +if (arvif->vif->type ==NL80211_IFTYPE_STATION ) { + arvif->ast_hash = peer->ast_hash; + arvif->ast_idx = peer->hw_peer_id; + } peer->sec_type =HAL_ENCRYPT_TYPE_OPEN ; peer->sec_type_grp =HAL_ENCRYPT_TYPE_OPEN ;
drivers/net/wireless/ath/ath11k/peer.h +2 -1
@@ -14,6 +14,7 @@ struct ath11k_peer {int peer_id;u16 ast_hash;u8 pdev_idx; +u16 hw_peer_id;/* protected by ab->data_lock */ struct ieee80211_key_conf *keys[WMI_MAX_KEY_INDEX +1 ];
@@ -31,7 +32,7 @@ struct ath11k_peer {void ath11k_peer_unmap_event (struct ath11k_base *ab,u16 peer_id);void ath11k_peer_map_event (struct ath11k_base *ab,u8 vdev_id,u16 peer_id, -u8 *mac_addr,u16 ast_hash); +u8 *mac_addr,u16 ast_hash,u16 hw_peer_id);struct ath11k_peer *ath11k_peer_find (struct ath11k_base *ab,int vdev_id,const u8 *addr); struct ath11k_peer *ath11k_peer_find_by_addr(struct ath11k_base *ab,
Signature · 1 line
2.7.4
Quoted 13 lines · Karthikeyan Periyasamy
Tx descriptor search index field should be updated with hw peer id and not by AST Hash. Incorrect search index causes throughput degradation in all the platforms. so updated the search index field with hw peer id, which is a common change applicable for all the platforms.
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01492-QCAHKSWPL_SILICONZ-1
drivers/net/wireless/ath/ath11k/peer.c +0
-0
drivers/net/wireless/ath/ath11k/peer.c int ath11k_peer_create(struct ath11k *ar, struct ath11k_vif *arvif, · line 317
Quoted 9 lines
drivers/net/wireless/ath/ath11k/peer.c +5
-1@@ -309,7 +310,11 @@ int ath11k_peer_create(struct ath11k *ar, struct ath11k_vif *arvif, peer->pdev_idx = ar->pdev_idx; peer->sta = sta; - arvif->ast_hash = peer->ast_hash; + +if (arvif->vif->type ==NL80211_IFTYPE_STATION ) { + arvif->ast_hash = peer->ast_hash; + arvif->ast_idx = peer->hw_peer_id; + }
How about non STATION type?
Thanks,
Peter
Signature · 3 lines
ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Quoted 13 lines · Peter Oh
Quoted 12 lines · Karthikeyan Periyasamy
Tx descriptor search index field should be updated with hw peer id and not by AST Hash. Incorrect search index causes throughput degradation in all the platforms. so updated the search index field with hw peer id, which is a common change applicable for all the platforms.
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01492-QCAHKSWPL_SILICONZ-1
drivers/net/wireless/ath/ath11k/peer.c +0
-0
Quoted 13 lines
drivers/net/wireless/ath/ath11k/peer.c int ath11k_peer_create(struct ath11k *ar, struct · line 317
Quoted 10 lines
drivers/net/wireless/ath/ath11k/peer.c +5
-1@@ -309,7 +310,11 @@ int ath11k_peer_create(struct ath11k *ar, struct ath11k_vif *arvif, peer->pdev_idx = ar->pdev_idx; peer->sta = sta; - arvif->ast_hash = peer->ast_hash; + +if (arvif->vif->type ==NL80211_IFTYPE_STATION ) { + arvif->ast_hash = peer->ast_hash; + arvif->ast_idx = peer->hw_peer_id; + }How about non STATION type?
no need of configuring the ast_idx, ast_hash field for non station type. Its recommended by HW/FW team.
Thanks,
Karthikeyan P
Signature · 3 lines
ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Quoted 28 lines · Karthikeyan periyasamy
Quoted 13 lines · Peter Oh
Quoted 12 lines · Karthikeyan Periyasamy
Tx descriptor search index field should be updated with hw peer id and not by AST Hash. Incorrect search index causes throughput degradation in all the platforms. so updated the search index field with hw peer id, which is a common change applicable for all the platforms.
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01492-QCAHKSWPL_SILICONZ-1
drivers/net/wireless/ath/ath11k/peer.c +0
-0Quoted 13 lines
drivers/net/wireless/ath/ath11k/peer.c int ath11k_peer_create(struct ath11k *ar, · line 317
Quoted 10 lines
drivers/net/wireless/ath/ath11k/peer.c +5
-1@@ -309,7 +310,11 @@ int ath11k_peer_create(struct ath11k *ar,struct ath11k_vif *arvif, peer->pdev_idx = ar->pdev_idx; peer->sta = sta; - arvif->ast_hash = peer->ast_hash; + + if (arvif->vif->type == NL80211_IFTYPE_STATION) { + arvif->ast_hash = peer->ast_hash; + arvif->ast_idx = peer->hw_peer_id; + }How about non STATION type?
Quoted 2 lines
no need of configuring the
ast_idx,ast_hashfield for non station type. Its recommended by HW/FW team.
Can you add this comment in commit message?
Also could you include the answer to "what conditions you observed the throughput degradation?" in commit message too?
Thanks,
Peter
Signature · 3 lines
ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Quoted 29 lines · Peter Oh
Quoted 28 lines · Karthikeyan periyasamy
Quoted 26 lines · Peter Oh
Quoted 13 lines · Karthikeyan Periyasamy
Tx descriptor search index field should be updated with hw peer id and not by AST Hash. Incorrect search index causes throughput degradation in all the platforms. so updated the search index field with hw peer id, which is a common change applicable for all the platforms.
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01492-QCAHKSWPL_SILICONZ-1
drivers/net/wireless/ath/ath11k/peer.c +0
-0drivers/net/wireless/ath/ath11k/peer.c int ath11k_peer_create(struct ath11k *ar, · line 317
Quoted 9 lines
drivers/net/wireless/ath/ath11k/peer.c +5
-1@@ -309,7 +310,11 @@ int ath11k_peer_create(struct ath11k *ar,struct ath11k_vif *arvif, peer->pdev_idx = ar->pdev_idx; peer->sta = sta; - arvif->ast_hash = peer->ast_hash; + + if (arvif->vif->type == NL80211_IFTYPE_STATION) { + arvif->ast_hash = peer->ast_hash; + arvif->ast_idx = peer->hw_peer_id; + }How about non STATION type?
Quoted 4 lines
Quoted 2 lines
no need of configuring the
ast_idx,ast_hashfield for non station type. Its recommended by HW/FW team.Can you add this comment in commit message?
sure
Quoted 2 lines
Also could you include the answer to "what conditions you observed the throughput degradation?" in commit message too?
In all the scenario will see degradation. Its a general improvement.
Regards,
Karthikeyan P
Signature · 3 lines
ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Quoted 35 lines · Karthikeyan periyasamy
Quoted 29 lines · Peter Oh
Quoted 28 lines · Karthikeyan periyasamy
Quoted 26 lines · Peter Oh
Quoted 13 lines · Karthikeyan Periyasamy
Tx descriptor search index field should be updated with hw peer id and not by AST Hash. Incorrect search index causes throughput degradation in all the platforms. so updated the search index field with hw peer id, which is a common change applicable for all the platforms.
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01492-QCAHKSWPL_SILICONZ-1
drivers/net/wireless/ath/ath11k/peer.c +0
-0drivers/net/wireless/ath/ath11k/peer.c int ath11k_peer_create(struct ath11k *ar, · line 317
Quoted 9 lines
drivers/net/wireless/ath/ath11k/peer.c +5
-1@@ -309,7 +310,11 @@ int ath11k_peer_create(struct ath11k *ar,struct ath11k_vif *arvif, peer->pdev_idx = ar->pdev_idx; peer->sta = sta; - arvif->ast_hash = peer->ast_hash; + + if (arvif->vif->type == NL80211_IFTYPE_STATION) { + arvif->ast_hash = peer->ast_hash; + arvif->ast_idx = peer->hw_peer_id; + }How about non STATION type?
Quoted 4 lines
Quoted 2 lines
no need of configuring the
ast_idx,ast_hashfield for non station type. Its recommended by HW/FW team.Can you add this comment in commit message?
Quoted 7 lines
sure
Quoted 2 lines
Also could you include the answer to "what conditions you observed the throughput degradation?" in commit message too?
In all the scenario will see degradation. Its a general improvement.
It sounds good and it will better if you share the number before and after the patch.
Thanks,
Peter
Signature · 3 lines
ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Quoted 38 lines · Peter Oh
Quoted 37 lines · Karthikeyan periyasamy
Quoted 29 lines · Peter Oh
Quoted 28 lines · Karthikeyan periyasamy
Quoted 26 lines · Peter Oh
Quoted 13 lines · Karthikeyan Periyasamy
Tx descriptor search index field should be updated with hw peer id and not by AST Hash. Incorrect search index causes throughput degradation in all the platforms. so updated the search index field with hw peer id, which is a common change applicable for all the platforms.
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01492-QCAHKSWPL_SILICONZ-1
drivers/net/wireless/ath/ath11k/peer.c +0
-0drivers/net/wireless/ath/ath11k/peer.c int ath11k_peer_create(struct ath11k *ar, · line 317
Quoted 9 lines
drivers/net/wireless/ath/ath11k/peer.c +5
-1@@ -309,7 +310,11 @@ int ath11k_peer_create(struct ath11k *ar,struct ath11k_vif *arvif, peer->pdev_idx = ar->pdev_idx; peer->sta = sta; - arvif->ast_hash = peer->ast_hash; + + if (arvif->vif->type == NL80211_IFTYPE_STATION) { + arvif->ast_hash = peer->ast_hash; + arvif->ast_idx = peer->hw_peer_id; + }How about non STATION type?
Quoted 4 lines
Quoted 2 lines
no need of configuring the
ast_idx,ast_hashfield for non station type. Its recommended by HW/FW team.Can you add this comment in commit message?
sure
Quoted 7 lines
Quoted 5 lines
Quoted 2 lines
Also could you include the answer to "what conditions you observed the throughput degradation?" in commit message too?
In all the scenario will see degradation. Its a general improvement.
It sounds good and it will better if you share the number before and after the patch.
I have seen 10% increase in WDS scenario.
Thanks,
Karthikeyan P
Signature · 3 lines
ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Quoted 44 lines · Karthikeyan periyasamy
Quoted 43 lines · Peter Oh
Quoted 42 lines · Karthikeyan periyasamy
Quoted 29 lines · Peter Oh
Quoted 28 lines · Karthikeyan periyasamy
Quoted 26 lines · Peter Oh
Quoted 13 lines · Karthikeyan Periyasamy
Tx descriptor search index field should be updated with hw peer id and not by AST Hash. Incorrect search index causes throughput degradation in all the platforms. so updated the search index field with hw peer id, which is a common change applicable for all the platforms.
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01492-QCAHKSWPL_SILICONZ-1
drivers/net/wireless/ath/ath11k/peer.c +0
-0drivers/net/wireless/ath/ath11k/peer.c int ath11k_peer_create(struct ath11k *ar, · line 317
Quoted 9 lines
drivers/net/wireless/ath/ath11k/peer.c +5
-1@@ -309,7 +310,11 @@ int ath11k_peer_create(struct ath11k *ar,struct ath11k_vif *arvif, peer->pdev_idx = ar->pdev_idx; peer->sta = sta; - arvif->ast_hash = peer->ast_hash; + + if (arvif->vif->type == NL80211_IFTYPE_STATION) { + arvif->ast_hash = peer->ast_hash; + arvif->ast_idx = peer->hw_peer_id; + }How about non STATION type?
Quoted 4 lines
Quoted 2 lines
no need of configuring the
ast_idx,ast_hashfield for non station type. Its recommended by HW/FW team.Can you add this comment in commit message?
sure
Quoted 2 lines
Also could you include the answer to "what conditions you observed the throughput degradation?" in commit message too?
In all the scenario will see degradation. Its a general improvement.
Quoted 7 lines
Quoted 2 lines
It sounds good and it will better if you share the number before and after the patch.
I have seen 10% increase in WDS scenario.
Thanks,
Karthikeyan P
Thank you for the sharing.
BTW, all such information should go to commit message.
Peter
Signature · 3 lines
ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Quoted 50 lines · Peter Oh
Quoted 49 lines · Karthikeyan periyasamy
Quoted 38 lines · Peter Oh
Quoted 37 lines · Karthikeyan periyasamy
Quoted 29 lines · Peter Oh
Quoted 28 lines · Karthikeyan periyasamy
Quoted 26 lines · Peter Oh
Quoted 13 lines · Karthikeyan Periyasamy
Tx descriptor search index field should be updated with hw peer id and not by AST Hash. Incorrect search index causes throughput degradation in all the platforms. so updated the search index field with hw peer id, which is a common change applicable for all the platforms.
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01492-QCAHKSWPL_SILICONZ-1
drivers/net/wireless/ath/ath11k/peer.c +0
-0drivers/net/wireless/ath/ath11k/peer.c int ath11k_peer_create(struct ath11k *ar, · line 317
Quoted 9 lines
drivers/net/wireless/ath/ath11k/peer.c +5
-1@@ -309,7 +310,11 @@ int ath11k_peer_create(struct ath11k *ar,struct ath11k_vif *arvif, peer->pdev_idx = ar->pdev_idx; peer->sta = sta; - arvif->ast_hash = peer->ast_hash; + + if (arvif->vif->type == NL80211_IFTYPE_STATION) { + arvif->ast_hash = peer->ast_hash; + arvif->ast_idx = peer->hw_peer_id; + }How about non STATION type?
Quoted 4 lines
Quoted 2 lines
no need of configuring the
ast_idx,ast_hashfield for non station type. Its recommended by HW/FW team.Can you add this comment in commit message?
sure
Quoted 7 lines
Quoted 5 lines
Quoted 2 lines
Also could you include the answer to "what conditions you observed the throughput degradation?" in commit message too?
In all the scenario will see degradation. Its a general improvement.
It sounds good and it will better if you share the number before and after the patch.
I have seen 10% increase in WDS scenario.
Quoted 8 lines
Quoted 2 lines
Thanks,
Karthikeyan PThank you for the sharing.
BTW, all such information should go to commit message.
Peter
I update in the commit message
Thanks,
Karthikeyan P
Signature · 3 lines
ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Quoted 4 lines · Karthikeyan Periyasamy
Tx descriptor search index field should be updated with hw peer id and not by AST Hash. Incorrect search index causes throughput degradation in all the platforms. so updated the search index field with hw peer id, which is a common change applicable for all the platforms.
Could you be more details under what conditions you observed the throughput degradation?
Thanks,
Peter
Signature · 3 lines
ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Quoted 9 lines · Karthikeyan Periyasamy
Tx descriptor search index field should be updated with hw peer id and not by AST Hash. Incorrect search index causes throughput degradation in all the platforms. so updated the search index field with hw peer id, which is a common change applicable for all the platforms.
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01492-QCAHKSWPL_SILICONZ-1
Signed-off-by Karthikeyan Periyasamy <[email protected]>Signed-off-by Kalle Valo <[email protected]>
Please reply to Peter's questions.
Signature · 9 lines
https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches -- ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Quoted 9 lines · Karthikeyan Periyasamy
Tx descriptor search index field should be updated with hw peer id and not by AST Hash. Incorrect search index causes throughput degradation in all the platforms. so updated the search index field with hw peer id, which is a common change applicable for all the platforms.
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01492-QCAHKSWPL_SILICONZ-1
Signed-off-by Karthikeyan Periyasamy <[email protected]>Signed-off-by Kalle Valo <[email protected]>
Please reply to Peter's questions.
Signature · 3 lines
https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches