Wolfgang Grandegger wrote:
>>>>>>> A possible solution might be to switch of the error interrupt and poll
>>>>>>> it e.g. with delayed work.
>>>>>> Detecting a high rate and throttling the rate is not trivial and I
>>>>>> hesitate to add a complex solution, also because bus-errors are only
>>>>>> available on a few CAN controllers, e.g. SJA1000 and AT91. Marc, what do
>>>>>> you have in mind?
>>>> Have you ever thought about ratelimit?
>>>>
>>>> In
>>>>
>>>>     http://lxr.linux.no/#linux+v2.6.32/lib/ratelimit.c
>>>>
>>>> there is an implementation that's usually used e.g. as net_ratelimit() to 
>>>> slow
>>>> down printks at several locations inside the kernel.
>>>>
>>>> As we are already in interrupt context there's no spin_lock_irqsave() 
>>>> needed,
>>>> but we might implement an extra can_ratelimit() using a private

I'm not sure about the spinlock, we might also be in the NAPI context
(IIRC softirq that is). But that will clarify later when we have an
example implementation....

>>>>    struct ratelimit_state buserr_ratelimit;

>>>> we could add to the in the can_priv structure.
>>> Hm, this will only help partially. We need to decrease the interrupt
>>> rate not just the delivery rate. Or have I missed something? Also,
>>> bus-errors in sequence might provide useful information.
>> With a ratelimit we can detect if an error interrupt fires "too often".
>> If the "ratelimit" triggers the interrupt should be masked. It must be
>> re-enabled after a certain time though.

> Yes, disable the bus-error interrupt after a certain amount and
> re-enable it after some time, would be my favorite as well. But choosing
> the right parameters is not easy and depends on the CPU power.

...and on the selected bitrate.

I think a "pure" ratelimit isn't a good choice. From my point of view
(with no CAN background) we should limit only if the errors are
consecutive, a successfully transmitted or received CAN frame should
reset our limiter.

Maybe a real world CAN expert can say something to this.

cheers, 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: signature.asc
Description: OpenPGP digital signature

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

Reply via email to