* as declared in enum xdp_action inside file uapi/linux/bpf.h .
  */
 static const char gve_gstrings_main_stats[][ETH_GSTRING_LEN] = {
-       "rx_packets", "tx_packets", "rx_bytes", "tx_bytes",
-       "rx_dropped", "tx_dropped", "tx_timeouts",
+       "rx_packets", "rx_hsplit_pkt", "tx_packets", "rx_bytes",
+       "tx_bytes", "rx_dropped", "tx_dropped", "tx_timeouts",
        "rx_skb_alloc_fail", "rx_buf_alloc_fail", "rx_desc_err_dropped_pkt",
+       "rx_hsplit_unsplit_pkt",
        "interface_up_cnt", "interface_down_cnt", "reset_cnt",
        "page_alloc_fail", "dma_mapping_error", "stats_report_trigger_cnt",
 };
 
 static const char gve_gstrings_rx_stats[][ETH_GSTRING_LEN] = {
-       "rx_posted_desc[%u]", "rx_completed_desc[%u]", "rx_consumed_desc[%u]", "rx_bytes[%u]",
-       "rx_cont_packet_cnt[%u]", "rx_frag_flip_cnt[%u]", "rx_frag_copy_cnt[%u]",
-       "rx_frag_alloc_cnt[%u]",
+       "rx_posted_desc[%u]", "rx_completed_desc[%u]", "rx_consumed_desc[%u]",
+       "rx_bytes[%u]", "rx_hsplit_bytes[%u]", "rx_cont_packet_cnt[%u]",
+       "rx_frag_flip_cnt[%u]", "rx_frag_copy_cnt[%u]", "rx_frag_alloc_cnt[%u]",
        "rx_dropped_pkt[%u]", "rx_copybreak_pkt[%u]", "rx_copied_pkt[%u]",
        "rx_queue_drop_cnt[%u]", "rx_no_buffers_posted[%u]",
        "rx_drops_packet_over_mru[%u]", "rx_drops_invalid_checksum[%u]",
 gve_get_ethtool_stats(struct net_device *netdev,
                      struct ethtool_stats *stats, u64 *data)
 {
-       u64 tmp_rx_pkts, tmp_rx_bytes, tmp_rx_skb_alloc_fail,
-               tmp_rx_buf_alloc_fail, tmp_rx_desc_err_dropped_pkt,
+       u64 tmp_rx_pkts, tmp_rx_hsplit_pkt, tmp_rx_bytes, tmp_rx_hsplit_bytes,
+               tmp_rx_skb_alloc_fail, tmp_rx_buf_alloc_fail,
+               tmp_rx_desc_err_dropped_pkt, tmp_rx_hsplit_unsplit_pkt,
                tmp_tx_pkts, tmp_tx_bytes;
-       u64 rx_buf_alloc_fail, rx_desc_err_dropped_pkt, rx_pkts,
-               rx_skb_alloc_fail, rx_bytes, tx_pkts, tx_bytes, tx_dropped;
+       u64 rx_buf_alloc_fail, rx_desc_err_dropped_pkt, rx_hsplit_unsplit_pkt,
+               rx_pkts, rx_hsplit_pkt, rx_skb_alloc_fail, rx_bytes, tx_pkts, tx_bytes,
+               tx_dropped;
        int stats_idx, base_stats_idx, max_stats_idx;
        struct stats *report_stats;
        int *rx_qid_to_stats_idx;
                kfree(rx_qid_to_stats_idx);
                return;
        }
-       for (rx_pkts = 0, rx_bytes = 0, rx_skb_alloc_fail = 0,
-            rx_buf_alloc_fail = 0, rx_desc_err_dropped_pkt = 0, ring = 0;
+       for (rx_pkts = 0, rx_bytes = 0, rx_hsplit_pkt = 0,
+            rx_skb_alloc_fail = 0, rx_buf_alloc_fail = 0,
+            rx_desc_err_dropped_pkt = 0, rx_hsplit_unsplit_pkt = 0,
+            ring = 0;
             ring < priv->rx_cfg.num_queues; ring++) {
                if (priv->rx) {
                        do {
                                start =
                                  u64_stats_fetch_begin(&priv->rx[ring].statss);
                                tmp_rx_pkts = rx->rpackets;
+                               tmp_rx_hsplit_pkt = rx->rx_hsplit_pkt;
                                tmp_rx_bytes = rx->rbytes;
                                tmp_rx_skb_alloc_fail = rx->rx_skb_alloc_fail;
                                tmp_rx_buf_alloc_fail = rx->rx_buf_alloc_fail;
                                tmp_rx_desc_err_dropped_pkt =
                                        rx->rx_desc_err_dropped_pkt;
+                               tmp_rx_hsplit_unsplit_pkt =
+                                       rx->rx_hsplit_unsplit_pkt;
                        } while (u64_stats_fetch_retry(&priv->rx[ring].statss,
                                                       start));
                        rx_pkts += tmp_rx_pkts;
+                       rx_hsplit_pkt += tmp_rx_hsplit_pkt;
                        rx_bytes += tmp_rx_bytes;
                        rx_skb_alloc_fail += tmp_rx_skb_alloc_fail;
                        rx_buf_alloc_fail += tmp_rx_buf_alloc_fail;
                        rx_desc_err_dropped_pkt += tmp_rx_desc_err_dropped_pkt;
+                       rx_hsplit_unsplit_pkt += tmp_rx_hsplit_unsplit_pkt;
                }
        }
        for (tx_pkts = 0, tx_bytes = 0, tx_dropped = 0, ring = 0;
 
        i = 0;
        data[i++] = rx_pkts;
+       data[i++] = rx_hsplit_pkt;
        data[i++] = tx_pkts;
        data[i++] = rx_bytes;
        data[i++] = tx_bytes;
        data[i++] = rx_skb_alloc_fail;
        data[i++] = rx_buf_alloc_fail;
        data[i++] = rx_desc_err_dropped_pkt;
+       data[i++] = rx_hsplit_unsplit_pkt;
        data[i++] = priv->interface_up_cnt;
        data[i++] = priv->interface_down_cnt;
        data[i++] = priv->reset_cnt;
                                start =
                                  u64_stats_fetch_begin(&priv->rx[ring].statss);
                                tmp_rx_bytes = rx->rbytes;
+                               tmp_rx_hsplit_bytes = rx->rx_hsplit_bytes;
                                tmp_rx_skb_alloc_fail = rx->rx_skb_alloc_fail;
                                tmp_rx_buf_alloc_fail = rx->rx_buf_alloc_fail;
                                tmp_rx_desc_err_dropped_pkt =
                        } while (u64_stats_fetch_retry(&priv->rx[ring].statss,
                                                       start));
                        data[i++] = tmp_rx_bytes;
+                       data[i++] = tmp_rx_hsplit_bytes;
                        data[i++] = rx->rx_cont_packet_cnt;
                        data[i++] = rx->rx_frag_flip_cnt;
                        data[i++] = rx->rx_frag_copy_cnt;