On 7/10/26 9:08 AM, David Marchand wrote: > Now that batches can grow to more than NETDEV_MAX_BURST, > track the per packet rxq in a dynamically allocated array based on the > output queue batch capacity. > > Signed-off-by: David Marchand <[email protected]> > --- > lib/dpif-netdev.c | 65 ++++++++++++++++++++++++++--------------------- > 1 file changed, 36 insertions(+), 29 deletions(-) > > diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c > index 0e4d4b7866..585bffda99 100644 > --- a/lib/dpif-netdev.c > +++ b/lib/dpif-netdev.c > @@ -123,6 +123,7 @@ COVERAGE_DEFINE(datapath_drop_rx_invalid_packet); > COVERAGE_DEFINE(datapath_drop_hw_post_process); > COVERAGE_DEFINE(datapath_drop_hw_post_process_consumed); > > +COVERAGE_DEFINE(dpif_netdev_output_grow_queues); > COVERAGE_DEFINE(dpif_netdev_recirc_big_batch); > > /* Protects against changes to 'dp_netdevs'. */ > @@ -443,7 +444,7 @@ struct tx_port { > long long flush_time; > struct dp_packet_batch output_pkts; > struct dp_packet_batch *txq_pkts; /* Only for hash mode. */ > - struct dp_netdev_rxq *output_pkts_rxqs[NETDEV_MAX_BURST]; > + struct dp_netdev_rxq **output_pkts_rxqs; > }; > > /* Contained by struct tx_bond 'member_buckets'. */ > @@ -5919,6 +5920,7 @@ pmd_free_cached_ports(struct dp_netdev_pmd_thread *pmd) > } > free(tx_port_cached->txq_pkts); > dp_packet_batch_destroy(&tx_port_cached->output_pkts); > + free(tx_port_cached->output_pkts_rxqs); > free(tx_port_cached); > } > HMAP_FOR_EACH_POP (tx_port_cached, node, &pmd->send_port_cache) { > @@ -5931,6 +5933,7 @@ pmd_free_cached_ports(struct dp_netdev_pmd_thread *pmd) > } > free(tx_port_cached->txq_pkts); > dp_packet_batch_destroy(&tx_port_cached->output_pkts); > + free(tx_port_cached->output_pkts_rxqs); > free(tx_port_cached); > } > } > @@ -5956,6 +5959,10 @@ pmd_load_cached_ports(struct dp_netdev_pmd_thread *pmd) > if (netdev_has_tunnel_push_pop(tx_port->port->netdev)) { > tx_port_cached = xmemdup(tx_port, sizeof *tx_port_cached); > dp_packet_batch_init(&tx_port_cached->output_pkts); > + tx_port_cached->output_pkts_rxqs = > + xmemdup(tx_port->output_pkts_rxqs, > + > dp_packet_batch_capacity(&tx_port_cached->output_pkts) > + * sizeof *tx_port_cached->output_pkts_rxqs); > if (tx_port->txq_pkts) { > txq_pkts_cached = xmemdup(tx_port->txq_pkts, > n_txq * sizeof *tx_port->txq_pkts); > @@ -5971,6 +5978,10 @@ pmd_load_cached_ports(struct dp_netdev_pmd_thread *pmd) > if (n_txq) { > tx_port_cached = xmemdup(tx_port, sizeof *tx_port_cached); > dp_packet_batch_init(&tx_port_cached->output_pkts); > + tx_port_cached->output_pkts_rxqs = > + xmemdup(tx_port->output_pkts_rxqs, > + > dp_packet_batch_capacity(&tx_port_cached->output_pkts) > + * sizeof *tx_port_cached->output_pkts_rxqs); > if (tx_port->txq_pkts) { > txq_pkts_cached = xmemdup(tx_port->txq_pkts, > n_txq * sizeof *tx_port->txq_pkts); > @@ -6823,6 +6834,7 @@ dp_netdev_pmd_clear_ports(struct dp_netdev_pmd_thread > *pmd) > HMAP_FOR_EACH_POP (port, node, &pmd->tx_ports) { > free(port->txq_pkts); > dp_packet_batch_destroy(&port->output_pkts); > + free(port->output_pkts_rxqs); > free(port); > } > ovs_mutex_unlock(&pmd->port_mutex); > @@ -6892,6 +6904,9 @@ dp_netdev_add_port_tx_to_pmd(struct > dp_netdev_pmd_thread *pmd, > tx->qid = -1; > tx->flush_time = 0LL; > dp_packet_batch_init(&tx->output_pkts); > + tx->output_pkts_rxqs = > + xcalloc(dp_packet_batch_capacity(&tx->output_pkts), > + sizeof *tx->output_pkts_rxqs);
nit: This fits into two lines. _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
