On 2 Mar 2026, at 20:16, Timothy Redaelli wrote:
> Move the registration of dpif_offload_dpdk_class from the compile-time > static array in dpif-offload.c to an explicit call in dpdk_init__(). > This mirrors how netdev_dpdk_register() is already called and eliminates > a link-time dependency from libopenvswitch objects on DPDK-specific > object files. > > Make dpif_offload_register_provider() non-static so it can be called > from dpdk.c. > > This is a prerequisite for isolating DPDK linking to ovs-vswitchd only, > as the static array reference would otherwise require a stub definition > for dpif_offload_dpdk_class in all non-vswitchd binaries. > > Reported-at: https://issues.redhat.com/browse/FDP-3277 > Cc: Eelco Chaudron <[email protected]> > Signed-off-by: Timothy Redaelli <[email protected]> Hi Timothy, The offload framework needs the providers to be initialized at the same time during offload framework initialization. Making this API separate might cause problems, so we should probably avoid that. I don’t know enough about all the OVS linking and library details to suggest a clean alternative. However, someone may come up with a better solution when reviewing your second patch. Cheers, Eelco > --- > lib/dpdk.c | 2 ++ > lib/dpif-offload-provider.h | 1 + > lib/dpif-offload.c | 5 +---- > 3 files changed, 4 insertions(+), 4 deletions(-) > > diff --git a/lib/dpdk.c b/lib/dpdk.c > index d27b95cd9..b1059418f 100644 > --- a/lib/dpdk.c > +++ b/lib/dpdk.c > @@ -29,6 +29,7 @@ > #include <rte_version.h> > > #include "dirs.h" > +#include "dpif-offload-provider.h" > #include "fatal-signal.h" > #include "netdev-dpdk.h" > #include "openvswitch/dynamic-string.h" > @@ -506,6 +507,7 @@ dpdk_init__(const struct smap *ovs_other_config) > RTE_PER_LCORE(_lcore_id) = NON_PMD_CORE_ID; > > /* Finally, register the dpdk classes */ > + dpif_offload_register_provider(&dpif_offload_dpdk_class); > netdev_dpdk_register(ovs_other_config); > return true; > } > diff --git a/lib/dpif-offload-provider.h b/lib/dpif-offload-provider.h > index 02ef46cb0..ed14e9b68 100644 > --- a/lib/dpif-offload-provider.h > +++ b/lib/dpif-offload-provider.h > @@ -353,6 +353,7 @@ struct dpif_offload_port > *dpif_offload_port_mgr_find_by_odp_port( > CMAP_FOR_EACH (PORT, odp_port_node, &(OFFLOAD)->ports->odp_port_to_port) > > /* Global functions, called by the dpif layer or offload providers. */ > +int dpif_offload_register_provider(const struct dpif_offload_class *); > void dpif_offload_module_init(void); > void dpif_offload_set_config(struct dpif *, const struct smap *other_cfg); > void dpif_offload_port_add(struct dpif *, struct netdev *, odp_port_t); > diff --git a/lib/dpif-offload.c b/lib/dpif-offload.c > index bb2feced9..4bdd9bd3e 100644 > --- a/lib/dpif-offload.c > +++ b/lib/dpif-offload.c > @@ -44,9 +44,6 @@ static struct shash dpif_offload_providers \ > static const struct dpif_offload_class *base_dpif_offload_classes[] = { > #if defined(__linux__) > &dpif_offload_tc_class, > -#endif > -#ifdef DPDK_NETDEV > - &dpif_offload_dpdk_class, > #endif > /* While adding a new offload class to this structure make sure to also > * update the dpif_offload_provider_priority_list below. */ > @@ -90,7 +87,7 @@ dpif_offload_register_provider__(const struct > dpif_offload_class *class) > return 0; > } > > -static int > +int > dpif_offload_register_provider(const struct dpif_offload_class *class) > { > int error; > -- > 2.53.0 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
