qcacmn: Fix rx packet queue processsing

- Ensure the head and tail pointers are reset after
processing the packets on each vdev
- Ensure the network buffer is null terminated when
processing the null queue

Change-Id: I7bfab46b7fc6054e782f7f1fc09dd56a58e46a4d
CRs-Fixed: 2001835
This commit is contained in:
Dhanashri Atre 2017-02-02 16:28:12 -08:00 • committed by qcabuildsw
commit bda02dc9c2
2 changed files with 14 additions and 4 deletions

View file

@ -194,8 +194,6 @@ dp_rx_process(struct dp_soc *soc, void *hal_ring, uint32_t quota)
void *ring_desc;
struct dp_rx_desc *rx_desc;
qdf_nbuf_t nbuf;
qdf_nbuf_t deliver_list_head = NULL;
qdf_nbuf_t deliver_list_tail = NULL;
union dp_rx_desc_list_elem_t *head = NULL;
union dp_rx_desc_list_elem_t *tail = NULL;
uint32_t rx_bufs_used = 0, rx_buf_cookie, l2_hdr_offset;
@ -311,6 +309,8 @@ done:
}
TAILQ_FOREACH(vdev, &pdev->vdev_list, vdev_list_elem) {
qdf_nbuf_t deliver_list_head = NULL;
qdf_nbuf_t deliver_list_tail = NULL;
while ((nbuf = qdf_nbuf_queue_remove(&vdev->rxq))) {
rx_tlv_hdr = qdf_nbuf_data(nbuf);

View file

@ -261,7 +261,7 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, void *ring_desc,
struct dp_pdev *pdev0;
struct dp_vdev *vdev0;
uint32_t tid = 0;
uint16_t peer_id;
uint16_t peer_id = 0xFFFF;
struct dp_peer *peer = NULL;
rx_buf_cookie = HAL_RX_WBM_BUF_COOKIE_GET(ring_desc);
@ -325,6 +325,16 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, void *ring_desc,
}
}
#ifdef QCA_WIFI_NAPIER_EMULATION /* Debug code, remove later */
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
"%s: p_id %d msdu_len %d hdr_off %d",
__func__, peer_id, msdu_len, l2_hdr_offset);
print_hex_dump(KERN_ERR,
"\t Pkt Data:", DUMP_PREFIX_NONE, 32, 4,
qdf_nbuf_data(nbuf), 128, false);
#endif /* NAPIER_EMULATION */
pdev0 = soc->pdev_list[0];/* Hard code 0th elem */
if (pdev0) {
@ -333,7 +343,7 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, void *ring_desc,
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
FL("pdev0 %p vdev0 %p osif_rx %p"), pdev0, vdev0,
vdev0->osif_rx);
qdf_nbuf_set_next(nbuf, NULL);
vdev0->osif_rx(vdev0->osif_vdev, nbuf);
} else {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,