From: Pavel Tikhomirov <ptikhomi...@virtuozzo.com>

Counters are not virtualized, we just remove the leak of host's number
of cpus. Done similar to /proc/cpuinfo, in case of cpu hotplug race with
reading proc, can actually show arbitrary number of lines as we do no
locking like get_online_cpus or cpuhp_lock_acquire_read, it seem we do
so for the sake of simplicity.

https://jira.sw.ru/browse/PSBM-73238
Signed-off-by: Pavel Tikhomirov <ptikhomi...@virtuozzo.com>

eshatokhin@: updated the conditional to match what is now used for
/proc/cpuinfo (see __c_start() and cpuinfo_op in arch/x86/kernel/cpu/proc.c).
No changes in semantics.

Done in the scope of https://jira.sw.ru/browse/PSBM-127794.
Cherry-picked from vz7 commit 7705706ecb71 ("ve/proc/net/nr_cpus: cut lines in
/proc/net/softnet_stat to number of vcpus in CT")

Signed-off-by: Evgenii Shatokhin <eshatok...@virtuozzo.com>

(cherry-picked from vz8 commit 27a17d3a9625 ("ve/proc/net/nr_cpus: Cut lines
in /proc/net/softnet_stat to number of vcpus in CT"))

Signed-off-by: Nikita Yushchenko <nikita.yushche...@virtuozzo.com>
---
 net/core/net-procfs.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/net/core/net-procfs.c b/net/core/net-procfs.c
index 38b4fc30159b..03fb179b9a34 100644
--- a/net/core/net-procfs.c
+++ b/net/core/net-procfs.c
@@ -125,7 +125,8 @@ static struct softnet_data *softnet_get_online(loff_t *pos)
 
        while (*pos < nr_cpu_ids)
                if (cpu_online(*pos)) {
-                       sd = &per_cpu(softnet_data, *pos);
+                       if (bitmap_weight(cpumask_bits(cpu_online_mask), *pos) 
< num_online_vcpus())
+                               sd = &per_cpu(softnet_data, *pos);
                        break;
                } else
                        ++*pos;
-- 
2.30.2

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to