|
@@ -1,6 +1,6 @@
|
|
|
/*
|
|
|
* Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
|
|
|
- * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
|
+ * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
|
*
|
|
|
* Permission to use, copy, modify, and/or distribute this software for any
|
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
@@ -744,10 +744,10 @@ dp_fisa_rx_delete_flow(struct dp_rx_fst *fisa_hdl,
|
|
|
sw_ft_entry->is_flow_tcp = elem->is_tcp_flow;
|
|
|
sw_ft_entry->is_flow_udp = elem->is_udp_flow;
|
|
|
|
|
|
- dp_rx_fisa_release_ft_lock(fisa_hdl, reo_id);
|
|
|
-
|
|
|
fisa_hdl->add_flow_count++;
|
|
|
fisa_hdl->del_flow_count++;
|
|
|
+
|
|
|
+ dp_rx_fisa_release_ft_lock(fisa_hdl, reo_id);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1693,7 +1693,6 @@ static int dp_add_nbuf_to_fisa_flow(struct dp_rx_fst *fisa_hdl,
|
|
|
hal_soc_handle_t hal_soc_hdl = fisa_hdl->soc_hdl->hal_soc;
|
|
|
uint32_t hal_aggr_count;
|
|
|
uint8_t napi_id = QDF_NBUF_CB_RX_CTX_ID(nbuf);
|
|
|
- uint8_t reo_id = fisa_flow->napi_id;
|
|
|
uint32_t fse_metadata;
|
|
|
|
|
|
dump_tlvs(hal_soc_hdl, rx_tlv_hdr, QDF_TRACE_LEVEL_INFO_HIGH);
|
|
@@ -1701,6 +1700,7 @@ static int dp_add_nbuf_to_fisa_flow(struct dp_rx_fst *fisa_hdl,
|
|
|
nbuf, qdf_nbuf_next(nbuf), qdf_nbuf_data(nbuf), nbuf->len,
|
|
|
nbuf->data_len);
|
|
|
|
|
|
+ dp_rx_fisa_acquire_ft_lock(fisa_hdl, napi_id);
|
|
|
/* Packets of the flow are arriving on a different REO than
|
|
|
* the one configured.
|
|
|
*/
|
|
@@ -1708,13 +1708,16 @@ static int dp_add_nbuf_to_fisa_flow(struct dp_rx_fst *fisa_hdl,
|
|
|
fse_metadata =
|
|
|
hal_rx_msdu_fse_metadata_get(hal_soc_hdl, rx_tlv_hdr);
|
|
|
if (fisa_hdl->del_flow_count &&
|
|
|
- fse_metadata != fisa_flow->metadata)
|
|
|
+ fse_metadata != fisa_flow->metadata) {
|
|
|
+ dp_rx_fisa_release_ft_lock(fisa_hdl, napi_id);
|
|
|
return FISA_AGGR_NOT_ELIGIBLE;
|
|
|
+ }
|
|
|
|
|
|
dp_err("REO id mismatch flow: %pK napi_id: %u nbuf: %pK reo_id: %u",
|
|
|
fisa_flow, fisa_flow->napi_id, nbuf, napi_id);
|
|
|
DP_STATS_INC(fisa_hdl, reo_mismatch, 1);
|
|
|
QDF_BUG(0);
|
|
|
+ dp_rx_fisa_release_ft_lock(fisa_hdl, napi_id);
|
|
|
return FISA_AGGR_NOT_ELIGIBLE;
|
|
|
}
|
|
|
|
|
@@ -1726,8 +1729,6 @@ static int dp_add_nbuf_to_fisa_flow(struct dp_rx_fst *fisa_hdl,
|
|
|
hal_aggr_count = hal_rx_get_fisa_flow_agg_count(hal_soc_hdl,
|
|
|
rx_tlv_hdr);
|
|
|
|
|
|
- dp_rx_fisa_acquire_ft_lock(fisa_hdl, reo_id);
|
|
|
-
|
|
|
if (!flow_aggr_cont) {
|
|
|
/* Start of new aggregation for the flow
|
|
|
* Flush previous aggregates for this flow
|
|
@@ -1833,14 +1834,14 @@ static int dp_add_nbuf_to_fisa_flow(struct dp_rx_fst *fisa_hdl,
|
|
|
dp_rx_fisa_aggr_tcp(fisa_hdl, fisa_flow, nbuf);
|
|
|
}
|
|
|
|
|
|
- dp_rx_fisa_release_ft_lock(fisa_hdl, reo_id);
|
|
|
+ dp_rx_fisa_release_ft_lock(fisa_hdl, napi_id);
|
|
|
fisa_flow->last_accessed_ts = qdf_get_log_timestamp();
|
|
|
|
|
|
return FISA_AGGR_DONE;
|
|
|
|
|
|
invalid_fisa_assist:
|
|
|
/* Not eligible aggregation deliver frame without FISA */
|
|
|
- dp_rx_fisa_release_ft_lock(fisa_hdl, reo_id);
|
|
|
+ dp_rx_fisa_release_ft_lock(fisa_hdl, napi_id);
|
|
|
return FISA_AGGR_NOT_ELIGIBLE;
|
|
|
}
|
|
|
|