linux-can.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v6] can: move can_stats.bus_off++ from can_bus_off into can_change_state
@ 2014-12-11 14:15 Andri Yngvason
  2014-12-12 13:00 ` Wolfgang Grandegger
  2015-01-07 15:23 ` Marc Kleine-Budde
  0 siblings, 2 replies; 4+ messages in thread
From: Andri Yngvason @ 2014-12-11 14:15 UTC (permalink / raw)
  To: linux-can; +Cc: mkl, wg

In order to be able to move the stats increment from can_bus_off() into
can_change_state(), the increment had to be moved back into code that was using
can_bus_off() but not can_change_state().

As a side-effect, this patch fixes the following bugs:
 * Redundant call to can_bus_off() in c_can.
 * Bus-off counted twice in xilinx_can.

Signed-off-by: Andri Yngvason <andri.yngvason@marel.com>
---
 drivers/net/can/bfin_can.c                  | 1 +
 drivers/net/can/c_can/c_can.c               | 2 +-
 drivers/net/can/cc770/cc770.c               | 1 +
 drivers/net/can/dev.c                       | 3 ++-
 drivers/net/can/janz-ican3.c                | 1 +
 drivers/net/can/m_can/m_can.c               | 1 +
 drivers/net/can/pch_can.c                   | 1 +
 drivers/net/can/rcar_can.c                  | 1 +
 drivers/net/can/softing/softing_main.c      | 1 +
 drivers/net/can/spi/mcp251x.c               | 1 +
 drivers/net/can/ti_hecc.c                   | 1 +
 drivers/net/can/usb/ems_usb.c               | 1 +
 drivers/net/can/usb/esd_usb2.c              | 1 +
 drivers/net/can/usb/peak_usb/pcan_usb.c     | 1 +
 drivers/net/can/usb/peak_usb/pcan_usb_pro.c | 1 +
 drivers/net/can/usb/usb_8dev.c              | 1 +
 16 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/drivers/net/can/bfin_can.c b/drivers/net/can/bfin_can.c
index 543ecce..7c89430 100644
--- a/drivers/net/can/bfin_can.c
+++ b/drivers/net/can/bfin_can.c
@@ -352,6 +352,7 @@ static int bfin_can_err(struct net_device *dev, u16 isrc, u16 status)
 		netdev_dbg(dev, "bus-off mode interrupt\n");
 		state = CAN_STATE_BUS_OFF;
 		cf->can_id |= CAN_ERR_BUSOFF;
+		stats->bus_off++;
 		can_bus_off(dev);
 	}
 
diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c
index f94a9fa..70f77e9 100644
--- a/drivers/net/can/c_can/c_can.c
+++ b/drivers/net/can/c_can/c_can.c
@@ -866,7 +866,7 @@ static int c_can_handle_state_change(struct net_device *dev,
 	case C_CAN_BUS_OFF:
 		/* bus-off state */
 		priv->can.state = CAN_STATE_BUS_OFF;
-		can_bus_off(dev);
+		priv->can.can_stats.bus_off++;
 		break;
 	default:
 		break;
diff --git a/drivers/net/can/cc770/cc770.c b/drivers/net/can/cc770/cc770.c
index d837927..eea37cd 100644
--- a/drivers/net/can/cc770/cc770.c
+++ b/drivers/net/can/cc770/cc770.c
@@ -535,6 +535,7 @@ static int cc770_err(struct net_device *dev, u8 status)
 		cc770_write_reg(priv, control, CTRL_INI);
 		cf->can_id |= CAN_ERR_BUSOFF;
 		priv->can.state = CAN_STATE_BUS_OFF;
+		priv->can.can_stats.bus_off++;
 		can_bus_off(dev);
 	} else if (status & STAT_WARN) {
 		cf->can_id |= CAN_ERR_CRTL;
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
index b4ecb10..f652795 100644
--- a/drivers/net/can/dev.c
+++ b/drivers/net/can/dev.c
@@ -289,6 +289,8 @@ static void can_update_state_error_stats(struct net_device *dev,
 		priv->can_stats.error_passive++;
 		break;
 	case CAN_STATE_BUS_OFF:
+		priv->can_stats.bus_off++;
+		break;
 	default:
 		break;
 	};
@@ -544,7 +546,6 @@ void can_bus_off(struct net_device *dev)
 	netdev_dbg(dev, "bus-off\n");
 
 	netif_carrier_off(dev);
-	priv->can_stats.bus_off++;
 
 	if (priv->restart_ms)
 		mod_timer(&priv->restart_timer,
diff --git a/drivers/net/can/janz-ican3.c b/drivers/net/can/janz-ican3.c
index 2382c04..c68b9c0 100644
--- a/drivers/net/can/janz-ican3.c
+++ b/drivers/net/can/janz-ican3.c
@@ -1008,6 +1008,7 @@ static int ican3_handle_cevtind(struct ican3_dev *mod, struct ican3_msg *msg)
 		if (status & SR_BS) {
 			state = CAN_STATE_BUS_OFF;
 			cf->can_id |= CAN_ERR_BUSOFF;
+			mod->can.can_stats.bus_off++;
 			can_bus_off(dev);
 		} else if (status & SR_ES) {
 			if (rxerr >= 128 || txerr >= 128)
diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
index 10d571e..7202885 100644
--- a/drivers/net/can/m_can/m_can.c
+++ b/drivers/net/can/m_can/m_can.c
@@ -533,6 +533,7 @@ static int m_can_handle_state_change(struct net_device *dev,
 		/* bus-off state */
 		priv->can.state = CAN_STATE_BUS_OFF;
 		m_can_disable_all_interrupts(priv);
+		priv->can.can_stats.bus_off++;
 		can_bus_off(dev);
 		break;
 	default:
diff --git a/drivers/net/can/pch_can.c b/drivers/net/can/pch_can.c
index a67eb01..e187ca7 100644
--- a/drivers/net/can/pch_can.c
+++ b/drivers/net/can/pch_can.c
@@ -505,6 +505,7 @@ static void pch_can_error(struct net_device *ndev, u32 status)
 		pch_can_set_rx_all(priv, 0);
 		state = CAN_STATE_BUS_OFF;
 		cf->can_id |= CAN_ERR_BUSOFF;
+		priv->can.can_stats.bus_off++;
 		can_bus_off(ndev);
 	}
 
diff --git a/drivers/net/can/rcar_can.c b/drivers/net/can/rcar_can.c
index 1abe133..b88fc66 100644
--- a/drivers/net/can/rcar_can.c
+++ b/drivers/net/can/rcar_can.c
@@ -331,6 +331,7 @@ static void rcar_can_error(struct net_device *ndev)
 		priv->can.state = CAN_STATE_BUS_OFF;
 		/* Clear interrupt condition */
 		writeb(~RCAR_CAN_EIFR_BOEIF, &priv->regs->eifr);
+		priv->can.can_stats.bus_off++;
 		can_bus_off(ndev);
 		if (skb)
 			cf->can_id |= CAN_ERR_BUSOFF;
diff --git a/drivers/net/can/softing/softing_main.c b/drivers/net/can/softing/softing_main.c
index bacd236..566806a 100644
--- a/drivers/net/can/softing/softing_main.c
+++ b/drivers/net/can/softing/softing_main.c
@@ -261,6 +261,7 @@ static int softing_handle_1(struct softing *card)
 				++priv->can.can_stats.error_passive;
 			else if (can_state == CAN_STATE_BUS_OFF) {
 				/* this calls can_close_cleanup() */
+				++priv->can.can_stats.bus_off;
 				can_bus_off(netdev);
 				netif_stop_queue(netdev);
 			}
diff --git a/drivers/net/can/spi/mcp251x.c b/drivers/net/can/spi/mcp251x.c
index c66d699..bf63fee 100644
--- a/drivers/net/can/spi/mcp251x.c
+++ b/drivers/net/can/spi/mcp251x.c
@@ -905,6 +905,7 @@ static irqreturn_t mcp251x_can_ist(int irq, void *dev_id)
 		if (priv->can.state == CAN_STATE_BUS_OFF) {
 			if (priv->can.restart_ms == 0) {
 				priv->force_quit = 1;
+				priv->can.can_stats.bus_off++;
 				can_bus_off(net);
 				mcp251x_hw_sleep(spi);
 				break;
diff --git a/drivers/net/can/ti_hecc.c b/drivers/net/can/ti_hecc.c
index 258b9c4..6c775fa 100644
--- a/drivers/net/can/ti_hecc.c
+++ b/drivers/net/can/ti_hecc.c
@@ -715,6 +715,7 @@ static int ti_hecc_error(struct net_device *ndev, int int_status,
 		hecc_clear_bit(priv, HECC_CANMC, HECC_CANMC_CCR);
 		/* Disable all interrupts in bus-off to avoid int hog */
 		hecc_write(priv, HECC_CANGIM, 0);
+		++priv->can.can_stats.bus_off;
 		can_bus_off(ndev);
 	}
 
diff --git a/drivers/net/can/usb/ems_usb.c b/drivers/net/can/usb/ems_usb.c
index 00f2534..539df07 100644
--- a/drivers/net/can/usb/ems_usb.c
+++ b/drivers/net/can/usb/ems_usb.c
@@ -347,6 +347,7 @@ static void ems_usb_rx_err(struct ems_usb *dev, struct ems_cpc_msg *msg)
 			dev->can.state = CAN_STATE_BUS_OFF;
 			cf->can_id |= CAN_ERR_BUSOFF;
 
+			dev->can.can_stats.bus_off++;
 			can_bus_off(dev->netdev);
 		} else if (state & SJA1000_SR_ES) {
 			dev->can.state = CAN_STATE_ERROR_WARNING;
diff --git a/drivers/net/can/usb/esd_usb2.c b/drivers/net/can/usb/esd_usb2.c
index b7c9e8b..29f40b2 100644
--- a/drivers/net/can/usb/esd_usb2.c
+++ b/drivers/net/can/usb/esd_usb2.c
@@ -250,6 +250,7 @@ static void esd_usb2_rx_event(struct esd_usb2_net_priv *priv,
 			case ESD_BUSSTATE_BUSOFF:
 				priv->can.state = CAN_STATE_BUS_OFF;
 				cf->can_id |= CAN_ERR_BUSOFF;
+				priv->can.can_stats.bus_off++;
 				can_bus_off(priv->netdev);
 				break;
 			case ESD_BUSSTATE_WARN:
diff --git a/drivers/net/can/usb/peak_usb/pcan_usb.c b/drivers/net/can/usb/peak_usb/pcan_usb.c
index 925ab8e..13c737a 100644
--- a/drivers/net/can/usb/peak_usb/pcan_usb.c
+++ b/drivers/net/can/usb/peak_usb/pcan_usb.c
@@ -488,6 +488,7 @@ static int pcan_usb_decode_error(struct pcan_usb_msg_context *mc, u8 n,
 	switch (new_state) {
 	case CAN_STATE_BUS_OFF:
 		cf->can_id |= CAN_ERR_BUSOFF;
+		mc->pdev->dev.can.can_stats.bus_off++;
 		can_bus_off(mc->netdev);
 		break;
 
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 263dd92..9a3564d 100644
--- a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c
+++ b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c
@@ -635,6 +635,7 @@ static int pcan_usb_pro_handle_error(struct pcan_usb_pro_interface *usb_if,
 	switch (new_state) {
 	case CAN_STATE_BUS_OFF:
 		can_frame->can_id |= CAN_ERR_BUSOFF;
+		dev->can.can_stats.bus_off++;
 		can_bus_off(netdev);
 		break;
 
diff --git a/drivers/net/can/usb/usb_8dev.c b/drivers/net/can/usb/usb_8dev.c
index ef674ec..dd52c7a 100644
--- a/drivers/net/can/usb/usb_8dev.c
+++ b/drivers/net/can/usb/usb_8dev.c
@@ -377,6 +377,7 @@ static void usb_8dev_rx_err_msg(struct usb_8dev_priv *priv,
 	case USB_8DEV_STATUSMSG_BUSOFF:
 		priv->can.state = CAN_STATE_BUS_OFF;
 		cf->can_id |= CAN_ERR_BUSOFF;
+		priv->can.can_stats.bus_off++;
 		can_bus_off(priv->netdev);
 		break;
 	case USB_8DEV_STATUSMSG_OVERRUN:
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v6] can: move can_stats.bus_off++ from can_bus_off into can_change_state
  2014-12-11 14:15 [PATCH v6] can: move can_stats.bus_off++ from can_bus_off into can_change_state Andri Yngvason
@ 2014-12-12 13:00 ` Wolfgang Grandegger
  2015-01-07 15:23 ` Marc Kleine-Budde
  1 sibling, 0 replies; 4+ messages in thread
From: Wolfgang Grandegger @ 2014-12-12 13:00 UTC (permalink / raw)
  To: Andri Yngvason, linux-can; +Cc: mkl

On 12/11/2014 03:15 PM, Andri Yngvason wrote:
> In order to be able to move the stats increment from can_bus_off() into
> can_change_state(), the increment had to be moved back into code that was using
> can_bus_off() but not can_change_state().
> 
> As a side-effect, this patch fixes the following bugs:
>  * Redundant call to can_bus_off() in c_can.
>  * Bus-off counted twice in xilinx_can.
> 
> Signed-off-by: Andri Yngvason <andri.yngvason@marel.com>
> ---
>  drivers/net/can/bfin_can.c                  | 1 +
>  drivers/net/can/c_can/c_can.c               | 2 +-
>  drivers/net/can/cc770/cc770.c               | 1 +
>  drivers/net/can/dev.c                       | 3 ++-
>  drivers/net/can/janz-ican3.c                | 1 +
>  drivers/net/can/m_can/m_can.c               | 1 +
>  drivers/net/can/pch_can.c                   | 1 +
>  drivers/net/can/rcar_can.c                  | 1 +
>  drivers/net/can/softing/softing_main.c      | 1 +
>  drivers/net/can/spi/mcp251x.c               | 1 +
>  drivers/net/can/ti_hecc.c                   | 1 +
>  drivers/net/can/usb/ems_usb.c               | 1 +
>  drivers/net/can/usb/esd_usb2.c              | 1 +
>  drivers/net/can/usb/peak_usb/pcan_usb.c     | 1 +
>  drivers/net/can/usb/peak_usb/pcan_usb_pro.c | 1 +
>  drivers/net/can/usb/usb_8dev.c              | 1 +
>  16 files changed, 17 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/can/bfin_can.c b/drivers/net/can/bfin_can.c
> index 543ecce..7c89430 100644
> --- a/drivers/net/can/bfin_can.c
> +++ b/drivers/net/can/bfin_can.c
> @@ -352,6 +352,7 @@ static int bfin_can_err(struct net_device *dev, u16 isrc, u16 status)
>  		netdev_dbg(dev, "bus-off mode interrupt\n");
>  		state = CAN_STATE_BUS_OFF;
>  		cf->can_id |= CAN_ERR_BUSOFF;
> +		stats->bus_off++;
>  		can_bus_off(dev);
>  	}
>  
> diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c
> index f94a9fa..70f77e9 100644
> --- a/drivers/net/can/c_can/c_can.c
> +++ b/drivers/net/can/c_can/c_can.c
> @@ -866,7 +866,7 @@ static int c_can_handle_state_change(struct net_device *dev,
>  	case C_CAN_BUS_OFF:
>  		/* bus-off state */
>  		priv->can.state = CAN_STATE_BUS_OFF;
> -		can_bus_off(dev);
> +		priv->can.can_stats.bus_off++;
>  		break;
>  	default:
>  		break;
> diff --git a/drivers/net/can/cc770/cc770.c b/drivers/net/can/cc770/cc770.c
> index d837927..eea37cd 100644
> --- a/drivers/net/can/cc770/cc770.c
> +++ b/drivers/net/can/cc770/cc770.c
> @@ -535,6 +535,7 @@ static int cc770_err(struct net_device *dev, u8 status)
>  		cc770_write_reg(priv, control, CTRL_INI);
>  		cf->can_id |= CAN_ERR_BUSOFF;
>  		priv->can.state = CAN_STATE_BUS_OFF;
> +		priv->can.can_stats.bus_off++;
>  		can_bus_off(dev);
>  	} else if (status & STAT_WARN) {
>  		cf->can_id |= CAN_ERR_CRTL;
> diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
> index b4ecb10..f652795 100644
> --- a/drivers/net/can/dev.c
> +++ b/drivers/net/can/dev.c
> @@ -289,6 +289,8 @@ static void can_update_state_error_stats(struct net_device *dev,
>  		priv->can_stats.error_passive++;
>  		break;
>  	case CAN_STATE_BUS_OFF:
> +		priv->can_stats.bus_off++;
> +		break;
>  	default:
>  		break;
>  	};
> @@ -544,7 +546,6 @@ void can_bus_off(struct net_device *dev)
>  	netdev_dbg(dev, "bus-off\n");
>  
>  	netif_carrier_off(dev);
> -	priv->can_stats.bus_off++;
>  
>  	if (priv->restart_ms)
>  		mod_timer(&priv->restart_timer,
> diff --git a/drivers/net/can/janz-ican3.c b/drivers/net/can/janz-ican3.c
> index 2382c04..c68b9c0 100644
> --- a/drivers/net/can/janz-ican3.c
> +++ b/drivers/net/can/janz-ican3.c
> @@ -1008,6 +1008,7 @@ static int ican3_handle_cevtind(struct ican3_dev *mod, struct ican3_msg *msg)
>  		if (status & SR_BS) {
>  			state = CAN_STATE_BUS_OFF;
>  			cf->can_id |= CAN_ERR_BUSOFF;
> +			mod->can.can_stats.bus_off++;
>  			can_bus_off(dev);
>  		} else if (status & SR_ES) {
>  			if (rxerr >= 128 || txerr >= 128)
> diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
> index 10d571e..7202885 100644
> --- a/drivers/net/can/m_can/m_can.c
> +++ b/drivers/net/can/m_can/m_can.c
> @@ -533,6 +533,7 @@ static int m_can_handle_state_change(struct net_device *dev,
>  		/* bus-off state */
>  		priv->can.state = CAN_STATE_BUS_OFF;
>  		m_can_disable_all_interrupts(priv);
> +		priv->can.can_stats.bus_off++;
>  		can_bus_off(dev);
>  		break;
>  	default:
> diff --git a/drivers/net/can/pch_can.c b/drivers/net/can/pch_can.c
> index a67eb01..e187ca7 100644
> --- a/drivers/net/can/pch_can.c
> +++ b/drivers/net/can/pch_can.c
> @@ -505,6 +505,7 @@ static void pch_can_error(struct net_device *ndev, u32 status)
>  		pch_can_set_rx_all(priv, 0);
>  		state = CAN_STATE_BUS_OFF;
>  		cf->can_id |= CAN_ERR_BUSOFF;
> +		priv->can.can_stats.bus_off++;
>  		can_bus_off(ndev);
>  	}
>  
> diff --git a/drivers/net/can/rcar_can.c b/drivers/net/can/rcar_can.c
> index 1abe133..b88fc66 100644
> --- a/drivers/net/can/rcar_can.c
> +++ b/drivers/net/can/rcar_can.c
> @@ -331,6 +331,7 @@ static void rcar_can_error(struct net_device *ndev)
>  		priv->can.state = CAN_STATE_BUS_OFF;
>  		/* Clear interrupt condition */
>  		writeb(~RCAR_CAN_EIFR_BOEIF, &priv->regs->eifr);
> +		priv->can.can_stats.bus_off++;
>  		can_bus_off(ndev);
>  		if (skb)
>  			cf->can_id |= CAN_ERR_BUSOFF;
> diff --git a/drivers/net/can/softing/softing_main.c b/drivers/net/can/softing/softing_main.c
> index bacd236..566806a 100644
> --- a/drivers/net/can/softing/softing_main.c
> +++ b/drivers/net/can/softing/softing_main.c
> @@ -261,6 +261,7 @@ static int softing_handle_1(struct softing *card)
>  				++priv->can.can_stats.error_passive;
>  			else if (can_state == CAN_STATE_BUS_OFF) {
>  				/* this calls can_close_cleanup() */
> +				++priv->can.can_stats.bus_off;
>  				can_bus_off(netdev);
>  				netif_stop_queue(netdev);
>  			}
> diff --git a/drivers/net/can/spi/mcp251x.c b/drivers/net/can/spi/mcp251x.c
> index c66d699..bf63fee 100644
> --- a/drivers/net/can/spi/mcp251x.c
> +++ b/drivers/net/can/spi/mcp251x.c
> @@ -905,6 +905,7 @@ static irqreturn_t mcp251x_can_ist(int irq, void *dev_id)
>  		if (priv->can.state == CAN_STATE_BUS_OFF) {
>  			if (priv->can.restart_ms == 0) {
>  				priv->force_quit = 1;
> +				priv->can.can_stats.bus_off++;
>  				can_bus_off(net);
>  				mcp251x_hw_sleep(spi);
>  				break;
> diff --git a/drivers/net/can/ti_hecc.c b/drivers/net/can/ti_hecc.c
> index 258b9c4..6c775fa 100644
> --- a/drivers/net/can/ti_hecc.c
> +++ b/drivers/net/can/ti_hecc.c
> @@ -715,6 +715,7 @@ static int ti_hecc_error(struct net_device *ndev, int int_status,
>  		hecc_clear_bit(priv, HECC_CANMC, HECC_CANMC_CCR);
>  		/* Disable all interrupts in bus-off to avoid int hog */
>  		hecc_write(priv, HECC_CANGIM, 0);
> +		++priv->can.can_stats.bus_off;
>  		can_bus_off(ndev);
>  	}
>  
> diff --git a/drivers/net/can/usb/ems_usb.c b/drivers/net/can/usb/ems_usb.c
> index 00f2534..539df07 100644
> --- a/drivers/net/can/usb/ems_usb.c
> +++ b/drivers/net/can/usb/ems_usb.c
> @@ -347,6 +347,7 @@ static void ems_usb_rx_err(struct ems_usb *dev, struct ems_cpc_msg *msg)
>  			dev->can.state = CAN_STATE_BUS_OFF;
>  			cf->can_id |= CAN_ERR_BUSOFF;
>  
> +			dev->can.can_stats.bus_off++;
>  			can_bus_off(dev->netdev);
>  		} else if (state & SJA1000_SR_ES) {
>  			dev->can.state = CAN_STATE_ERROR_WARNING;
> diff --git a/drivers/net/can/usb/esd_usb2.c b/drivers/net/can/usb/esd_usb2.c
> index b7c9e8b..29f40b2 100644
> --- a/drivers/net/can/usb/esd_usb2.c
> +++ b/drivers/net/can/usb/esd_usb2.c
> @@ -250,6 +250,7 @@ static void esd_usb2_rx_event(struct esd_usb2_net_priv *priv,
>  			case ESD_BUSSTATE_BUSOFF:
>  				priv->can.state = CAN_STATE_BUS_OFF;
>  				cf->can_id |= CAN_ERR_BUSOFF;
> +				priv->can.can_stats.bus_off++;
>  				can_bus_off(priv->netdev);
>  				break;
>  			case ESD_BUSSTATE_WARN:
> diff --git a/drivers/net/can/usb/peak_usb/pcan_usb.c b/drivers/net/can/usb/peak_usb/pcan_usb.c
> index 925ab8e..13c737a 100644
> --- a/drivers/net/can/usb/peak_usb/pcan_usb.c
> +++ b/drivers/net/can/usb/peak_usb/pcan_usb.c
> @@ -488,6 +488,7 @@ static int pcan_usb_decode_error(struct pcan_usb_msg_context *mc, u8 n,
>  	switch (new_state) {
>  	case CAN_STATE_BUS_OFF:
>  		cf->can_id |= CAN_ERR_BUSOFF;
> +		mc->pdev->dev.can.can_stats.bus_off++;
>  		can_bus_off(mc->netdev);
>  		break;
>  
> 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 263dd92..9a3564d 100644
> --- a/drivers/net/can/usb/peak_usb/pcan_usb_pro.c
> +++ b/drivers/net/can/usb/peak_usb/pcan_usb_pro.c
> @@ -635,6 +635,7 @@ static int pcan_usb_pro_handle_error(struct pcan_usb_pro_interface *usb_if,
>  	switch (new_state) {
>  	case CAN_STATE_BUS_OFF:
>  		can_frame->can_id |= CAN_ERR_BUSOFF;
> +		dev->can.can_stats.bus_off++;
>  		can_bus_off(netdev);
>  		break;
>  
> diff --git a/drivers/net/can/usb/usb_8dev.c b/drivers/net/can/usb/usb_8dev.c
> index ef674ec..dd52c7a 100644
> --- a/drivers/net/can/usb/usb_8dev.c
> +++ b/drivers/net/can/usb/usb_8dev.c
> @@ -377,6 +377,7 @@ static void usb_8dev_rx_err_msg(struct usb_8dev_priv *priv,
>  	case USB_8DEV_STATUSMSG_BUSOFF:
>  		priv->can.state = CAN_STATE_BUS_OFF;
>  		cf->can_id |= CAN_ERR_BUSOFF;
> +		priv->can.can_stats.bus_off++;
>  		can_bus_off(priv->netdev);
>  		break;
>  	case USB_8DEV_STATUSMSG_OVERRUN:
> 

Looks good now!

Acked-by: Wolfgang Grandegger <wg@grandegger.com>

Wolfgang.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v6] can: move can_stats.bus_off++ from can_bus_off into can_change_state
  2014-12-11 14:15 [PATCH v6] can: move can_stats.bus_off++ from can_bus_off into can_change_state Andri Yngvason
  2014-12-12 13:00 ` Wolfgang Grandegger
@ 2015-01-07 15:23 ` Marc Kleine-Budde
  2015-01-07 16:36   ` Andri Yngvason
  1 sibling, 1 reply; 4+ messages in thread
From: Marc Kleine-Budde @ 2015-01-07 15:23 UTC (permalink / raw)
  To: Andri Yngvason, linux-can; +Cc: wg

[-- Attachment #1: Type: text/plain, Size: 859 bytes --]

On 12/11/2014 03:15 PM, Andri Yngvason wrote:
> In order to be able to move the stats increment from can_bus_off() into
> can_change_state(), the increment had to be moved back into code that was using
> can_bus_off() but not can_change_state().
> 
> As a side-effect, this patch fixes the following bugs:
>  * Redundant call to can_bus_off() in c_can.
>  * Bus-off counted twice in xilinx_can.

FTBFS:

> drivers/net/can/bfin_can.c: In function 'bfin_can_err':
> drivers/net/can/bfin_can.c:355:8: error: 'struct net_device_stats' has no member named 'bus_off'

Marc

-- 
Pengutronix e.K.                  | Marc Kleine-Budde           |
Industrial Linux Solutions        | Phone: +49-231-2826-924     |
Vertretung West/Dortmund          | Fax:   +49-5121-206917-5555 |
Amtsgericht Hildesheim, HRA 2686  | http://www.pengutronix.de   |


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v6] can: move can_stats.bus_off++ from can_bus_off into can_change_state
  2015-01-07 15:23 ` Marc Kleine-Budde
@ 2015-01-07 16:36   ` Andri Yngvason
  0 siblings, 0 replies; 4+ messages in thread
From: Andri Yngvason @ 2015-01-07 16:36 UTC (permalink / raw)
  To: Marc Kleine-Budde, linux-can; +Cc: wg

Quoting Marc Kleine-Budde (2015-01-07 15:23:46)
> On 12/11/2014 03:15 PM, Andri Yngvason wrote:
> > In order to be able to move the stats increment from can_bus_off() into
> > can_change_state(), the increment had to be moved back into code that was using
> > can_bus_off() but not can_change_state().
> > 
> > As a side-effect, this patch fixes the following bugs:
> >  * Redundant call to can_bus_off() in c_can.
> >  * Bus-off counted twice in xilinx_can.
> 
> FTBFS:
> 
> > drivers/net/can/bfin_can.c: In function 'bfin_can_err':
> > drivers/net/can/bfin_can.c:355:8: error: 'struct net_device_stats' has no member named 'bus_off'
> 
Whoops, sorry. I'll fix that ASAP.

--
Andri

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-01-07 16:37 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-12-11 14:15 [PATCH v6] can: move can_stats.bus_off++ from can_bus_off into can_change_state Andri Yngvason
2014-12-12 13:00 ` Wolfgang Grandegger
2015-01-07 15:23 ` Marc Kleine-Budde
2015-01-07 16:36   ` Andri Yngvason

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).