Re: [PATCH] can: c_can: Handle lost bus-off interrupt while IRQs are disabled

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On ma, 15 jun 2020 11:11:17 +0000, Felix Riemann wrote:
> 
> Hi Kurt,
> 
> see below.
> 
> > -----Original Message-----
> >
> > Hi Felix,
> >
> > Next question comes up.
> > See inline.
> >
> > On vr, 12 jun 2020 09:10:44 +0200, Kurt Van Dijck wrote:
> > > Thanks for verifying,
> > >
> > > I'll take a look how that can happen.
> > >
> > > I think packet loss is better (less packets lost) than before.
> > >
> > > Kurt
> > >
> > > On wo, 10 jun 2020 08:08:28 +0000, Felix Riemann wrote:
> > > > Hi Kurt,
> > > >
> > > > > -----Original Message-----
> > > > >
> > > > > I have the impression that the recv path is covered, at least the
> > > > > null ptr would have caused issued earlier already.
> > > > > Would the problem arise in c_can_do_tx fetching a NULL echo_skb?
> > > >
> > > > It really looks like it.
> > > >
> > > > Adding a BUG_ON to the loop in c_can_do_tx triggers with a NULL skb
> > returned by __can_get_echo_skb().
> > > >
> > > > For testing I replaced the BUG_ON with a check that skips the skb if that
> > happens (not sure if that would be a valid fix in that place):
> > > >
> > > > while ((obj = c_can_ffs64(pend))) {
> > > > pend &= ~((u64)1 << (obj - 1));
> > > > c_can_inval_tx_object(dev, IF_RX, obj); idx = obj -
> > > > priv->obj.send_frst; skb = __can_get_echo_skb(dev, idx, &len);
> > > > if(!skb)
> >
> > It would be interesting to know idx and priv->tx_active here.
> 
> That's the statistic over about 1600 lines I captured. First number is number of occurrences:

just double-check:
These are all when __can_get_echo_skb returned NULL?

> 
>     992 can0: Skip @ idx 0, tx_active: 0x1
>     255 can0: Skip @ idx 0, tx_active: 0x3
>     250 can0: Skip @ idx 1, tx_active: 0x2
>      11 can0: Skip @ idx 0, tx_active: 0x7
>      10 can0: Skip @ idx 1, tx_active: 0x6
>       8 can0: Skip @ idx 7, tx_active: 0x80
>       8 can0: Skip @ idx 6, tx_active: 0xc0
>       8 can0: Skip @ idx 2, tx_active: 0x6
>       6 can0: Skip @ idx 1, tx_active: 0xe
>       5 can0: Skip @ idx 2, tx_active: 0x4
>       5 can0: Skip @ idx 0, tx_active: 0xf
>       4 can0: Skip @ idx 2, tx_active: 0xc
>       4 can0: Skip @ idx 0, tx_active: 0x3f
>       3 can0: Skip @ idx 6, tx_active: 0x40
>       3 can0: Skip @ idx 3, tx_active: 0xc
>       3 can0: Skip @ idx 2, tx_active: 0xfc
>       3 can0: Skip @ idx 2, tx_active: 0x3c
>       3 can0: Skip @ idx 0, tx_active: 0x1f
>       2 can0: Skip @ idx 5, tx_active: 0x3e
>       2 can0: Skip @ idx 4, tx_active: 0x3e
>       2 can0: Skip @ idx 3, tx_active: 0xf8
>       2 can0: Skip @ idx 3, tx_active: 0x3e
>       2 can0: Skip @ idx 2, tx_active: 0x3e
>       2 can0: Skip @ idx 1, tx_active: 0x3e
>       2 can0: Skip @ idx 1, tx_active: 0x1e
>       1 can0: Skip @ idx 7, tx_active: 0xf0
>       1 can0: Skip @ idx 6, tx_active: 0xf0
>       1 can0: Skip @ idx 6, tx_active: 0x78
>       1 can0: Skip @ idx 6, tx_active: 0x70
>       1 can0: Skip @ idx 5, tx_active: 0xf0
>       1 can0: Skip @ idx 5, tx_active: 0x78
>       1 can0: Skip @ idx 5, tx_active: 0x70
>       1 can0: Skip @ idx 5, tx_active: 0x38
>       1 can0: Skip @ idx 5, tx_active: 0x20
>       1 can0: Skip @ idx 4, tx_active: 0xf0
>       1 can0: Skip @ idx 4, tx_active: 0x38
>       1 can0: Skip @ idx 4, tx_active: 0x1c
>       1 can0: Skip @ idx 3, tx_active: 0xfc
>       1 can0: Skip @ idx 3, tx_active: 0xe
>       1 can0: Skip @ idx 3, tx_active: 0x8
>       1 can0: Skip @ idx 3, tx_active: 0x78
>       1 can0: Skip @ idx 3, tx_active: 0x38
>       1 can0: Skip @ idx 3, tx_active: 0x1c
>       1 can0: Skip @ idx 2, tx_active: 0xe
>       1 can0: Skip @ idx 2, tx_active: 0x7c
>       1 can0: Skip @ idx 2, tx_active: 0x1c
>       1 can0: Skip @ idx 1, tx_active: 0xfe
>       1 can0: Skip @ idx 0, tx_active: 0xff
>       1 can0: Skip @ idx 0, tx_active: 0x7f
> 
> I used atomic_read to get the value of tx_active.
> 
> Regards,
> 
> Felix
> ___________________________________________________
> 
> SMA Solar Technology AG
> Aufsichtsrat: Uwe Kleinkauf (Vorsitzender)
> Vorstand: Ulrich Hadding, Dr.-Ing. Juergen Reinert
> Handelsregister: Amtsgericht Kassel HRB 3972
> Sitz der Gesellschaft: 34266 Niestetal
> USt-ID-Nr. DE 113 08 59 54
> WEEE-Reg.-Nr. DE 95881150
> ___________________________________________________



[Index of Archives]     [Automotive Discussions]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]     [CAN Bus]

  Powered by Linux