diff --git a/net/can/af_can.c b/net/can/af_can.c index bbd8e959137d..7d8543e877b4 100644 --- a/net/can/af_can.c +++ b/net/can/af_can.c @@ -287,8 +287,8 @@ int can_send(struct sk_buff *skb, int loop) netif_rx(newskb); /* update statistics */ - atomic_long_inc(&pkg_stats->tx_frames); - atomic_long_inc(&pkg_stats->tx_frames_delta); + pkg_stats->tx_frames++; + pkg_stats->tx_frames_delta++; return 0; @@ -648,8 +648,8 @@ static void can_receive(struct sk_buff *skb, struct net_device *dev) int matches; /* update statistics */ - atomic_long_inc(&pkg_stats->rx_frames); - atomic_long_inc(&pkg_stats->rx_frames_delta); + pkg_stats->rx_frames++; + pkg_stats->rx_frames_delta++; /* create non-zero unique skb identifier together with *skb */ while (!(can_skb_prv(skb)->skbcnt)) @@ -670,8 +670,8 @@ static void can_receive(struct sk_buff *skb, struct net_device *dev) consume_skb(skb); if (matches > 0) { - atomic_long_inc(&pkg_stats->matches); - atomic_long_inc(&pkg_stats->matches_delta); + pkg_stats->matches++; + pkg_stats->matches_delta++; } } diff --git a/net/can/af_can.h b/net/can/af_can.h index 22f3352c77fe..7c2d9161e224 100644 --- a/net/can/af_can.h +++ b/net/can/af_can.h @@ -66,9 +66,9 @@ struct receiver { struct can_pkg_stats { unsigned long jiffies_init; - atomic_long_t rx_frames; - atomic_long_t tx_frames; - atomic_long_t matches; + unsigned long rx_frames; + unsigned long tx_frames; + unsigned long matches; unsigned long total_rx_rate; unsigned long total_tx_rate; @@ -82,9 +82,9 @@ struct can_pkg_stats { unsigned long max_tx_rate; unsigned long max_rx_match_ratio; - atomic_long_t rx_frames_delta; - atomic_long_t tx_frames_delta; - atomic_long_t matches_delta; + unsigned long rx_frames_delta; + unsigned long tx_frames_delta; + unsigned long matches_delta; }; /* persistent statistics */ diff --git a/net/can/proc.c b/net/can/proc.c index 25fdf060e30d..bbce97825f13 100644 --- a/net/can/proc.c +++ b/net/can/proc.c @@ -118,13 +118,6 @@ void can_stat_update(struct timer_list *t) struct can_pkg_stats *pkg_stats = net->can.pkg_stats; unsigned long j = jiffies; /* snapshot */ - long rx_frames = atomic_long_read(&pkg_stats->rx_frames); - long tx_frames = atomic_long_read(&pkg_stats->tx_frames); - long matches = atomic_long_read(&pkg_stats->matches); - long rx_frames_delta = atomic_long_read(&pkg_stats->rx_frames_delta); - long tx_frames_delta = atomic_long_read(&pkg_stats->tx_frames_delta); - long matches_delta = atomic_long_read(&pkg_stats->matches_delta); - /* restart counting in timer context on user request */ if (user_reset) can_init_stats(net); @@ -134,33 +127,35 @@ void can_stat_update(struct timer_list *t) can_init_stats(net); /* prevent overflow in calc_rate() */ - if (rx_frames > (LONG_MAX / HZ)) + if (pkg_stats->rx_frames > (ULONG_MAX / HZ)) can_init_stats(net); /* prevent overflow in calc_rate() */ - if (tx_frames > (LONG_MAX / HZ)) + if (pkg_stats->tx_frames > (ULONG_MAX / HZ)) can_init_stats(net); /* matches overflow - very improbable */ - if (matches > (LONG_MAX / 100)) + if (pkg_stats->matches > (ULONG_MAX / 100)) can_init_stats(net); /* calc total values */ - if (rx_frames) - pkg_stats->total_rx_match_ratio = (matches * 100) / rx_frames; + if (pkg_stats->rx_frames) + pkg_stats->total_rx_match_ratio = (pkg_stats->matches * 100) / + pkg_stats->rx_frames; pkg_stats->total_tx_rate = calc_rate(pkg_stats->jiffies_init, j, - tx_frames); + pkg_stats->tx_frames); pkg_stats->total_rx_rate = calc_rate(pkg_stats->jiffies_init, j, - rx_frames); + pkg_stats->rx_frames); /* calc current values */ - if (rx_frames_delta) + if (pkg_stats->rx_frames_delta) pkg_stats->current_rx_match_ratio = - (matches_delta * 100) / rx_frames_delta; + (pkg_stats->matches_delta * 100) / + pkg_stats->rx_frames_delta; - pkg_stats->current_tx_rate = calc_rate(0, HZ, tx_frames_delta); - pkg_stats->current_rx_rate = calc_rate(0, HZ, rx_frames_delta); + pkg_stats->current_tx_rate = calc_rate(0, HZ, pkg_stats->tx_frames_delta); + pkg_stats->current_rx_rate = calc_rate(0, HZ, pkg_stats->rx_frames_delta); /* check / update maximum values */ if (pkg_stats->max_tx_rate < pkg_stats->current_tx_rate) @@ -173,9 +168,9 @@ void can_stat_update(struct timer_list *t) pkg_stats->max_rx_match_ratio = pkg_stats->current_rx_match_ratio; /* clear values for 'current rate' calculation */ - atomic_long_set(&pkg_stats->tx_frames_delta, 0); - atomic_long_set(&pkg_stats->rx_frames_delta, 0); - atomic_long_set(&pkg_stats->matches_delta, 0); + pkg_stats->tx_frames_delta = 0; + pkg_stats->rx_frames_delta = 0; + pkg_stats->matches_delta = 0; /* restart timer (one second) */ mod_timer(&net->can.stattimer, round_jiffies(jiffies + HZ)); @@ -219,12 +214,9 @@ static int can_stats_proc_show(struct seq_file *m, void *v) struct can_rcv_lists_stats *rcv_lists_stats = net->can.rcv_lists_stats; seq_putc(m, '\n'); - seq_printf(m, " %8ld transmitted frames (TXF)\n", - atomic_long_read(&pkg_stats->tx_frames)); - seq_printf(m, " %8ld received frames (RXF)\n", - atomic_long_read(&pkg_stats->rx_frames)); - seq_printf(m, " %8ld matched frames (RXMF)\n", - atomic_long_read(&pkg_stats->matches)); + seq_printf(m, " %8ld transmitted frames (TXF)\n", pkg_stats->tx_frames); + seq_printf(m, " %8ld received frames (RXF)\n", pkg_stats->rx_frames); + seq_printf(m, " %8ld matched frames (RXMF)\n", pkg_stats->matches); seq_putc(m, '\n');