[PATCH v3 1/5] can: do not increase rx statistics when generating a CAN rx error message frame
Jimmy Assarsson
extja at kvaser.com
Thu Dec 2 15:35:09 PST 2021
On 2021-11-28 13:37, Vincent Mailhol wrote:
> The CAN error message frames (i.e. error skb) are an interface
> specific to socket CAN. The payload of the CAN error message frames
> does not correspond to any actual data sent on the wire. Only an error
> flag and a delimiter are transmitted when an error occurs (c.f. ISO
> 11898-1 section 10.4.4.2 "Error flag").
>
> For this reason, it makes no sense to increment the rx_packets and
> rx_bytes fields of struct net_device_stats because no actual payload
> were transmitted on the wire.
>
> This patch fixes all the CAN drivers.
Hi Vincent!
Thanks for the patches and sorry for the delay.
I've reviewed and tested the changes affecting kvaser_{pciefd,usb}.
Looks good to me!
Best regards,
jimmy
> CC: Jimmy Assarsson <extja at kvaser.com>
> CC: Marc Kleine-Budde <mkl at pengutronix.de>
> CC: Nicolas Ferre <nicolas.ferre at microchip.com>
> CC: Alexandre Belloni <alexandre.belloni at bootlin.com>
> CC: Ludovic Desroches <ludovic.desroches at microchip.com>
> CC: Chandrasekar Ramakrishnan <rcsekar at samsung.com>
> CC: Maxime Ripard <mripard at kernel.org>
> CC: Chen-Yu Tsai <wens at csie.org>
> CC: Jernej Skrabec <jernej.skrabec at gmail.com>
> CC: Appana Durga Kedareswara rao <appana.durga.rao at xilinx.com>
> CC: Naga Sureshkumar Relli <naga.sureshkumar.relli at xilinx.com>
> CC: Michal Simek <michal.simek at xilinx.com>
> CC: Stephane Grosjean <s.grosjean at peak-system.com>
> Signed-off-by: Vincent Mailhol <mailhol.vincent at wanadoo.fr>
> ---
> drivers/net/can/at91_can.c | 6 ------
> drivers/net/can/c_can/c_can_main.c | 5 -----
> drivers/net/can/cc770/cc770.c | 3 ---
> drivers/net/can/dev/dev.c | 4 ----
> drivers/net/can/dev/rx-offload.c | 6 ++++--
> drivers/net/can/ifi_canfd/ifi_canfd.c | 5 -----
> drivers/net/can/kvaser_pciefd.c | 5 -----
> drivers/net/can/m_can/m_can.c | 7 -------
> drivers/net/can/mscan/mscan.c | 9 +++++----
> drivers/net/can/pch_can.c | 3 ---
> drivers/net/can/peak_canfd/peak_canfd.c | 4 ----
> drivers/net/can/rcar/rcar_can.c | 6 +-----
> drivers/net/can/rcar/rcar_canfd.c | 4 ----
> drivers/net/can/sja1000/sja1000.c | 2 --
> drivers/net/can/sun4i_can.c | 7 ++-----
> drivers/net/can/usb/ems_usb.c | 2 --
> drivers/net/can/usb/esd_usb2.c | 2 --
> drivers/net/can/usb/etas_es58x/es58x_core.c | 7 -------
> drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c | 2 --
> drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c | 8 --------
> drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c | 4 ----
> drivers/net/can/usb/peak_usb/pcan_usb.c | 2 --
> drivers/net/can/usb/peak_usb/pcan_usb_fd.c | 3 ---
> drivers/net/can/usb/peak_usb/pcan_usb_pro.c | 2 --
> drivers/net/can/usb/ucan.c | 6 ++++--
> drivers/net/can/usb/usb_8dev.c | 2 --
> drivers/net/can/xilinx_can.c | 9 +--------
> 27 files changed, 17 insertions(+), 108 deletions(-)
>
> diff --git a/drivers/net/can/at91_can.c b/drivers/net/can/at91_can.c
> index 3aea32c9b108..3cd872cf9be6 100644
> --- a/drivers/net/can/at91_can.c
> +++ b/drivers/net/can/at91_can.c
> @@ -553,8 +553,6 @@ static void at91_rx_overflow_err(struct net_device *dev)
> cf->can_id |= CAN_ERR_CRTL;
> cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
>
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> netif_receive_skb(skb);
> }
>
> @@ -779,8 +777,6 @@ static int at91_poll_err(struct net_device *dev, int quota, u32 reg_sr)
>
> at91_poll_err_frame(dev, cf, reg_sr);
>
> - dev->stats.rx_packets++;
> - dev->stats.rx_bytes += cf->len;
> netif_receive_skb(skb);
>
> return 1;
> @@ -1037,8 +1033,6 @@ static void at91_irq_err(struct net_device *dev)
>
> at91_irq_err_state(dev, cf, new_state);
>
> - dev->stats.rx_packets++;
> - dev->stats.rx_bytes += cf->len;
> netif_rx(skb);
>
> priv->can.state = new_state;
> diff --git a/drivers/net/can/c_can/c_can_main.c b/drivers/net/can/c_can/c_can_main.c
> index 52671d1ea17d..670754a12984 100644
> --- a/drivers/net/can/c_can/c_can_main.c
> +++ b/drivers/net/can/c_can/c_can_main.c
> @@ -920,7 +920,6 @@ static int c_can_handle_state_change(struct net_device *dev,
> unsigned int reg_err_counter;
> unsigned int rx_err_passive;
> struct c_can_priv *priv = netdev_priv(dev);
> - struct net_device_stats *stats = &dev->stats;
> struct can_frame *cf;
> struct sk_buff *skb;
> struct can_berr_counter bec;
> @@ -996,8 +995,6 @@ static int c_can_handle_state_change(struct net_device *dev,
> break;
> }
>
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> netif_receive_skb(skb);
>
> return 1;
> @@ -1064,8 +1061,6 @@ static int c_can_handle_bus_err(struct net_device *dev,
> break;
> }
>
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> netif_receive_skb(skb);
> return 1;
> }
> diff --git a/drivers/net/can/cc770/cc770.c b/drivers/net/can/cc770/cc770.c
> index f8a130f594e2..a5fd8ccedec2 100644
> --- a/drivers/net/can/cc770/cc770.c
> +++ b/drivers/net/can/cc770/cc770.c
> @@ -499,7 +499,6 @@ static void cc770_rx(struct net_device *dev, unsigned int mo, u8 ctrl1)
> static int cc770_err(struct net_device *dev, u8 status)
> {
> struct cc770_priv *priv = netdev_priv(dev);
> - struct net_device_stats *stats = &dev->stats;
> struct can_frame *cf;
> struct sk_buff *skb;
> u8 lec;
> @@ -571,8 +570,6 @@ static int cc770_err(struct net_device *dev, u8 status)
> }
>
>
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> netif_rx(skb);
>
> return 0;
> diff --git a/drivers/net/can/dev/dev.c b/drivers/net/can/dev/dev.c
> index e3d840b81357..4845ae6456e1 100644
> --- a/drivers/net/can/dev/dev.c
> +++ b/drivers/net/can/dev/dev.c
> @@ -136,7 +136,6 @@ EXPORT_SYMBOL_GPL(can_change_state);
> static void can_restart(struct net_device *dev)
> {
> struct can_priv *priv = netdev_priv(dev);
> - struct net_device_stats *stats = &dev->stats;
> struct sk_buff *skb;
> struct can_frame *cf;
> int err;
> @@ -155,9 +154,6 @@ static void can_restart(struct net_device *dev)
>
> cf->can_id |= CAN_ERR_RESTARTED;
>
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> -
> netif_rx_ni(skb);
>
> restart:
> diff --git a/drivers/net/can/dev/rx-offload.c b/drivers/net/can/dev/rx-offload.c
> index 37b0cc65237b..7dbf46b9ca5d 100644
> --- a/drivers/net/can/dev/rx-offload.c
> +++ b/drivers/net/can/dev/rx-offload.c
> @@ -54,8 +54,10 @@ static int can_rx_offload_napi_poll(struct napi_struct *napi, int quota)
> struct can_frame *cf = (struct can_frame *)skb->data;
>
> work_done++;
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> + if (!(cf->can_id & CAN_ERR_FLAG)) {
> + stats->rx_packets++;
> + stats->rx_bytes += cf->len;
> + }
> netif_receive_skb(skb);
> }
>
> diff --git a/drivers/net/can/ifi_canfd/ifi_canfd.c b/drivers/net/can/ifi_canfd/ifi_canfd.c
> index 5bb957a26bc6..e8318e984bf2 100644
> --- a/drivers/net/can/ifi_canfd/ifi_canfd.c
> +++ b/drivers/net/can/ifi_canfd/ifi_canfd.c
> @@ -430,8 +430,6 @@ static int ifi_canfd_handle_lec_err(struct net_device *ndev)
> priv->base + IFI_CANFD_INTERRUPT);
> writel(IFI_CANFD_ERROR_CTR_ER_ENABLE, priv->base + IFI_CANFD_ERROR_CTR);
>
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> netif_receive_skb(skb);
>
> return 1;
> @@ -456,7 +454,6 @@ static int ifi_canfd_handle_state_change(struct net_device *ndev,
> enum can_state new_state)
> {
> struct ifi_canfd_priv *priv = netdev_priv(ndev);
> - struct net_device_stats *stats = &ndev->stats;
> struct can_frame *cf;
> struct sk_buff *skb;
> struct can_berr_counter bec;
> @@ -522,8 +519,6 @@ static int ifi_canfd_handle_state_change(struct net_device *ndev,
> break;
> }
>
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> netif_receive_skb(skb);
>
> return 1;
> diff --git a/drivers/net/can/kvaser_pciefd.c b/drivers/net/can/kvaser_pciefd.c
> index 74d9899fc904..483fbd9e6952 100644
> --- a/drivers/net/can/kvaser_pciefd.c
> +++ b/drivers/net/can/kvaser_pciefd.c
> @@ -1304,9 +1304,6 @@ static int kvaser_pciefd_rx_error_frame(struct kvaser_pciefd_can *can,
> cf->data[6] = bec.txerr;
> cf->data[7] = bec.rxerr;
>
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> -
> netif_rx(skb);
> return 0;
> }
> @@ -1504,8 +1501,6 @@ static void kvaser_pciefd_handle_nack_packet(struct kvaser_pciefd_can *can,
>
> if (skb) {
> cf->can_id |= CAN_ERR_BUSERROR;
> - stats->rx_bytes += cf->len;
> - stats->rx_packets++;
> netif_rx(skb);
> } else {
> stats->rx_dropped++;
> diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
> index f4f54012dea7..c33035e706bc 100644
> --- a/drivers/net/can/m_can/m_can.c
> +++ b/drivers/net/can/m_can/m_can.c
> @@ -647,9 +647,6 @@ static int m_can_handle_lec_err(struct net_device *dev,
> break;
> }
>
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> -
> if (cdev->is_peripheral)
> timestamp = m_can_get_timestamp(cdev);
>
> @@ -706,7 +703,6 @@ static int m_can_handle_state_change(struct net_device *dev,
> enum can_state new_state)
> {
> struct m_can_classdev *cdev = netdev_priv(dev);
> - struct net_device_stats *stats = &dev->stats;
> struct can_frame *cf;
> struct sk_buff *skb;
> struct can_berr_counter bec;
> @@ -771,9 +767,6 @@ static int m_can_handle_state_change(struct net_device *dev,
> break;
> }
>
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> -
> if (cdev->is_peripheral)
> timestamp = m_can_get_timestamp(cdev);
>
> diff --git a/drivers/net/can/mscan/mscan.c b/drivers/net/can/mscan/mscan.c
> index fa32e418eb29..9e1cce0260da 100644
> --- a/drivers/net/can/mscan/mscan.c
> +++ b/drivers/net/can/mscan/mscan.c
> @@ -401,13 +401,14 @@ static int mscan_rx_poll(struct napi_struct *napi, int quota)
> continue;
> }
>
> - if (canrflg & MSCAN_RXF)
> + if (canrflg & MSCAN_RXF) {
> mscan_get_rx_frame(dev, frame);
> - else if (canrflg & MSCAN_ERR_IF)
> + stats->rx_packets++;
> + stats->rx_bytes += frame->len;
> + } else if (canrflg & MSCAN_ERR_IF) {
> mscan_get_err_frame(dev, frame, canrflg);
> + }
>
> - stats->rx_packets++;
> - stats->rx_bytes += frame->len;
> work_done++;
> netif_receive_skb(skb);
> }
> diff --git a/drivers/net/can/pch_can.c b/drivers/net/can/pch_can.c
> index 964c8a09226a..6b45840db1f9 100644
> --- a/drivers/net/can/pch_can.c
> +++ b/drivers/net/can/pch_can.c
> @@ -561,9 +561,6 @@ static void pch_can_error(struct net_device *ndev, u32 status)
>
> priv->can.state = state;
> netif_receive_skb(skb);
> -
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> }
>
> static irqreturn_t pch_can_interrupt(int irq, void *dev_id)
> diff --git a/drivers/net/can/peak_canfd/peak_canfd.c b/drivers/net/can/peak_canfd/peak_canfd.c
> index d08718e98e11..d5b8bc6d2980 100644
> --- a/drivers/net/can/peak_canfd/peak_canfd.c
> +++ b/drivers/net/can/peak_canfd/peak_canfd.c
> @@ -409,8 +409,6 @@ static int pucan_handle_status(struct peak_canfd_priv *priv,
> return -ENOMEM;
> }
>
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> pucan_netif_rx(skb, msg->ts_low, msg->ts_high);
>
> return 0;
> @@ -438,8 +436,6 @@ static int pucan_handle_cache_critical(struct peak_canfd_priv *priv)
> cf->data[6] = priv->bec.txerr;
> cf->data[7] = priv->bec.rxerr;
>
> - stats->rx_bytes += cf->len;
> - stats->rx_packets++;
> netif_rx(skb);
>
> return 0;
> diff --git a/drivers/net/can/rcar/rcar_can.c b/drivers/net/can/rcar/rcar_can.c
> index 8999ec9455ec..f408ed9a6ccd 100644
> --- a/drivers/net/can/rcar/rcar_can.c
> +++ b/drivers/net/can/rcar/rcar_can.c
> @@ -223,7 +223,6 @@ static void tx_failure_cleanup(struct net_device *ndev)
> static void rcar_can_error(struct net_device *ndev)
> {
> struct rcar_can_priv *priv = netdev_priv(ndev);
> - struct net_device_stats *stats = &ndev->stats;
> struct can_frame *cf;
> struct sk_buff *skb;
> u8 eifr, txerr = 0, rxerr = 0;
> @@ -362,11 +361,8 @@ static void rcar_can_error(struct net_device *ndev)
> }
> }
>
> - if (skb) {
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> + if (skb)
> netif_rx(skb);
> - }
> }
>
> static void rcar_can_tx_done(struct net_device *ndev)
> diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
> index ff9d0f5ae0dd..db9d62874e15 100644
> --- a/drivers/net/can/rcar/rcar_canfd.c
> +++ b/drivers/net/can/rcar/rcar_canfd.c
> @@ -1033,8 +1033,6 @@ static void rcar_canfd_error(struct net_device *ndev, u32 cerfl,
> /* Clear channel error interrupts that are handled */
> rcar_canfd_write(priv->base, RCANFD_CERFL(ch),
> RCANFD_CERFL_ERR(~cerfl));
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> netif_rx(skb);
> }
>
> @@ -1174,8 +1172,6 @@ static void rcar_canfd_state_change(struct net_device *ndev,
> rx_state = txerr <= rxerr ? state : 0;
>
> can_change_state(ndev, cf, tx_state, rx_state);
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> netif_rx(skb);
> }
> }
> diff --git a/drivers/net/can/sja1000/sja1000.c b/drivers/net/can/sja1000/sja1000.c
> index 3fad54646746..a65546ca9461 100644
> --- a/drivers/net/can/sja1000/sja1000.c
> +++ b/drivers/net/can/sja1000/sja1000.c
> @@ -487,8 +487,6 @@ static int sja1000_err(struct net_device *dev, uint8_t isrc, uint8_t status)
> can_bus_off(dev);
> }
>
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> netif_rx(skb);
>
> return 0;
> diff --git a/drivers/net/can/sun4i_can.c b/drivers/net/can/sun4i_can.c
> index 54aa7c25c4de..599174098883 100644
> --- a/drivers/net/can/sun4i_can.c
> +++ b/drivers/net/can/sun4i_can.c
> @@ -622,13 +622,10 @@ static int sun4i_can_err(struct net_device *dev, u8 isrc, u8 status)
> can_bus_off(dev);
> }
>
> - if (likely(skb)) {
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> + if (likely(skb))
> netif_rx(skb);
> - } else {
> + else
> return -ENOMEM;
> - }
>
> return 0;
> }
> diff --git a/drivers/net/can/usb/ems_usb.c b/drivers/net/can/usb/ems_usb.c
> index 2b5302e72435..7cf65936d02e 100644
> --- a/drivers/net/can/usb/ems_usb.c
> +++ b/drivers/net/can/usb/ems_usb.c
> @@ -397,8 +397,6 @@ static void ems_usb_rx_err(struct ems_usb *dev, struct ems_cpc_msg *msg)
> stats->rx_errors++;
> }
>
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> netif_rx(skb);
> }
>
> diff --git a/drivers/net/can/usb/esd_usb2.c b/drivers/net/can/usb/esd_usb2.c
> index c6068a251fbe..5f6915a27b3d 100644
> --- a/drivers/net/can/usb/esd_usb2.c
> +++ b/drivers/net/can/usb/esd_usb2.c
> @@ -293,8 +293,6 @@ static void esd_usb2_rx_event(struct esd_usb2_net_priv *priv,
> priv->bec.txerr = txerr;
> priv->bec.rxerr = rxerr;
>
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> netif_rx(skb);
> }
> }
> diff --git a/drivers/net/can/usb/etas_es58x/es58x_core.c b/drivers/net/can/usb/etas_es58x/es58x_core.c
> index 8508a73d648e..2ed2370a3166 100644
> --- a/drivers/net/can/usb/etas_es58x/es58x_core.c
> +++ b/drivers/net/can/usb/etas_es58x/es58x_core.c
> @@ -849,13 +849,6 @@ int es58x_rx_err_msg(struct net_device *netdev, enum es58x_err error,
> break;
> }
>
> - /* driver/net/can/dev.c:can_restart() takes in account error
> - * messages in the RX stats. Doing the same here for
> - * consistency.
> - */
> - netdev->stats.rx_packets++;
> - netdev->stats.rx_bytes += CAN_ERR_DLC;
> -
> if (cf) {
> if (cf->data[1])
> cf->can_id |= CAN_ERR_CRTL;
> diff --git a/drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c b/drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c
> index 0cc0fc866a2a..3e682ef43f8e 100644
> --- a/drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c
> +++ b/drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c
> @@ -279,8 +279,6 @@ int kvaser_usb_can_rx_over_error(struct net_device *netdev)
> cf->can_id |= CAN_ERR_CRTL;
> cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
>
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> netif_rx(skb);
>
> return 0;
> diff --git a/drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c b/drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c
> index dcee8dc828ec..3398da323126 100644
> --- a/drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c
> +++ b/drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c
> @@ -869,7 +869,6 @@ static void kvaser_usb_hydra_update_state(struct kvaser_usb_net_priv *priv,
> struct net_device *netdev = priv->netdev;
> struct can_frame *cf;
> struct sk_buff *skb;
> - struct net_device_stats *stats;
> enum can_state new_state, old_state;
>
> old_state = priv->can.state;
> @@ -919,9 +918,6 @@ static void kvaser_usb_hydra_update_state(struct kvaser_usb_net_priv *priv,
> cf->data[6] = bec->txerr;
> cf->data[7] = bec->rxerr;
>
> - stats = &netdev->stats;
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> netif_rx(skb);
> }
>
> @@ -1074,8 +1070,6 @@ kvaser_usb_hydra_error_frame(struct kvaser_usb_net_priv *priv,
> cf->data[6] = bec.txerr;
> cf->data[7] = bec.rxerr;
>
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> netif_rx(skb);
>
> priv->bec.txerr = bec.txerr;
> @@ -1109,8 +1103,6 @@ static void kvaser_usb_hydra_one_shot_fail(struct kvaser_usb_net_priv *priv,
> }
>
> stats->tx_errors++;
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> netif_rx(skb);
> }
>
> diff --git a/drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c b/drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c
> index 59ba7c7beec0..4aebaab9ea9c 100644
> --- a/drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c
> +++ b/drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c
> @@ -575,8 +575,6 @@ static void kvaser_usb_leaf_tx_acknowledge(const struct kvaser_usb *dev,
> if (skb) {
> cf->can_id |= CAN_ERR_RESTARTED;
>
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> netif_rx(skb);
> } else {
> netdev_err(priv->netdev,
> @@ -777,8 +775,6 @@ static void kvaser_usb_leaf_rx_error(const struct kvaser_usb *dev,
> cf->data[6] = es->txerr;
> cf->data[7] = es->rxerr;
>
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> netif_rx(skb);
> }
>
> diff --git a/drivers/net/can/usb/peak_usb/pcan_usb.c b/drivers/net/can/usb/peak_usb/pcan_usb.c
> index 876218752766..21b06a738595 100644
> --- a/drivers/net/can/usb/peak_usb/pcan_usb.c
> +++ b/drivers/net/can/usb/peak_usb/pcan_usb.c
> @@ -520,8 +520,6 @@ static int pcan_usb_decode_error(struct pcan_usb_msg_context *mc, u8 n,
> &hwts->hwtstamp);
> }
>
> - mc->netdev->stats.rx_packets++;
> - mc->netdev->stats.rx_bytes += cf->len;
> netif_rx(skb);
>
> return 0;
> diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
> index 6bd12549f101..185f5a98d217 100644
> --- a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
> +++ b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
> @@ -577,9 +577,6 @@ static int pcan_usb_fd_decode_status(struct pcan_usb_fd_if *usb_if,
> if (!skb)
> return -ENOMEM;
>
> - netdev->stats.rx_packets++;
> - netdev->stats.rx_bytes += cf->len;
> -
> peak_usb_netif_rx_64(skb, le32_to_cpu(sm->ts_low),
> le32_to_cpu(sm->ts_high));
>
> diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c
> index 858ab22708fc..f6d19879bf40 100644
> --- a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c
> +++ b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c
> @@ -660,8 +660,6 @@ static int pcan_usb_pro_handle_error(struct pcan_usb_pro_interface *usb_if,
>
> hwts = skb_hwtstamps(skb);
> peak_usb_get_ts_time(&usb_if->time_ref, le32_to_cpu(er->ts32), &hwts->hwtstamp);
> - netdev->stats.rx_packets++;
> - netdev->stats.rx_bytes += can_frame->len;
> netif_rx(skb);
>
> return 0;
> diff --git a/drivers/net/can/usb/ucan.c b/drivers/net/can/usb/ucan.c
> index 1679cbe45ded..d582c39fc8d0 100644
> --- a/drivers/net/can/usb/ucan.c
> +++ b/drivers/net/can/usb/ucan.c
> @@ -621,8 +621,10 @@ static void ucan_rx_can_msg(struct ucan_priv *up, struct ucan_message_in *m)
> memcpy(cf->data, m->msg.can_msg.data, cf->len);
>
> /* don't count error frames as real packets */
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> + if (!(cf->can_id & CAN_ERR_FLAG)) {
> + stats->rx_packets++;
> + stats->rx_bytes += cf->len;
> + }
>
> /* pass it to Linux */
> netif_rx(skb);
> diff --git a/drivers/net/can/usb/usb_8dev.c b/drivers/net/can/usb/usb_8dev.c
> index d1b83bd1b3cb..040324362b26 100644
> --- a/drivers/net/can/usb/usb_8dev.c
> +++ b/drivers/net/can/usb/usb_8dev.c
> @@ -449,8 +449,6 @@ static void usb_8dev_rx_err_msg(struct usb_8dev_priv *priv,
> priv->bec.txerr = txerr;
> priv->bec.rxerr = rxerr;
>
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> netif_rx(skb);
> }
>
> diff --git a/drivers/net/can/xilinx_can.c b/drivers/net/can/xilinx_can.c
> index e2b15d29d15e..275e240ab293 100644
> --- a/drivers/net/can/xilinx_can.c
> +++ b/drivers/net/can/xilinx_can.c
> @@ -965,13 +965,8 @@ static void xcan_update_error_state_after_rxtx(struct net_device *ndev)
>
> xcan_set_error_state(ndev, new_state, skb ? cf : NULL);
>
> - if (skb) {
> - struct net_device_stats *stats = &ndev->stats;
> -
> - stats->rx_packets++;
> - stats->rx_bytes += cf->len;
> + if (skb)
> netif_rx(skb);
> - }
> }
> }
>
> @@ -1095,8 +1090,6 @@ static void xcan_err_interrupt(struct net_device *ndev, u32 isr)
> if (skb) {
> skb_cf->can_id |= cf.can_id;
> memcpy(skb_cf->data, cf.data, CAN_ERR_DLC);
> - stats->rx_packets++;
> - stats->rx_bytes += CAN_ERR_DLC;
> netif_rx(skb);
> }
> }
>
More information about the linux-arm-kernel
mailing list