On Thu, Jan 18, 2024 at 1:22 AM Kumara Parameshwaran <kumaraparamesh92@gmail.com> wrote:
In heavy-weight mode GRO which is based on timer, the GRO packets will not be
flushed inspite of timer expiry if there is no packet in the current poll.
If timer mode GRO is enabled the rte_gro_timeout_flush API should be invoked.

Signed-off-by: Kumara Parameshwaran <kumaraparamesh92@gmail.com>
---
v1:
    Changes to make sure that the GRO flush API is invoked if there are no packets in
    current poll and timer expiry.

 app/test-pmd/csumonly.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c
index c103e54111..42f105ac16 100644
--- a/app/test-pmd/csumonly.c
+++ b/app/test-pmd/csumonly.c
@@ -863,16 +863,24 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)

        /* receive a burst of packet */
        nb_rx = common_fwd_stream_receive(fs, pkts_burst, nb_pkt_per_burst);
-       if (unlikely(nb_rx == 0))
+       if (unlikely(nb_rx == 0)) {
+#ifdef RTE_LIB_GRO
+               gro_enable = gro_ports[fs->rx_port].enable;
+               if (unlikely(gro_enable && (gro_flush_cycles != GRO_DEFAULT_FLUSH_CYCLES))) {
+                       goto init;
+               } else {
+                       return false;
+               }
+#else
                return false;
+#endif
+       }

+init:
        rx_bad_ip_csum = 0;
        rx_bad_l4_csum = 0;
        rx_bad_outer_l4_csum = 0;
        rx_bad_outer_ip_csum = 0;
-#ifdef RTE_LIB_GRO
-       gro_enable = gro_ports[fs->rx_port].enable;
-#endif

        txp = &ports[fs->tx_port];
        tx_offloads = txp->dev_conf.txmode.offloads;
--
2.25.1
>>Please ignore this patch, this has an issue will raise a new one.