]> git.baikalelectronics.ru Git - kernel.git/commitdiff
net: merge net->core.prot_inuse and net->core.sock_inuse
authorEric Dumazet <edumazet@google.com>
Mon, 15 Nov 2021 17:11:49 +0000 (09:11 -0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 16 Nov 2021 13:20:45 +0000 (13:20 +0000)
net->core.sock_inuse is a per cpu variable (int),
while net->core.prot_inuse is another per cpu variable
of 64 integers.

per cpu allocator tend to place them in very different places.

Grouping them together makes sense, since it makes
updates potentially faster, if hitting the same
cache line.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/netns/core.h
include/net/sock.h
net/core/sock.c

index 36c2d998a43c015c4b917428ec33f5839cde89b1..552bc25b19335e2ee07effa2550bbe5944eb33aa 100644 (file)
@@ -12,7 +12,6 @@ struct netns_core {
        int     sysctl_somaxconn;
 
 #ifdef CONFIG_PROC_FS
-       int __percpu *sock_inuse;
        struct prot_inuse __percpu *prot_inuse;
 #endif
 };
index c4c981a517976b6f7e2897d96d1ae5471bb942a3..5589312531df9e1ad1038318458350ea857020df 100644 (file)
@@ -1431,6 +1431,7 @@ proto_memory_pressure(struct proto *prot)
 #ifdef CONFIG_PROC_FS
 #define PROTO_INUSE_NR 64      /* should be enough for the first time */
 struct prot_inuse {
+       int all;
        int val[PROTO_INUSE_NR];
 };
 /* Called with local bh disabled */
@@ -1442,7 +1443,7 @@ static inline void sock_prot_inuse_add(const struct net *net,
 
 static inline void sock_inuse_add(const struct net *net, int val)
 {
-       this_cpu_add(*net->core.sock_inuse, val);
+       this_cpu_add(net->core.prot_inuse->all, val);
 }
 
 int sock_prot_inuse_get(struct net *net, struct proto *proto);
index a9bd22b883b92d300aae822cbdb865404f3863d9..d7fc8b5e2569a656902b0d8843d714a62f4fcb78 100644 (file)
@@ -3553,7 +3553,7 @@ int sock_inuse_get(struct net *net)
        int cpu, res = 0;
 
        for_each_possible_cpu(cpu)
-               res += *per_cpu_ptr(net->core.sock_inuse, cpu);
+               res += per_cpu_ptr(net->core.prot_inuse, cpu)->all;
 
        return res;
 }
@@ -3565,22 +3565,12 @@ static int __net_init sock_inuse_init_net(struct net *net)
        net->core.prot_inuse = alloc_percpu(struct prot_inuse);
        if (net->core.prot_inuse == NULL)
                return -ENOMEM;
-
-       net->core.sock_inuse = alloc_percpu(int);
-       if (net->core.sock_inuse == NULL)
-               goto out;
-
        return 0;
-
-out:
-       free_percpu(net->core.prot_inuse);
-       return -ENOMEM;
 }
 
 static void __net_exit sock_inuse_exit_net(struct net *net)
 {
        free_percpu(net->core.prot_inuse);
-       free_percpu(net->core.sock_inuse);
 }
 
 static struct pernet_operations net_inuse_ops = {