qcacmn: Add fraglist to skb if num_frags exceeds MAX_FRAG
Add fraglist to skb if num_frags exceeds MAX_FRAG CRs-Fixed: 3186124 Change-Id: I3112d63276fe00aea4fce2e287650078b1573d8a
This commit is contained in:

committed by
Madan Koyyalamudi

parent
928ebb4225
commit
ca9379b181
@@ -294,6 +294,7 @@ dp_rx_mon_handle_full_mon(struct dp_pdev *pdev,
|
||||
qdf_nbuf_t head_msdu, msdu_cur;
|
||||
void *frag_addr;
|
||||
bool prev_msdu_end_received = false;
|
||||
bool is_nbuf_head = true;
|
||||
|
||||
/***************************************************************************
|
||||
*********************** Non-raw packet ************************************
|
||||
@@ -567,7 +568,12 @@ dp_rx_mon_handle_full_mon(struct dp_pdev *pdev,
|
||||
/* reset tot_msdu_len */
|
||||
tot_msdu_len = 0;
|
||||
}
|
||||
msdu_cur = NULL;
|
||||
if (is_nbuf_head) {
|
||||
msdu_cur = qdf_nbuf_get_ext_list(msdu_cur);
|
||||
is_nbuf_head = false;
|
||||
} else {
|
||||
msdu_cur = qdf_nbuf_queue_next(msdu_cur);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -672,7 +678,7 @@ uint8_t dp_rx_mon_process_tlv_status(struct dp_pdev *pdev,
|
||||
{
|
||||
struct dp_soc *soc = pdev->soc;
|
||||
struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
|
||||
qdf_nbuf_t nbuf;
|
||||
qdf_nbuf_t nbuf, tmp_nbuf;
|
||||
qdf_frag_t addr;
|
||||
uint8_t user_id = ppdu_info->user_id;
|
||||
uint8_t mpdu_idx = ppdu_info->mpdu_count[user_id];
|
||||
@@ -736,10 +742,31 @@ uint8_t dp_rx_mon_process_tlv_status(struct dp_pdev *pdev,
|
||||
break;
|
||||
|
||||
nbuf = ppdu_info->mpdu_q[user_id][mpdu_idx];
|
||||
num_frags = qdf_nbuf_get_nr_frags(nbuf);
|
||||
if (qdf_unlikely(!nbuf)) {
|
||||
dp_mon_err("nbuf is NULL");
|
||||
qdf_assert_always(0);
|
||||
}
|
||||
|
||||
tmp_nbuf = qdf_get_nbuf_valid_frag(nbuf);
|
||||
|
||||
if (!tmp_nbuf) {
|
||||
tmp_nbuf = qdf_nbuf_alloc(pdev->soc->osdev,
|
||||
DP_RX_MON_MAX_MONITOR_HEADER,
|
||||
DP_RX_MON_MAX_MONITOR_HEADER,
|
||||
4, FALSE);
|
||||
if (qdf_unlikely(!tmp_nbuf)) {
|
||||
dp_mon_err("nbuf is NULL");
|
||||
qdf_assert_always(0);
|
||||
}
|
||||
/* add new skb to frag list */
|
||||
qdf_nbuf_append_ext_list(nbuf, tmp_nbuf,
|
||||
qdf_nbuf_len(tmp_nbuf));
|
||||
}
|
||||
|
||||
num_frags = qdf_nbuf_get_nr_frags(tmp_nbuf);
|
||||
if (num_frags < QDF_NBUF_MAX_FRAGS) {
|
||||
qdf_nbuf_add_rx_frag(status_frag,
|
||||
nbuf,
|
||||
tmp_nbuf,
|
||||
ppdu_info->data - (unsigned char *)status_frag + 4,
|
||||
ppdu_info->hdr_len - DP_RX_MON_RX_HDR_OFFSET,
|
||||
DP_MON_DATA_BUFFER_SIZE,
|
||||
|
@@ -4870,4 +4870,12 @@ static inline void qdf_set_smmu_fault_state(bool smmu_fault_state)
|
||||
* Return: void
|
||||
*/
|
||||
void qdf_nbuf_stop_replenish_timer(void);
|
||||
/**
|
||||
* qdf_get_nbuf_valid_frag() - Get nbuf to store frag
|
||||
* @nbuf: qdf_nbuf_t master nbuf
|
||||
*
|
||||
* Return: qdf_nbuf_t
|
||||
*/
|
||||
qdf_nbuf_t qdf_get_nbuf_valid_frag(qdf_nbuf_t nbuf);
|
||||
|
||||
#endif /* _QDF_NBUF_H */
|
||||
|
@@ -5881,7 +5881,7 @@ qdf_export_symbol(qdf_nbuf_remove_frag_debug);
|
||||
*
|
||||
* Return: qdf_nbuf_t
|
||||
*/
|
||||
static inline qdf_nbuf_t qdf_get_nbuf_valid_frag(qdf_nbuf_t nbuf)
|
||||
qdf_nbuf_t qdf_get_nbuf_valid_frag(qdf_nbuf_t nbuf)
|
||||
{
|
||||
qdf_nbuf_t last_nbuf;
|
||||
uint32_t num_frags;
|
||||
@@ -5892,10 +5892,10 @@ static inline qdf_nbuf_t qdf_get_nbuf_valid_frag(qdf_nbuf_t nbuf)
|
||||
num_frags = qdf_nbuf_get_nr_frags(nbuf);
|
||||
|
||||
/* Check nbuf has enough memory to store frag memory */
|
||||
if (num_frags <= QDF_NBUF_MAX_FRAGS)
|
||||
if (num_frags < QDF_NBUF_MAX_FRAGS)
|
||||
return nbuf;
|
||||
|
||||
if (num_frags > QDF_NBUF_MAX_FRAGS && !__qdf_nbuf_has_fraglist(nbuf))
|
||||
if (!__qdf_nbuf_has_fraglist(nbuf))
|
||||
return NULL;
|
||||
|
||||
last_nbuf = __qdf_nbuf_get_last_frag_list_nbuf(nbuf);
|
||||
@@ -5909,6 +5909,8 @@ static inline qdf_nbuf_t qdf_get_nbuf_valid_frag(qdf_nbuf_t nbuf)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
qdf_export_symbol(qdf_get_nbuf_valid_frag);
|
||||
|
||||
/**
|
||||
* qdf_nbuf_add_frag_debug() - Add frag to nbuf
|
||||
* @osdev: Device handle
|
||||
|
Reference in New Issue
Block a user