On Fri, Feb 14, 2025 at 09:38:54AM -0800, Stephen Hemminger wrote: > The check for supporting deferred start should be handled at > the ethdev level for all devices. > > Signed-off-by: Stephen Hemminger <step...@networkplumber.org> > Acked-by: Andrew Rybchenko <andrew.rybche...@oktetlabs.ru> > --- > lib/ethdev/rte_ethdev.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c > index c4079bb924..5493b3b9f8 100644 > --- a/lib/ethdev/rte_ethdev.c > +++ b/lib/ethdev/rte_ethdev.c > @@ -2274,6 +2274,13 @@ rte_eth_rx_queue_setup(uint16_t port_id, uint16_t > rx_queue_id, > if (rx_conf != NULL) > rx_offloads |= rx_conf->offloads; > > + /* Deferred start requires that device supports queue start */ > + if (rx_conf && rx_conf->rx_deferred_start && > *dev->dev_ops->rx_queue_start == NULL) {
I must admit to being a little confused by the initial "*" at the beginning of the function pointer check, but Stephen has correctly pointed out that this style seems to be used everywhere in DPDK. Can someone perhaps just explain why we check for "*fn_ptr == NULL", rather than just "fn_ptr == NULL". Testing with code in gdb shows that both work fine, though interestingly gdb itself gives and error when you interactively request a dereference of a null fn pointer, i.e. have the extra initial "*". /Bruce