Re: [RFC PATCH v2 1/6] can: dev: add generic function can_update_bus_error_stats()
From: Marc Kleine-Budde
Date: Tue Oct 29 2024 - 04:50:36 EST
Hello Dario,
On 29.10.2024 09:44:45, Dario Binacchi wrote:
> The function aims to generalize the statistics update by centralizing
> the related code, thus avoiding code duplication.
>
> Signed-off-by: Dario Binacchi <dario.binacchi@xxxxxxxxxxxxxxxxxxxx>
> ---
no proper review, just found that double assignment.
Marc
>
> (no changes since v1)
>
> drivers/net/can/dev/dev.c | 30 ++++++++++++++++++++++++++++++
> include/linux/can/dev.h | 1 +
> 2 files changed, 31 insertions(+)
>
> diff --git a/drivers/net/can/dev/dev.c b/drivers/net/can/dev/dev.c
> index 6792c14fd7eb..0a3b1aad405b 100644
> --- a/drivers/net/can/dev/dev.c
> +++ b/drivers/net/can/dev/dev.c
> @@ -16,6 +16,36 @@
> #include <linux/gpio/consumer.h>
> #include <linux/of.h>
>
> +void can_update_bus_error_stats(struct net_device *dev, struct can_frame *cf)
> +{
> + struct can_priv *priv = netdev_priv(dev);
^^^^^^^^^^^^^^^^
> + bool rx_errors = false, tx_errors = false;
> +
> + if (!cf || !(cf->can_id & (CAN_ERR_PROT | CAN_ERR_BUSERROR)))
> + return;
> +
> + priv = netdev_priv(dev);
^^^^^^^^^^^^^^^^
> + priv->can_stats.bus_error++;
> +
> + if ((cf->can_id & CAN_ERR_ACK) && cf->data[3] == CAN_ERR_PROT_LOC_ACK)
> + tx_errors = true;
> + else if (cf->data[2] & (CAN_ERR_PROT_BIT1 | CAN_ERR_PROT_BIT0))
> + tx_errors = true;
> +
> + if (cf->data[2] & (CAN_ERR_PROT_FORM | CAN_ERR_PROT_STUFF))
> + rx_errors = true;
> + else if ((cf->data[2] & CAN_ERR_PROT_BIT) &&
> + (cf->data[3] == CAN_ERR_PROT_LOC_CRC_SEQ))
> + rx_errors = true;
> +
> + if (rx_errors)
> + dev->stats.rx_errors++;
> +
> + if (tx_errors)
> + dev->stats.tx_errors++;
> +}
> +EXPORT_SYMBOL_GPL(can_update_bus_error_stats);
> +
> static void can_update_state_error_stats(struct net_device *dev,
> enum can_state new_state)
> {
> diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h
> index 23492213ea35..0977656b366d 100644
> --- a/include/linux/can/dev.h
> +++ b/include/linux/can/dev.h
> @@ -201,6 +201,7 @@ void can_state_get_by_berr_counter(const struct net_device *dev,
> enum can_state *rx_state);
> void can_change_state(struct net_device *dev, struct can_frame *cf,
> enum can_state tx_state, enum can_state rx_state);
> +void can_update_bus_error_stats(struct net_device *dev, struct can_frame *cf);
>
> #ifdef CONFIG_OF
> void of_can_transceiver(struct net_device *dev);
> --
> 2.43.0
>
>
--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung Nürnberg | Phone: +49-5121-206917-129 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
Attachment:
signature.asc
Description: PGP signature