Commit ec733b15 authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller

net: snmp mib cleanup

There is no point to align or pad mibs to cache lines, they are per cpu
allocated with a 8 bytes alignment anyway.
This wastes space for no gain. This patch removes __SNMP_MIB_ALIGN__

Since SNMP mibs contain "unsigned long" fields only, we can relax the
allocation alignment from "unsigned long long" to "unsigned long"
Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 62c97ac0
...@@ -268,7 +268,7 @@ enum { ...@@ -268,7 +268,7 @@ enum {
#define SCTP_MIB_MAX __SCTP_MIB_MAX #define SCTP_MIB_MAX __SCTP_MIB_MAX
struct sctp_mib { struct sctp_mib {
unsigned long mibs[SCTP_MIB_MAX]; unsigned long mibs[SCTP_MIB_MAX];
} __SNMP_MIB_ALIGN__; };
/* Print debugging messages. */ /* Print debugging messages. */
......
...@@ -52,26 +52,11 @@ struct snmp_mib { ...@@ -52,26 +52,11 @@ struct snmp_mib {
* count on the 20Gb/s + networks people expect in a few years time! * count on the 20Gb/s + networks people expect in a few years time!
*/ */
/*
* The rule for padding:
* Best is power of two because then the right structure can be found by a
* simple shift. The structure should be always cache line aligned.
* gcc needs n=alignto(cachelinesize, popcnt(sizeof(bla_mib))) shift/add
* instructions to emulate multiply in case it is not power-of-two.
* Currently n is always <=3 for all sizes so simple cache line alignment
* is enough.
*
* The best solution would be a global CPU local area , especially on 64
* and 128byte cacheline machine it makes a *lot* of sense -AK
*/
#define __SNMP_MIB_ALIGN__ ____cacheline_aligned
/* IPstats */ /* IPstats */
#define IPSTATS_MIB_MAX __IPSTATS_MIB_MAX #define IPSTATS_MIB_MAX __IPSTATS_MIB_MAX
struct ipstats_mib { struct ipstats_mib {
unsigned long mibs[IPSTATS_MIB_MAX]; unsigned long mibs[IPSTATS_MIB_MAX];
} __SNMP_MIB_ALIGN__; };
/* ICMP */ /* ICMP */
#define ICMP_MIB_DUMMY __ICMP_MIB_MAX #define ICMP_MIB_DUMMY __ICMP_MIB_MAX
...@@ -79,36 +64,36 @@ struct ipstats_mib { ...@@ -79,36 +64,36 @@ struct ipstats_mib {
struct icmp_mib { struct icmp_mib {
unsigned long mibs[ICMP_MIB_MAX]; unsigned long mibs[ICMP_MIB_MAX];
} __SNMP_MIB_ALIGN__; };
#define ICMPMSG_MIB_MAX __ICMPMSG_MIB_MAX #define ICMPMSG_MIB_MAX __ICMPMSG_MIB_MAX
struct icmpmsg_mib { struct icmpmsg_mib {
unsigned long mibs[ICMPMSG_MIB_MAX]; unsigned long mibs[ICMPMSG_MIB_MAX];
} __SNMP_MIB_ALIGN__; };
/* ICMP6 (IPv6-ICMP) */ /* ICMP6 (IPv6-ICMP) */
#define ICMP6_MIB_MAX __ICMP6_MIB_MAX #define ICMP6_MIB_MAX __ICMP6_MIB_MAX
struct icmpv6_mib { struct icmpv6_mib {
unsigned long mibs[ICMP6_MIB_MAX]; unsigned long mibs[ICMP6_MIB_MAX];
} __SNMP_MIB_ALIGN__; };
#define ICMP6MSG_MIB_MAX __ICMP6MSG_MIB_MAX #define ICMP6MSG_MIB_MAX __ICMP6MSG_MIB_MAX
struct icmpv6msg_mib { struct icmpv6msg_mib {
unsigned long mibs[ICMP6MSG_MIB_MAX]; unsigned long mibs[ICMP6MSG_MIB_MAX];
} __SNMP_MIB_ALIGN__; };
/* TCP */ /* TCP */
#define TCP_MIB_MAX __TCP_MIB_MAX #define TCP_MIB_MAX __TCP_MIB_MAX
struct tcp_mib { struct tcp_mib {
unsigned long mibs[TCP_MIB_MAX]; unsigned long mibs[TCP_MIB_MAX];
} __SNMP_MIB_ALIGN__; };
/* UDP */ /* UDP */
#define UDP_MIB_MAX __UDP_MIB_MAX #define UDP_MIB_MAX __UDP_MIB_MAX
struct udp_mib { struct udp_mib {
unsigned long mibs[UDP_MIB_MAX]; unsigned long mibs[UDP_MIB_MAX];
} __SNMP_MIB_ALIGN__; };
/* Linux */ /* Linux */
#define LINUX_MIB_MAX __LINUX_MIB_MAX #define LINUX_MIB_MAX __LINUX_MIB_MAX
......
...@@ -189,7 +189,7 @@ enum { ...@@ -189,7 +189,7 @@ enum {
#define DCCP_MIB_MAX __DCCP_MIB_MAX #define DCCP_MIB_MAX __DCCP_MIB_MAX
struct dccp_mib { struct dccp_mib {
unsigned long mibs[DCCP_MIB_MAX]; unsigned long mibs[DCCP_MIB_MAX];
} __SNMP_MIB_ALIGN__; };
DECLARE_SNMP_STAT(struct dccp_mib, dccp_statistics); DECLARE_SNMP_STAT(struct dccp_mib, dccp_statistics);
#define DCCP_INC_STATS(field) SNMP_INC_STATS(dccp_statistics, field) #define DCCP_INC_STATS(field) SNMP_INC_STATS(dccp_statistics, field)
......
...@@ -1401,10 +1401,10 @@ EXPORT_SYMBOL_GPL(snmp_fold_field); ...@@ -1401,10 +1401,10 @@ EXPORT_SYMBOL_GPL(snmp_fold_field);
int snmp_mib_init(void __percpu *ptr[2], size_t mibsize) int snmp_mib_init(void __percpu *ptr[2], size_t mibsize)
{ {
BUG_ON(ptr == NULL); BUG_ON(ptr == NULL);
ptr[0] = __alloc_percpu(mibsize, __alignof__(unsigned long long)); ptr[0] = __alloc_percpu(mibsize, __alignof__(unsigned long));
if (!ptr[0]) if (!ptr[0])
goto err0; goto err0;
ptr[1] = __alloc_percpu(mibsize, __alignof__(unsigned long long)); ptr[1] = __alloc_percpu(mibsize, __alignof__(unsigned long));
if (!ptr[1]) if (!ptr[1])
goto err1; goto err1;
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment