net: fix softnet_stat
Per cpu variable softnet_data.total was shared between IRQ and SoftIRQ context without any protection. And enqueue_to_backlog should update the netdev_rx_stat of the target CPU. This patch renames softnet_data.total to softnet_data.processed: the number of packets processed in uppper levels(IP stacks). softnet_stat data is moved into softnet_data. Signed-off-by: Changli Gao <xiaosuo@gmail.com> ---- include/linux/netdevice.h | 17 +++++++---------- net/core/dev.c | 26 ++++++++++++-------------- net/sched/sch_generic.c | 2 +- 3 files changed, 20 insertions(+), 25 deletions(-) Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7ef527377b
commit
dee42870a4
3 changed files with 20 additions and 25 deletions
|
@ -218,16 +218,6 @@ struct neighbour;
|
|||
struct neigh_parms;
|
||||
struct sk_buff;
|
||||
|
||||
struct netif_rx_stats {
|
||||
unsigned total;
|
||||
unsigned dropped;
|
||||
unsigned time_squeeze;
|
||||
unsigned cpu_collision;
|
||||
unsigned received_rps;
|
||||
};
|
||||
|
||||
DECLARE_PER_CPU(struct netif_rx_stats, netdev_rx_stat);
|
||||
|
||||
struct netdev_hw_addr {
|
||||
struct list_head list;
|
||||
unsigned char addr[MAX_ADDR_LEN];
|
||||
|
@ -1390,6 +1380,12 @@ struct softnet_data {
|
|||
struct sk_buff *completion_queue;
|
||||
struct sk_buff_head process_queue;
|
||||
|
||||
/* stats */
|
||||
unsigned processed;
|
||||
unsigned time_squeeze;
|
||||
unsigned cpu_collision;
|
||||
unsigned received_rps;
|
||||
|
||||
#ifdef CONFIG_RPS
|
||||
struct softnet_data *rps_ipi_list;
|
||||
|
||||
|
@ -1399,6 +1395,7 @@ struct softnet_data {
|
|||
unsigned int cpu;
|
||||
unsigned int input_queue_head;
|
||||
#endif
|
||||
unsigned dropped;
|
||||
struct sk_buff_head input_pkt_queue;
|
||||
struct napi_struct backlog;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue