Skip to content

Commit

Permalink
can: c_can: Fix RX message handling, handle lost message before EOB
Browse files Browse the repository at this point in the history
If we handle end of block messages with higher priority than a lost message,
we can run into an endless interrupt loop.

This is reproducable with a am335x processor and "cansequence -r" at 1Mbit.
As soon as we loose a packet we can't escape from an interrupt loop.

This patch fixes the problem by handling lost packets before EOB packets.

Cc: linux-stable <[email protected]>
Signed-off-by: Markus Pargmann <[email protected]>
Signed-off-by: Marc Kleine-Budde <[email protected]>
  • Loading branch information
Markus Pargmann authored and marckleinebudde committed Oct 31, 2013
1 parent c17cb8b commit 5d0f801
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions drivers/net/can/c_can/c_can.c
Original file line number Diff line number Diff line change
Expand Up @@ -814,16 +814,16 @@ static int c_can_do_rx_poll(struct net_device *dev, int quota)
msg_ctrl_save = priv->read_reg(priv,
C_CAN_IFACE(MSGCTRL_REG, 0));

if (msg_ctrl_save & IF_MCONT_EOB)
return num_rx_pkts;

if (msg_ctrl_save & IF_MCONT_MSGLST) {
c_can_handle_lost_msg_obj(dev, 0, msg_obj);
num_rx_pkts++;
quota--;
continue;
}

if (msg_ctrl_save & IF_MCONT_EOB)
return num_rx_pkts;

if (!(msg_ctrl_save & IF_MCONT_NEWDAT))
continue;

Expand Down

0 comments on commit 5d0f801

Please sign in to comment.