Linux CAN drivers development
 help / color / mirror / Atom feed
From: Andri Yngvason <andri.yngvason@marel.com>
To: "linux-can@vger.kernel.org" <linux-can@vger.kernel.org>,
	"mkl@pengutronix.de" <mkl@pengutronix.de>,
	"wg@grandegger.com" <wg@grandegger.com>
Cc: "hs@denx.de" <hs@denx.de>,
	"RUAN Tingquan (ST-FIR/ENG1-Zhu)" <Tingquan.Ruan@cn.bosch.com>,
	"Jonas Mark (ST-FIR/ENG1)" <Mark.Jonas@de.bosch.com>,
	"ZHU Yi (ST-FIR/ENG1-Zhu)" <Yi.Zhu5@cn.bosch.com>
Subject: Re: AW: AW: flexcan missing error state transitions
Date: Tue, 22 Aug 2017 14:14:07 +0000	[thread overview]
Message-ID: <150341124698.27819.5656792817823911040@maxwell> (raw)
In-Reply-To: <e54b0db7ec524bcca65e1975aaf13b2b@SI-MBX1030.de.bosch.com>

Hello Mark,

Quoting Jonas Mark (ST-FIR/ENG1) (2017-08-22 13:50:35)
> > > Which polling interval do you think would be appropriate? It somehow has to be
> > a reasonable trade-off between latency and CPU usage.
> > That's a good question. I don't think that there is a really good answer to it.
> > It would be nice to see intermittent state-transitions happening, so I would say as
> > fast as possible without affecting CPU usage to a significant degree. The polling
> > timer should not be a high resolution timer or anything that would preempt an rt
> > task.
> > 
> > This value could also depend on the bitrate as that will affect the rate at which the
> > error-counter can change. E.g. on 125 k rate, you will receive at most one frame
> > per 1 ms. This means that the error state will change at at least
> > 64 ms intervals, so we would have to sample at 32 ms intervals to catch all the
> > transitions. For 1 M this would be around 2 ms.
> > 
> > Note that this is all somewhat speculative as I do not know exactly how fast the
> > error counters are incremented/decremented.
> 
> We agree that there is a sensible lower boundary for the polling interval which depends on the bitrate. And there is a upper boundary which depends on the application.
> 
> We are currently thinking about whether it would be possible to do the polling only in case the controller is actually experiencing trouble.
> 
> For the i.MX6 there is an interrupt when the controller changes from Error Active to Error Warning. This shall enable the polling.
> 
> For the i.MX53 there is no Active -> Warning interrupt. But for all kinds of error events on the bus an Error interrupt will be created. So the polling shall be enabled then. This is a little bit less efficient compared to i.MX6 but the polling will be disabled during the next interrupt if the state is still Error Active (see below).
> 
> For both, the polling can be disabled when the status is read and it is Error Active. The polling shall be disabled as well when a Bus-Off interrupt occurs.
> 
> What we still need to resolve is the concurrency between the timer and the interrupt when accessing internal data structures and sending SocketCAN error frames. Once we have that sorted out we will send a patch. None the less, early feedback is welcome.
The last time we discussed this issue, I suggested something similar and
Wolfgang's response was "Puh, that's far too sophisticated."

What you suggest does not sound overly complicated, so I would say it's a good
idea. It seems like it's the best that we can do with what we have.

Wolfgang, Marc, what do you think?
> 
> > > Would it make sense to make the polling interval configurable via device tree?
> > Also a good questions. I tried compiling a C program that runs usleep(2000) in a
> > loop for the i.MX6. It runs at around 1% CPU usage in top. I would call that
> > significant. Perhaps it would run better in kernel space?
> > 
> > If the polling interval can be configured, users who care about it can set it to a
> > value that matches their bitrate. Others could set it to zero to turn it off.
> 
> We also think that the polling interval should be configurable. It strongly depends on the application which latency between state change and notification is acceptable and how much computing resources may be invested to achieve that.
Good.
> 
> > As the useful sampling frequency depends on the bitrate, perhaps it should even
> > be a part of the netlink interface? This would also make it easier for the user to find
> > a good sampling frequency based on trial and error.
> 
> Right now we are not convinced that adding to the netlink interface is justified to work around deficiencies of a single CAN peripheral.
Fair enough.

Regards,
Andri

  parent reply	other threads:[~2017-08-22 14:14 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-18  7:47 flexcan missing error state transitions ZHU Yi (ST-FIR/ENG1-Zhu)
2017-08-21 16:18 ` Andri Yngvason
2017-08-21 17:13   ` AW: " Jonas Mark (ST-FIR/ENG1)
2017-08-21 18:21     ` Andri Yngvason
2017-08-22 13:50       ` AW: " Jonas Mark (ST-FIR/ENG1)
2017-08-22 14:06         ` Marc Kleine-Budde
2017-08-22 19:03           ` AW: " Jonas Mark (ST-FIR/ENG1)
2017-08-24  9:40             ` ZHU Yi (ST-FIR/ENG1-Zhu)
2017-08-25 17:16               ` Andri Yngvason
2017-08-27 10:57           ` Wolfgang Grandegger
2017-08-28  4:21             ` ZHU Yi (ST-FIR/ENG1-Zhu)
2017-08-28  8:33               ` Wolfgang Grandegger
2017-08-29  8:49                 ` ZHU Yi (ST-FIR/ENG1-Zhu)
2017-08-29  9:38                   ` Wolfgang Grandegger
2017-08-30  1:39                     ` ZHU Yi (ST-FIR/ENG1-Zhu)
2017-08-29 11:17                   ` Wolfgang Grandegger
2017-08-30  4:22                     ` ZHU Yi (ST-FIR/ENG1-Zhu)
2017-08-30  6:25                       ` Wolfgang Grandegger
2017-08-30  6:50                         ` ZHU Yi (ST-FIR/ENG1-Zhu)
2017-08-30  7:15                           ` Wolfgang Grandegger
2017-08-30  9:05                             ` ZHU Yi (ST-FIR/ENG1-Zhu)
2017-08-30 10:59                               ` Wolfgang Grandegger
2017-08-31  8:33                                 ` ZHU Yi (ST-FIR/ENG1-Zhu)
2017-08-31  9:53                                   ` Wolfgang Grandegger
2017-09-01  8:24                                     ` ZHU Yi (ST-FIR/ENG1-Zhu)
2017-08-29 13:41                   ` Andri Yngvason
2017-08-22 14:14         ` Andri Yngvason [this message]
2017-08-27 12:55           ` Wolfgang Grandegger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=150341124698.27819.5656792817823911040@maxwell \
    --to=andri.yngvason@marel.com \
    --cc=Mark.Jonas@de.bosch.com \
    --cc=Tingquan.Ruan@cn.bosch.com \
    --cc=Yi.Zhu5@cn.bosch.com \
    --cc=hs@denx.de \
    --cc=linux-can@vger.kernel.org \
    --cc=mkl@pengutronix.de \
    --cc=wg@grandegger.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox