2010/8/6 christian pellegrin <[email protected]>

> On Fri, Aug 6, 2010 at 3:56 PM, Wolfgang Grandegger <[email protected]>
> wrote:
> > To be clear, out-of-order messages are also not OK.
>
> Yes I was looking at this with some interleave analysis. I think the
> problem lies in the following race:
>
> // suppose we come here with RXB0 filled with packet X
>                u8 intf = mcp251x_read_reg(spi, CANINTF);
>                u8 eflag;
>                int can_id = 0, data1 = 0;
>
> // packet X+1 arrives and lands in RXB1
>
>                if (intf & CANINTF_RX0IF) {
>                        mcp251x_hw_rx(spi, 0);
>                        /* Free one buffer ASAP */
>                        mcp251x_write_bits(spi, CANINTF, intf &
> CANINTF_RX0IF,
>                                           0x00);
>                }
>
> // packet X+2 arrives and lands in RXB0
> // unfortunately variable intf is old and doesn't show that we have
> something in RXB1
> // (*1)
>                if (intf & CANINTF_RX1IF)
>                        mcp251x_hw_rx(spi, 1);
>
> now on the next turn we will have packet X+2 in RXB0 and X+1 in RXB1
> so we read them out-of-order. The easiest way to solve the problem is
> to take out the line:
>
>                        /* Free one buffer ASAP */
>                        mcp251x_write_bits(spi, CANINTF, intf &
> CANINTF_RX0IF,
>                                           0x00);
>
> but we risk to lose more packets. Perhaps also rereading intf in (*1)
> could work but we must be careful when we reset CANINTF register to
> not lose an interrupt for RXB0. I will do some tests but after next
> week because I don't have the access to the hardware until then.
>
> --
> Christian Pellegrin, see http://www.evolware.org/chri/
> "Real Programmers don't play tennis, or any other sport which requires
> you to change clothes. Mountain climbing is OK, and Real Programmers
> wear their climbing boots to work in case a mountain should suddenly
> spring up in the middle of the computer room."
>


Hi Christian,

Did you have a chance to look on the problem and / or the patch I send to
the list?

BR
Benny
_______________________________________________
Socketcan-users mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/socketcan-users

Reply via email to