For larger packet size congestion is observed on Tx Queues.
This patch enables Tx Queue congestion state check support.
If congested, try to resend the packet few times.
Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
}
dpaa2_q->tc_index = tc_id;
- if (priv->flags & DPAA2_TX_CGR_SUPPORT) {
+ if (!(priv->flags & DPAA2_TX_CGR_OFF)) {
struct dpni_congestion_notification_cfg cong_notif_cfg;
cong_notif_cfg.units = DPNI_CONGESTION_UNIT_FRAMES;
*/
#define CONG_EXIT_TX_THRESHOLD 480
+#define CONG_RETRY_COUNT 18000
+
/* RX queue tail drop threshold
* currently considering 32 KB packets
*/
/* Enable TX Congestion control support
* default is disable
*/
-#define DPAA2_TX_CGR_SUPPORT 0x01
+#define DPAA2_TX_CGR_OFF 0x01
/* Disable RX tail drop, default is enable */
#define DPAA2_RX_TAILDROP_OFF 0x04
dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
{
/* Function to transmit the frames to given device and VQ*/
- uint32_t loop;
+ uint32_t loop, retry_count;
int32_t ret;
struct qbman_fd fd_arr[MAX_TX_RING_SLOTS];
struct rte_mbuf *mi;
/*Clear the unused FD fields before sending*/
while (nb_pkts) {
/*Check if the queue is congested*/
- if (qbman_result_SCN_state_in_mem(dpaa2_q->cscn))
- goto skip_tx;
+ retry_count = 0;
+ if (qbman_result_SCN_state_in_mem(dpaa2_q->cscn)) {
+ retry_count++;
+ /* Retry for some time before giving up */
+ if (retry_count > CONG_RETRY_COUNT)
+ goto skip_tx;
+ }
frames_to_send = (nb_pkts >> 3) ? MAX_TX_RING_SLOTS : nb_pkts;