mirror of
https://github.com/openvswitch/ovs
synced 2025-08-29 13:27:59 +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();
|
nb_thread = netdev_offload_thread_nb();
|
||||||
|
if (!nb_thread) {
|
||||||
|
return EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
/* nb_thread counters for the overall total as well. */
|
/* nb_thread counters for the overall total as well. */
|
||||||
stats->size = ARRAY_SIZE(hwol_stats) * (nb_thread + 1);
|
stats->size = ARRAY_SIZE(hwol_stats) * (nb_thread + 1);
|
||||||
stats->counters = xcalloc(stats->size, sizeof *stats->counters);
|
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,
|
offload_thread_nb = smap_get_ullong(ovs_other_config,
|
||||||
"n-offload-threads",
|
"n-offload-threads",
|
||||||
DEFAULT_OFFLOAD_THREAD_NB);
|
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",
|
VLOG_WARN("netdev: Invalid number of threads requested: %u",
|
||||||
offload_thread_nb);
|
offload_thread_nb);
|
||||||
offload_thread_nb = DEFAULT_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++) {
|
for (i = 0; i < n_threads; i++) {
|
||||||
avg += thread_working_ms[i];
|
avg += thread_working_ms[i];
|
||||||
}
|
}
|
||||||
avg /= n_threads;
|
avg /= n_threads ? n_threads : 1;
|
||||||
printf("%s: ", prefix);
|
printf("%s: ", prefix);
|
||||||
for (i = 0; i < n_threads; i++) {
|
for (i = 0; i < n_threads; i++) {
|
||||||
if (thread_working_ms[i] >= TIMEOUT_MS) {
|
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++) {
|
for (i = 0; i < n_threads; i++) {
|
||||||
avg += thread_working_ms[i];
|
avg += thread_working_ms[i];
|
||||||
}
|
}
|
||||||
avg /= n_threads;
|
avg /= n_threads ? n_threads : 1;
|
||||||
printf("%s: %6d", prefix, reader_elapsed);
|
printf("%s: %6d", prefix, reader_elapsed);
|
||||||
for (i = 0; i < n_threads; i++) {
|
for (i = 0; i < n_threads; i++) {
|
||||||
printf(" %6" PRIu64, thread_working_ms[i]);
|
printf(" %6" PRIu64, thread_working_ms[i]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user