qcacld-3.0: Check per vdev limits for selecting discard frames
When HL Flow Control is enabled, check for per vdev limits for making a decision on whether frames should be discarded. Change-Id: Ifde5f763d253eb644f97afeab9e4e1365c23e672 CRs-fixed: 2236321
This commit is contained in:

zatwierdzone przez
nshrivas

rodzic
d6c08f2f0e
commit
a9d5382e9a
@@ -161,6 +161,7 @@ ol_tx_queue_discard(
|
|||||||
num = ol_tx_desc_pool_size_hl(pdev->ctrl_pdev) -
|
num = ol_tx_desc_pool_size_hl(pdev->ctrl_pdev) -
|
||||||
qdf_atomic_read(&pdev->tx_queue.rsrc_cnt);
|
qdf_atomic_read(&pdev->tx_queue.rsrc_cnt);
|
||||||
else
|
else
|
||||||
|
/*TODO: Discard frames for a particular vdev only */
|
||||||
num = pdev->tx_queue.rsrc_threshold_hi -
|
num = pdev->tx_queue.rsrc_threshold_hi -
|
||||||
pdev->tx_queue.rsrc_threshold_lo;
|
pdev->tx_queue.rsrc_threshold_lo;
|
||||||
|
|
||||||
@@ -192,7 +193,7 @@ ol_tx_queue_discard(
|
|||||||
ol_tx_queue_flush(pdev);
|
ol_tx_queue_flush(pdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PER_VDEV_TX_DESC_POOL
|
#ifdef QCA_HL_NETDEV_FLOW_CONTROL
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* is_ol_tx_discard_frames_success() - check whether currently queued tx frames
|
* is_ol_tx_discard_frames_success() - check whether currently queued tx frames
|
||||||
@@ -202,16 +203,39 @@ ol_tx_queue_discard(
|
|||||||
*
|
*
|
||||||
* Return: Success if available tx descriptors are too few
|
* Return: Success if available tx descriptors are too few
|
||||||
*/
|
*/
|
||||||
static bool
|
static inline bool
|
||||||
is_ol_tx_discard_frames_success(struct ol_txrx_pdev_t *pdev,
|
is_ol_tx_discard_frames_success(struct ol_txrx_pdev_t *pdev,
|
||||||
struct ol_tx_desc_t *tx_desc)
|
struct ol_tx_desc_t *tx_desc)
|
||||||
{
|
{
|
||||||
ol_txrx_vdev_handle vdev;
|
ol_txrx_vdev_handle vdev;
|
||||||
|
bool discard_frames;
|
||||||
|
|
||||||
vdev = tx_desc->vdev;
|
vdev = tx_desc->vdev;
|
||||||
return qdf_atomic_read(&vdev->tx_desc_count) >
|
|
||||||
((ol_tx_desc_pool_size_hl(pdev->ctrl_pdev) >> 1)
|
qdf_spin_lock_bh(&vdev->pdev->tx_mutex);
|
||||||
- TXRX_HL_TX_FLOW_CTRL_MGMT_RESERVED);
|
if (vdev->tx_desc_limit == 0) {
|
||||||
|
/* Flow control not enabled */
|
||||||
|
discard_frames = qdf_atomic_read(&pdev->tx_queue.rsrc_cnt) <=
|
||||||
|
pdev->tx_queue.rsrc_threshold_lo;
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* Discard
|
||||||
|
* if netbuf is normal priority and tx_desc_count greater than
|
||||||
|
* queue stop threshold
|
||||||
|
* AND
|
||||||
|
* if netbuf is high priority and tx_desc_count greater than
|
||||||
|
* tx desc limit.
|
||||||
|
*/
|
||||||
|
discard_frames = (!ol_tx_desc_is_high_prio(tx_desc->netbuf) &&
|
||||||
|
qdf_atomic_read(&vdev->tx_desc_count) >
|
||||||
|
vdev->queue_stop_th) ||
|
||||||
|
(ol_tx_desc_is_high_prio(tx_desc->netbuf) &&
|
||||||
|
qdf_atomic_read(&vdev->tx_desc_count) >
|
||||||
|
vdev->tx_desc_limit);
|
||||||
|
}
|
||||||
|
qdf_spin_unlock_bh(&vdev->pdev->tx_mutex);
|
||||||
|
|
||||||
|
return discard_frames;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
||||||
@@ -222,7 +246,7 @@ is_ol_tx_discard_frames_success(struct ol_txrx_pdev_t *pdev,
|
|||||||
return qdf_atomic_read(&pdev->tx_queue.rsrc_cnt) <=
|
return qdf_atomic_read(&pdev->tx_queue.rsrc_cnt) <=
|
||||||
pdev->tx_queue.rsrc_threshold_lo;
|
pdev->tx_queue.rsrc_threshold_lo;
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* QCA_HL_NETDEV_FLOW_CONTROL */
|
||||||
|
|
||||||
void
|
void
|
||||||
ol_tx_enqueue(
|
ol_tx_enqueue(
|
||||||
|
Reference in New Issue
Block a user