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: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
62c97ac04a
commit
ec733b15a3
4 changed files with 11 additions and 26 deletions
|
@ -268,7 +268,7 @@ enum {
|
|||
#define SCTP_MIB_MAX __SCTP_MIB_MAX
|
||||
struct sctp_mib {
|
||||
unsigned long mibs[SCTP_MIB_MAX];
|
||||
} __SNMP_MIB_ALIGN__;
|
||||
};
|
||||
|
||||
|
||||
/* Print debugging messages. */
|
||||
|
|
|
@ -52,26 +52,11 @@ struct snmp_mib {
|
|||
* 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 */
|
||||
#define IPSTATS_MIB_MAX __IPSTATS_MIB_MAX
|
||||
struct ipstats_mib {
|
||||
unsigned long mibs[IPSTATS_MIB_MAX];
|
||||
} __SNMP_MIB_ALIGN__;
|
||||
};
|
||||
|
||||
/* ICMP */
|
||||
#define ICMP_MIB_DUMMY __ICMP_MIB_MAX
|
||||
|
@ -79,36 +64,36 @@ struct ipstats_mib {
|
|||
|
||||
struct icmp_mib {
|
||||
unsigned long mibs[ICMP_MIB_MAX];
|
||||
} __SNMP_MIB_ALIGN__;
|
||||
};
|
||||
|
||||
#define ICMPMSG_MIB_MAX __ICMPMSG_MIB_MAX
|
||||
struct icmpmsg_mib {
|
||||
unsigned long mibs[ICMPMSG_MIB_MAX];
|
||||
} __SNMP_MIB_ALIGN__;
|
||||
};
|
||||
|
||||
/* ICMP6 (IPv6-ICMP) */
|
||||
#define ICMP6_MIB_MAX __ICMP6_MIB_MAX
|
||||
struct icmpv6_mib {
|
||||
unsigned long mibs[ICMP6_MIB_MAX];
|
||||
} __SNMP_MIB_ALIGN__;
|
||||
};
|
||||
|
||||
#define ICMP6MSG_MIB_MAX __ICMP6MSG_MIB_MAX
|
||||
struct icmpv6msg_mib {
|
||||
unsigned long mibs[ICMP6MSG_MIB_MAX];
|
||||
} __SNMP_MIB_ALIGN__;
|
||||
};
|
||||
|
||||
|
||||
/* TCP */
|
||||
#define TCP_MIB_MAX __TCP_MIB_MAX
|
||||
struct tcp_mib {
|
||||
unsigned long mibs[TCP_MIB_MAX];
|
||||
} __SNMP_MIB_ALIGN__;
|
||||
};
|
||||
|
||||
/* UDP */
|
||||
#define UDP_MIB_MAX __UDP_MIB_MAX
|
||||
struct udp_mib {
|
||||
unsigned long mibs[UDP_MIB_MAX];
|
||||
} __SNMP_MIB_ALIGN__;
|
||||
};
|
||||
|
||||
/* Linux */
|
||||
#define LINUX_MIB_MAX __LINUX_MIB_MAX
|
||||
|
|
|
@ -189,7 +189,7 @@ enum {
|
|||
#define DCCP_MIB_MAX __DCCP_MIB_MAX
|
||||
struct dccp_mib {
|
||||
unsigned long mibs[DCCP_MIB_MAX];
|
||||
} __SNMP_MIB_ALIGN__;
|
||||
};
|
||||
|
||||
DECLARE_SNMP_STAT(struct dccp_mib, dccp_statistics);
|
||||
#define DCCP_INC_STATS(field) SNMP_INC_STATS(dccp_statistics, field)
|
||||
|
|
|
@ -1401,10 +1401,10 @@ EXPORT_SYMBOL_GPL(snmp_fold_field);
|
|||
int snmp_mib_init(void __percpu *ptr[2], size_t mibsize)
|
||||
{
|
||||
BUG_ON(ptr == NULL);
|
||||
ptr[0] = __alloc_percpu(mibsize, __alignof__(unsigned long long));
|
||||
ptr[0] = __alloc_percpu(mibsize, __alignof__(unsigned long));
|
||||
if (!ptr[0])
|
||||
goto err0;
|
||||
ptr[1] = __alloc_percpu(mibsize, __alignof__(unsigned long long));
|
||||
ptr[1] = __alloc_percpu(mibsize, __alignof__(unsigned long));
|
||||
if (!ptr[1])
|
||||
goto err1;
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue