mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-09 07:23:14 +00:00
can: move can_stats.bus_off++ from can_bus_off into can_change_state
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> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
parent
0c49087462
commit
be38a6f9f4
@ -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");
|
netdev_dbg(dev, "bus-off mode interrupt\n");
|
||||||
state = CAN_STATE_BUS_OFF;
|
state = CAN_STATE_BUS_OFF;
|
||||||
cf->can_id |= CAN_ERR_BUSOFF;
|
cf->can_id |= CAN_ERR_BUSOFF;
|
||||||
|
priv->can.can_stats.bus_off++;
|
||||||
can_bus_off(dev);
|
can_bus_off(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -866,7 +866,7 @@ static int c_can_handle_state_change(struct net_device *dev,
|
|||||||
case C_CAN_BUS_OFF:
|
case C_CAN_BUS_OFF:
|
||||||
/* bus-off state */
|
/* bus-off state */
|
||||||
priv->can.state = CAN_STATE_BUS_OFF;
|
priv->can.state = CAN_STATE_BUS_OFF;
|
||||||
can_bus_off(dev);
|
priv->can.can_stats.bus_off++;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -535,6 +535,7 @@ static int cc770_err(struct net_device *dev, u8 status)
|
|||||||
cc770_write_reg(priv, control, CTRL_INI);
|
cc770_write_reg(priv, control, CTRL_INI);
|
||||||
cf->can_id |= CAN_ERR_BUSOFF;
|
cf->can_id |= CAN_ERR_BUSOFF;
|
||||||
priv->can.state = CAN_STATE_BUS_OFF;
|
priv->can.state = CAN_STATE_BUS_OFF;
|
||||||
|
priv->can.can_stats.bus_off++;
|
||||||
can_bus_off(dev);
|
can_bus_off(dev);
|
||||||
} else if (status & STAT_WARN) {
|
} else if (status & STAT_WARN) {
|
||||||
cf->can_id |= CAN_ERR_CRTL;
|
cf->can_id |= CAN_ERR_CRTL;
|
||||||
|
@ -289,6 +289,8 @@ static void can_update_state_error_stats(struct net_device *dev,
|
|||||||
priv->can_stats.error_passive++;
|
priv->can_stats.error_passive++;
|
||||||
break;
|
break;
|
||||||
case CAN_STATE_BUS_OFF:
|
case CAN_STATE_BUS_OFF:
|
||||||
|
priv->can_stats.bus_off++;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
@ -544,7 +546,6 @@ void can_bus_off(struct net_device *dev)
|
|||||||
netdev_dbg(dev, "bus-off\n");
|
netdev_dbg(dev, "bus-off\n");
|
||||||
|
|
||||||
netif_carrier_off(dev);
|
netif_carrier_off(dev);
|
||||||
priv->can_stats.bus_off++;
|
|
||||||
|
|
||||||
if (priv->restart_ms)
|
if (priv->restart_ms)
|
||||||
mod_timer(&priv->restart_timer,
|
mod_timer(&priv->restart_timer,
|
||||||
|
@ -1008,6 +1008,7 @@ static int ican3_handle_cevtind(struct ican3_dev *mod, struct ican3_msg *msg)
|
|||||||
if (status & SR_BS) {
|
if (status & SR_BS) {
|
||||||
state = CAN_STATE_BUS_OFF;
|
state = CAN_STATE_BUS_OFF;
|
||||||
cf->can_id |= CAN_ERR_BUSOFF;
|
cf->can_id |= CAN_ERR_BUSOFF;
|
||||||
|
mod->can.can_stats.bus_off++;
|
||||||
can_bus_off(dev);
|
can_bus_off(dev);
|
||||||
} else if (status & SR_ES) {
|
} else if (status & SR_ES) {
|
||||||
if (rxerr >= 128 || txerr >= 128)
|
if (rxerr >= 128 || txerr >= 128)
|
||||||
|
@ -589,6 +589,7 @@ static int m_can_handle_state_change(struct net_device *dev,
|
|||||||
/* bus-off state */
|
/* bus-off state */
|
||||||
priv->can.state = CAN_STATE_BUS_OFF;
|
priv->can.state = CAN_STATE_BUS_OFF;
|
||||||
m_can_disable_all_interrupts(priv);
|
m_can_disable_all_interrupts(priv);
|
||||||
|
priv->can.can_stats.bus_off++;
|
||||||
can_bus_off(dev);
|
can_bus_off(dev);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -505,6 +505,7 @@ static void pch_can_error(struct net_device *ndev, u32 status)
|
|||||||
pch_can_set_rx_all(priv, 0);
|
pch_can_set_rx_all(priv, 0);
|
||||||
state = CAN_STATE_BUS_OFF;
|
state = CAN_STATE_BUS_OFF;
|
||||||
cf->can_id |= CAN_ERR_BUSOFF;
|
cf->can_id |= CAN_ERR_BUSOFF;
|
||||||
|
priv->can.can_stats.bus_off++;
|
||||||
can_bus_off(ndev);
|
can_bus_off(ndev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -331,6 +331,7 @@ static void rcar_can_error(struct net_device *ndev)
|
|||||||
priv->can.state = CAN_STATE_BUS_OFF;
|
priv->can.state = CAN_STATE_BUS_OFF;
|
||||||
/* Clear interrupt condition */
|
/* Clear interrupt condition */
|
||||||
writeb(~RCAR_CAN_EIFR_BOEIF, &priv->regs->eifr);
|
writeb(~RCAR_CAN_EIFR_BOEIF, &priv->regs->eifr);
|
||||||
|
priv->can.can_stats.bus_off++;
|
||||||
can_bus_off(ndev);
|
can_bus_off(ndev);
|
||||||
if (skb)
|
if (skb)
|
||||||
cf->can_id |= CAN_ERR_BUSOFF;
|
cf->can_id |= CAN_ERR_BUSOFF;
|
||||||
|
@ -261,6 +261,7 @@ static int softing_handle_1(struct softing *card)
|
|||||||
++priv->can.can_stats.error_passive;
|
++priv->can.can_stats.error_passive;
|
||||||
else if (can_state == CAN_STATE_BUS_OFF) {
|
else if (can_state == CAN_STATE_BUS_OFF) {
|
||||||
/* this calls can_close_cleanup() */
|
/* this calls can_close_cleanup() */
|
||||||
|
++priv->can.can_stats.bus_off;
|
||||||
can_bus_off(netdev);
|
can_bus_off(netdev);
|
||||||
netif_stop_queue(netdev);
|
netif_stop_queue(netdev);
|
||||||
}
|
}
|
||||||
|
@ -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.state == CAN_STATE_BUS_OFF) {
|
||||||
if (priv->can.restart_ms == 0) {
|
if (priv->can.restart_ms == 0) {
|
||||||
priv->force_quit = 1;
|
priv->force_quit = 1;
|
||||||
|
priv->can.can_stats.bus_off++;
|
||||||
can_bus_off(net);
|
can_bus_off(net);
|
||||||
mcp251x_hw_sleep(spi);
|
mcp251x_hw_sleep(spi);
|
||||||
break;
|
break;
|
||||||
|
@ -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);
|
hecc_clear_bit(priv, HECC_CANMC, HECC_CANMC_CCR);
|
||||||
/* Disable all interrupts in bus-off to avoid int hog */
|
/* Disable all interrupts in bus-off to avoid int hog */
|
||||||
hecc_write(priv, HECC_CANGIM, 0);
|
hecc_write(priv, HECC_CANGIM, 0);
|
||||||
|
++priv->can.can_stats.bus_off;
|
||||||
can_bus_off(ndev);
|
can_bus_off(ndev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
dev->can.state = CAN_STATE_BUS_OFF;
|
||||||
cf->can_id |= CAN_ERR_BUSOFF;
|
cf->can_id |= CAN_ERR_BUSOFF;
|
||||||
|
|
||||||
|
dev->can.can_stats.bus_off++;
|
||||||
can_bus_off(dev->netdev);
|
can_bus_off(dev->netdev);
|
||||||
} else if (state & SJA1000_SR_ES) {
|
} else if (state & SJA1000_SR_ES) {
|
||||||
dev->can.state = CAN_STATE_ERROR_WARNING;
|
dev->can.state = CAN_STATE_ERROR_WARNING;
|
||||||
|
@ -250,6 +250,7 @@ static void esd_usb2_rx_event(struct esd_usb2_net_priv *priv,
|
|||||||
case ESD_BUSSTATE_BUSOFF:
|
case ESD_BUSSTATE_BUSOFF:
|
||||||
priv->can.state = CAN_STATE_BUS_OFF;
|
priv->can.state = CAN_STATE_BUS_OFF;
|
||||||
cf->can_id |= CAN_ERR_BUSOFF;
|
cf->can_id |= CAN_ERR_BUSOFF;
|
||||||
|
priv->can.can_stats.bus_off++;
|
||||||
can_bus_off(priv->netdev);
|
can_bus_off(priv->netdev);
|
||||||
break;
|
break;
|
||||||
case ESD_BUSSTATE_WARN:
|
case ESD_BUSSTATE_WARN:
|
||||||
|
@ -488,6 +488,7 @@ static int pcan_usb_decode_error(struct pcan_usb_msg_context *mc, u8 n,
|
|||||||
switch (new_state) {
|
switch (new_state) {
|
||||||
case CAN_STATE_BUS_OFF:
|
case CAN_STATE_BUS_OFF:
|
||||||
cf->can_id |= CAN_ERR_BUSOFF;
|
cf->can_id |= CAN_ERR_BUSOFF;
|
||||||
|
mc->pdev->dev.can.can_stats.bus_off++;
|
||||||
can_bus_off(mc->netdev);
|
can_bus_off(mc->netdev);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -634,6 +634,7 @@ static int pcan_usb_pro_handle_error(struct pcan_usb_pro_interface *usb_if,
|
|||||||
switch (new_state) {
|
switch (new_state) {
|
||||||
case CAN_STATE_BUS_OFF:
|
case CAN_STATE_BUS_OFF:
|
||||||
can_frame->can_id |= CAN_ERR_BUSOFF;
|
can_frame->can_id |= CAN_ERR_BUSOFF;
|
||||||
|
dev->can.can_stats.bus_off++;
|
||||||
can_bus_off(netdev);
|
can_bus_off(netdev);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -377,6 +377,7 @@ static void usb_8dev_rx_err_msg(struct usb_8dev_priv *priv,
|
|||||||
case USB_8DEV_STATUSMSG_BUSOFF:
|
case USB_8DEV_STATUSMSG_BUSOFF:
|
||||||
priv->can.state = CAN_STATE_BUS_OFF;
|
priv->can.state = CAN_STATE_BUS_OFF;
|
||||||
cf->can_id |= CAN_ERR_BUSOFF;
|
cf->can_id |= CAN_ERR_BUSOFF;
|
||||||
|
priv->can.can_stats.bus_off++;
|
||||||
can_bus_off(priv->netdev);
|
can_bus_off(priv->netdev);
|
||||||
break;
|
break;
|
||||||
case USB_8DEV_STATUSMSG_OVERRUN:
|
case USB_8DEV_STATUSMSG_OVERRUN:
|
||||||
|
Loading…
Reference in New Issue
Block a user