mirror of
https://github.com/openvswitch/ovs
synced 2025-08-22 09:58:01 +00:00
netdev-offload: Fix Clang's static analyzer 'Division by zero' warnings.
When enabling DPDK with the configure the below, ovs-vswitchd will crash. ovs-vsctl set Open_vSwitch . other_config:n-offload-threads=0 ovs-vsctl set Open_vSwitch . other_config:hw-offload=true This issue arises because setting the 'n-offload-threads' value to zero is not a supported configuration. This fix addresses this by implementing a check to ensure a valid 'n-offload-threads' value, both during configuration and statistics gathering. Fixes: 62c2d8a67543 ("netdev-offload: Add multi-thread API.") Signed-off-by: Eelco Chaudron <echaudro@redhat.com> Acked-by: Ilya Maximets <i.maximets@ovn.org> Signed-off-by: Simon Horman <horms@ovn.org>
This commit is contained in:
parent
979bc94b1b
commit
08212d755e
@ -4748,6 +4748,10 @@ dpif_netdev_offload_stats_get(struct dpif *dpif,
|
||||
}
|
||||
|
||||
nb_thread = netdev_offload_thread_nb();
|
||||
if (!nb_thread) {
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
/* nb_thread counters for the overall total as well. */
|
||||
stats->size = ARRAY_SIZE(hwol_stats) * (nb_thread + 1);
|
||||
stats->counters = xcalloc(stats->size, sizeof *stats->counters);
|
||||
|
@ -872,7 +872,8 @@ netdev_set_flow_api_enabled(const struct smap *ovs_other_config)
|
||||
offload_thread_nb = smap_get_ullong(ovs_other_config,
|
||||
"n-offload-threads",
|
||||
DEFAULT_OFFLOAD_THREAD_NB);
|
||||
if (offload_thread_nb > MAX_OFFLOAD_THREAD_NB) {
|
||||
if (offload_thread_nb == 0 ||
|
||||
offload_thread_nb > MAX_OFFLOAD_THREAD_NB) {
|
||||
VLOG_WARN("netdev: Invalid number of threads requested: %u",
|
||||
offload_thread_nb);
|
||||
offload_thread_nb = DEFAULT_OFFLOAD_THREAD_NB;
|
||||
|
@ -237,7 +237,7 @@ print_result(const char *prefix)
|
||||
for (i = 0; i < n_threads; i++) {
|
||||
avg += thread_working_ms[i];
|
||||
}
|
||||
avg /= n_threads;
|
||||
avg /= n_threads ? n_threads : 1;
|
||||
printf("%s: ", prefix);
|
||||
for (i = 0; i < n_threads; i++) {
|
||||
if (thread_working_ms[i] >= TIMEOUT_MS) {
|
||||
|
@ -315,7 +315,7 @@ print_result(const char *prefix, int reader_elapsed)
|
||||
for (i = 0; i < n_threads; i++) {
|
||||
avg += thread_working_ms[i];
|
||||
}
|
||||
avg /= n_threads;
|
||||
avg /= n_threads ? n_threads : 1;
|
||||
printf("%s: %6d", prefix, reader_elapsed);
|
||||
for (i = 0; i < n_threads; i++) {
|
||||
printf(" %6" PRIu64, thread_working_ms[i]);
|
||||
|
Loading…
x
Reference in New Issue
Block a user