qcacmn: Add WAR to get the vdev in invalid peer path
For QCN9224 splitphy mode do not rely on rx_desc_pool_id to get to the VDEV as desc pool is common across PDEVs Change-Id: I2552878bd56696a8df463b35e2b273ed4e591050 CRs-Fixed: 3220690
这个提交包含在:

提交者
Madan Koyyalamudi

父节点
b4db8c7ec0
当前提交
b34fe34b48
@@ -1186,6 +1186,7 @@ uint8_t dp_rx_process_invalid_peer(struct dp_soc *soc, qdf_nbuf_t mpdu,
|
|||||||
qdf_nbuf_t curr_nbuf, next_nbuf;
|
qdf_nbuf_t curr_nbuf, next_nbuf;
|
||||||
uint8_t *rx_tlv_hdr = qdf_nbuf_data(mpdu);
|
uint8_t *rx_tlv_hdr = qdf_nbuf_data(mpdu);
|
||||||
uint8_t *rx_pkt_hdr = NULL;
|
uint8_t *rx_pkt_hdr = NULL;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
if (!HAL_IS_DECAP_FORMAT_RAW(soc->hal_soc, rx_tlv_hdr)) {
|
if (!HAL_IS_DECAP_FORMAT_RAW(soc->hal_soc, rx_tlv_hdr)) {
|
||||||
dp_rx_debug("%pK: Drop decapped frames", soc);
|
dp_rx_debug("%pK: Drop decapped frames", soc);
|
||||||
@@ -1206,21 +1207,46 @@ uint8_t dp_rx_process_invalid_peer(struct dp_soc *soc, qdf_nbuf_t mpdu,
|
|||||||
goto free;
|
goto free;
|
||||||
}
|
}
|
||||||
|
|
||||||
pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
|
/* In DMAC case the rx_desc_pools are common across PDEVs
|
||||||
|
* so PDEV cannot be derived from the pool_id.
|
||||||
|
*
|
||||||
|
* link_id need to derived from the TLV tag word which is
|
||||||
|
* disabled by default. For now adding a WAR to get vdev
|
||||||
|
* with brute force this need to fixed with word based subscription
|
||||||
|
* support is added by enabling TLV tag word
|
||||||
|
*/
|
||||||
|
if (soc->features.dmac_cmn_src_rxbuf_ring_enabled) {
|
||||||
|
for (i = 0; i < MAX_PDEV_CNT; i++) {
|
||||||
|
pdev = soc->pdev_list[i];
|
||||||
|
|
||||||
if (!pdev || qdf_unlikely(pdev->is_pdev_down)) {
|
if (!pdev || qdf_unlikely(pdev->is_pdev_down))
|
||||||
dp_rx_err("%pK: PDEV %s", soc, !pdev ? "not found" : "down");
|
continue;
|
||||||
goto free;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dp_monitor_filter_neighbour_peer(pdev, rx_pkt_hdr) ==
|
TAILQ_FOREACH(vdev, &pdev->vdev_list, vdev_list_elem) {
|
||||||
QDF_STATUS_SUCCESS)
|
if (qdf_mem_cmp(wh->i_addr1, vdev->mac_addr.raw,
|
||||||
return 0;
|
QDF_MAC_ADDR_SIZE) == 0) {
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
|
||||||
|
|
||||||
TAILQ_FOREACH(vdev, &pdev->vdev_list, vdev_list_elem) {
|
if (!pdev || qdf_unlikely(pdev->is_pdev_down)) {
|
||||||
if (qdf_mem_cmp(wh->i_addr1, vdev->mac_addr.raw,
|
dp_rx_err("%pK: PDEV %s",
|
||||||
QDF_MAC_ADDR_SIZE) == 0) {
|
soc, !pdev ? "not found" : "down");
|
||||||
goto out;
|
goto free;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dp_monitor_filter_neighbour_peer(pdev, rx_pkt_hdr) ==
|
||||||
|
QDF_STATUS_SUCCESS)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
TAILQ_FOREACH(vdev, &pdev->vdev_list, vdev_list_elem) {
|
||||||
|
if (qdf_mem_cmp(wh->i_addr1, vdev->mac_addr.raw,
|
||||||
|
QDF_MAC_ADDR_SIZE) == 0) {
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1228,7 +1254,6 @@ uint8_t dp_rx_process_invalid_peer(struct dp_soc *soc, qdf_nbuf_t mpdu,
|
|||||||
dp_rx_err("%pK: VDEV not found", soc);
|
dp_rx_err("%pK: VDEV not found", soc);
|
||||||
goto free;
|
goto free;
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
msg.wh = wh;
|
msg.wh = wh;
|
||||||
qdf_nbuf_pull_head(mpdu, soc->rx_pkt_tlv_size);
|
qdf_nbuf_pull_head(mpdu, soc->rx_pkt_tlv_size);
|
||||||
|
在新工单中引用
屏蔽一个用户