Move the netdev_any_oor() API to a new dpif_offload_netdevs_out_of_resource() API.
Signed-off-by: Eelco Chaudron <echau...@redhat.com> --- lib/dpif-offload.c | 23 +++++++++++++++++++++++ lib/dpif-offload.h | 1 + lib/netdev-offload.c | 25 ------------------------- lib/netdev-offload.h | 1 - ofproto/ofproto-dpif-upcall.c | 2 +- 5 files changed, 25 insertions(+), 27 deletions(-) diff --git a/lib/dpif-offload.c b/lib/dpif-offload.c index cf4a63597..91274d383 100644 --- a/lib/dpif-offload.c +++ b/lib/dpif-offload.c @@ -1217,6 +1217,29 @@ dpif_offload_get_netdev_by_port_id(struct dpif *dpif, return netdev; } +bool +dpif_offload_netdevs_out_of_resources(struct dpif *dpif) +{ + struct dp_offload *dp_offload = dpif_offload_get_dp_offload(dpif); + struct dpif_offload_port_dump dump; + struct dpif_offload_port port; + bool oor = false; + + if (!dp_offload || !dpif_offload_is_offload_enabled()) { + return false; + } + + DPIF_OFFLOAD_PORT_FOR_EACH (&port, &dump, dpif) { + if (port.netdev->hw_info.oor) { + oor = true; + dpif_offload_port_dump_done(&dump); + break; + } + } + + return oor; +} + /* This function tries to offload the operations to the dpif-offload * providers. It will return the number of operations not handled, whose * pointers are re-arranged and available in **ops. */ diff --git a/lib/dpif-offload.h b/lib/dpif-offload.h index e7ffa7b6b..e316a8508 100644 --- a/lib/dpif-offload.h +++ b/lib/dpif-offload.h @@ -84,6 +84,7 @@ struct netdev *dpif_offload_offload_get_netdev_by_port_id( struct dpif_offload *, odp_port_t); struct dpif_offload *dpif_offload_port_offloaded_by(const struct dpif *, odp_port_t); +bool dpif_offload_netdevs_out_of_resources(struct dpif *); enum dpif_offload_impl_type dpif_offload_get_impl_type( const struct dpif_offload *); enum dpif_offload_impl_type dpif_offload_get_impl_type_by_class( diff --git a/lib/netdev-offload.c b/lib/netdev-offload.c index 451fc36cf..8310cfed6 100644 --- a/lib/netdev-offload.c +++ b/lib/netdev-offload.c @@ -325,31 +325,6 @@ struct port_to_netdev_data { int ifindex; }; -/* - * Find if any netdev is in OOR state. Return true if there's at least - * one netdev that's in OOR state; otherwise return false. - */ -bool -netdev_any_oor(void) - OVS_EXCLUDED(port_to_netdev_rwlock) -{ - struct port_to_netdev_data *data; - bool oor = false; - - ovs_rwlock_rdlock(&port_to_netdev_rwlock); - HMAP_FOR_EACH (data, portno_node, &port_to_netdev) { - struct netdev *dev = data->netdev; - - if (dev->hw_info.oor) { - oor = true; - break; - } - } - ovs_rwlock_unlock(&port_to_netdev_rwlock); - - return oor; -} - void netdev_ports_traverse(const char *dpif_type, bool (*cb)(struct netdev *, odp_port_t, void *), diff --git a/lib/netdev-offload.h b/lib/netdev-offload.h index 8c3c1628c..0a3aae981 100644 --- a/lib/netdev-offload.h +++ b/lib/netdev-offload.h @@ -82,7 +82,6 @@ int netdev_init_flow_api(struct netdev *); void netdev_uninit_flow_api(struct netdev *); int netdev_get_hw_info(struct netdev *, int); void netdev_set_hw_info(struct netdev *, int, int); -bool netdev_any_oor(void); void netdev_set_flow_api_enabled(const struct smap *ovs_other_config); struct dpif_port; diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c index b324793f0..666c14da7 100644 --- a/ofproto/ofproto-dpif-upcall.c +++ b/ofproto/ofproto-dpif-upcall.c @@ -974,7 +974,7 @@ udpif_run_flow_rebalance(struct udpif *udpif) return; } - if (!netdev_any_oor()) { + if (!dpif_offload_netdevs_out_of_resources(udpif->dpif)) { return; } -- 2.50.1 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev