Previously, the ability to override the system default for the number
of handler threads was broken since to the introduction of the per-CPU
upcall handlers.

This patch rectifies this behavior by re-enabling manual configuration
of the handler thread count.

Fixes: b1e517bd2f81 ("dpif-netlink: Introduce per-cpu upcall dispatch.")
Signed-off-by: Eelco Chaudron <echau...@redhat.com>
---
 lib/dpif-netlink.c            | 8 +++++++-
 lib/dpif-provider.h           | 4 ++++
 ofproto/ofproto-dpif-upcall.c | 2 +-
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/lib/dpif-netlink.c b/lib/dpif-netlink.c
index 84e2bd8ea..fd5532014 100644
--- a/lib/dpif-netlink.c
+++ b/lib/dpif-netlink.c
@@ -2839,7 +2839,13 @@ dpif_netlink_number_handlers_required(struct dpif 
*dpif_, uint32_t *n_handlers)
     struct dpif_netlink *dpif = dpif_netlink_cast(dpif_);
 
     if (dpif_netlink_upcall_per_cpu(dpif)) {
-        *n_handlers = dpif_netlink_calculate_n_handlers();
+        uint32_t calc_handlers = dpif_netlink_calculate_n_handlers();
+
+        /* When a specific number of handlers is requested, we honor this as
+         * long as they are less than the suggested number. */
+        if (!*n_handlers || *n_handlers > calc_handlers) {
+            *n_handlers = calc_handlers;
+        }
         return true;
     }
 
diff --git a/lib/dpif-provider.h b/lib/dpif-provider.h
index 520e21e68..fc3d39803 100644
--- a/lib/dpif-provider.h
+++ b/lib/dpif-provider.h
@@ -369,6 +369,10 @@ struct dpif_class {
     /* Queries 'dpif' to see if a certain number of handlers are required by
      * the implementation.
      *
+     * The 'n_handlers' value can be initialize with a system/user suggestion.
+     * It's up to the implementation if this suggestion fits the requirements
+     * for correct operation.
+     *
      * If a certain number of handlers are required, returns 'true' and sets
      * 'n_handlers' to that number of handler threads.
      *
diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c
index 9a5c5c29c..f9d8f9cc7 100644
--- a/ofproto/ofproto-dpif-upcall.c
+++ b/ofproto/ofproto-dpif-upcall.c
@@ -660,7 +660,7 @@ udpif_set_threads(struct udpif *udpif, uint32_t n_handlers_,
                   uint32_t n_revalidators_)
 {
     ovs_assert(udpif);
-    uint32_t n_handlers_requested;
+    uint32_t n_handlers_requested = n_handlers_;
     uint32_t n_revalidators_requested;
     bool forced = false;
 
-- 
2.43.0

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to