mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 21:54:34 -04:00
qcacld-3.0: Use reo dst indication in CMEM based HW FT entry
Currently we configure the REO ID in the HW FST entry, which is later used by HW to route the packets matching this particular flow. Such a kind of configuration can lead to incorrect routing of packets incase the RX path mapping is changed (eg when IPA is enabled). Hence to fix this issue, use the reo destination indication which is received in the first packet of the new flow in the HW FST entry. Change-Id: Ide230dcfb07862b3921aeb02d83ad7c30cb284c2 CRs-Fixed: 2803828
This commit is contained in:
parent
d84194cd84
commit
64522cfa38
2 changed files with 13 additions and 4 deletions
|
|
@ -286,8 +286,7 @@ dp_rx_fisa_setup_cmem_fse(struct dp_rx_fst *fisa_hdl, uint32_t hashed_flow_idx,
|
|||
fisa_hdl->base)[hashed_flow_idx]);
|
||||
sw_ft_entry->metadata = ++fisa_hdl->meta_counter;
|
||||
|
||||
/* REO destination index starts from 1 */
|
||||
flow.reo_destination_indication = flow_steer_info + 1;
|
||||
flow.reo_destination_indication = flow_steer_info;
|
||||
flow.fse_metadata = sw_ft_entry->metadata;
|
||||
flow.tuple_info.dest_ip_127_96 = rx_flow_info->dest_ip_127_96;
|
||||
flow.tuple_info.dest_ip_95_64 = rx_flow_info->dest_ip_95_64;
|
||||
|
|
@ -552,10 +551,12 @@ dp_fisa_rx_delete_flow(struct dp_rx_fst *fisa_hdl,
|
|||
/* Add HW FT entry */
|
||||
sw_ft_entry->cmem_offset = dp_rx_fisa_setup_cmem_fse(
|
||||
fisa_hdl, hashed_flow_idx,
|
||||
&elem->flow_tuple_info, elem->reo_id);
|
||||
&elem->flow_tuple_info,
|
||||
elem->reo_dest_indication);
|
||||
|
||||
sw_ft_entry->is_populated = true;
|
||||
sw_ft_entry->napi_id = elem->reo_id;
|
||||
sw_ft_entry->reo_dest_indication = elem->reo_dest_indication;
|
||||
qdf_mem_copy(&sw_ft_entry->rx_flow_tuple_info, &elem->flow_tuple_info,
|
||||
sizeof(struct cdp_rx_flow_tuple_info));
|
||||
|
||||
|
|
@ -613,6 +614,7 @@ static void dp_fisa_rx_fst_update(struct dp_rx_fst *fisa_hdl,
|
|||
uint32_t lru_ft_entry_time = 0xffffffff;
|
||||
uint32_t lru_ft_entry_idx = 0;
|
||||
uint32_t timestamp;
|
||||
uint32_t reo_dest_indication;
|
||||
|
||||
/* Get the hash from TLV
|
||||
* FSE FT Toeplitz hash is same Common parser hash available in TLV
|
||||
|
|
@ -623,6 +625,7 @@ static void dp_fisa_rx_fst_update(struct dp_rx_fst *fisa_hdl,
|
|||
hashed_flow_idx = flow_hash & fisa_hdl->hash_mask;
|
||||
max_skid_length = fisa_hdl->max_skid_length;
|
||||
rx_flow_tuple_info = &elem->flow_tuple_info;
|
||||
reo_dest_indication = elem->reo_dest_indication;
|
||||
|
||||
dp_fisa_debug("flow_hash 0x%x hashed_flow_idx 0x%x", flow_hash,
|
||||
hashed_flow_idx);
|
||||
|
|
@ -643,9 +646,10 @@ static void dp_fisa_rx_fst_update(struct dp_rx_fst *fisa_hdl,
|
|||
dp_rx_fisa_setup_cmem_fse(fisa_hdl,
|
||||
hashed_flow_idx,
|
||||
rx_flow_tuple_info,
|
||||
elem->reo_id);
|
||||
reo_dest_indication);
|
||||
sw_ft_entry->is_populated = true;
|
||||
sw_ft_entry->napi_id = elem->reo_id;
|
||||
sw_ft_entry->reo_dest_indication = reo_dest_indication;
|
||||
qdf_mem_copy(&sw_ft_entry->rx_flow_tuple_info,
|
||||
rx_flow_tuple_info,
|
||||
sizeof(struct cdp_rx_flow_tuple_info));
|
||||
|
|
@ -787,6 +791,7 @@ dp_fisa_rx_queue_fst_update_work(struct dp_rx_fst *fisa_hdl, uint32_t flow_idx,
|
|||
struct dp_fisa_rx_fst_update_elem *elem;
|
||||
struct dp_fisa_rx_sw_ft *sw_ft_entry;
|
||||
uint32_t hashed_flow_idx;
|
||||
uint32_t reo_dest_indication;
|
||||
bool found;
|
||||
|
||||
is_flow_tcp = HAL_RX_TLV_GET_TCP_PROTO(rx_tlv_hdr);
|
||||
|
|
@ -798,6 +803,8 @@ dp_fisa_rx_queue_fst_update_work(struct dp_rx_fst *fisa_hdl, uint32_t flow_idx,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
hal_rx_msdu_get_reo_destination_indication(hal_soc_hdl, rx_tlv_hdr,
|
||||
&reo_dest_indication);
|
||||
qdf_spin_lock_bh(&fisa_hdl->dp_rx_fst_lock);
|
||||
found = dp_fisa_rx_is_fst_work_queued(fisa_hdl, flow_idx);
|
||||
qdf_spin_unlock_bh(&fisa_hdl->dp_rx_fst_lock);
|
||||
|
|
@ -827,6 +834,7 @@ dp_fisa_rx_queue_fst_update_work(struct dp_rx_fst *fisa_hdl, uint32_t flow_idx,
|
|||
elem->is_tcp_flow = is_flow_tcp;
|
||||
elem->is_udp_flow = is_flow_udp;
|
||||
elem->reo_id = QDF_NBUF_CB_RX_CTX_ID(nbuf);
|
||||
elem->reo_dest_indication = reo_dest_indication;
|
||||
elem->vdev = vdev;
|
||||
|
||||
qdf_spin_lock_bh(&fisa_hdl->dp_rx_fst_lock);
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ struct dp_fisa_rx_fst_update_elem {
|
|||
struct cdp_rx_flow_tuple_info flow_tuple_info;
|
||||
struct dp_vdev *vdev;
|
||||
uint32_t flow_idx;
|
||||
uint32_t reo_dest_indication;
|
||||
bool is_tcp_flow;
|
||||
bool is_udp_flow;
|
||||
u8 reo_id;
|
||||
|
|
|
|||
Loading…
Reference in a new issue