From: Andri Yngvason <andri.yngvason@marel.com>
To: Viktor Babrian <babrian.viktor@renyi.mta.hu>,
Tom Evans <tom_usenet@optusnet.com.au>
Cc: linux-can@vger.kernel.org
Subject: Re: c_can: (newbie) high system load when frame not acked?
Date: Tue, 13 Jan 2015 15:32:43 +0000 [thread overview]
Message-ID: <20150113153243.26859.47218@shannon> (raw)
In-Reply-To: <alpine.DEB.2.02.1501131523290.12789@login>
Quoting Viktor Babrian (2015-01-13 15:10:29)
> > Maybe you can turn the error interrupts off and still have it function. Maybe
> > it won't (may be required for bus off recovery).
>
> Thanks for the detailed answer. I read the pages and took a look into the
> code.
>
> Regarding state-change behavior, DCAN controller is similar to the one in
> i.MX6. (It has explicit interrupt source for Act->Warn and Pass->BOFF
> transitions).
> Although as I understand CAN, you have to have a successful RX or TX event
> to have the counters decrease. That means that you will have an immediate
> report (i.e. interrupt) on Warn->Active, Pass->Warn and BOFF->Active. As
> far as I see, this latter is explicitly handled by upper layers so driver
> will have to know it anyway.
Correct.
> This means that if I turn off bus error monitoring, the only event I will
> not get immediate report of is Warn->Pass. (Pass->Warn can be reported on
> successful message events if the driver is implemented accordingly.
Also correct.
> Currently it isn't). However it could be reported later upon the first
> successful message event. I beleive missing an accurate report of
> active->passive state change is far better than having a non-responding
> system in the field in scenarios that do happen.
I agree.
Note: The FlexCAN driver does actually respect berr-reporting for i.MX6.
However, it does not respect it for some older chips.
>
> Anyway I modified the code so that state change interrupt is not
> enabled when user sets berr-reporting off (as you kindly suggested). It
> solves the load issue. Bus-off recovery behavior did not change (I made a
> few tests only). Btw the driver disables all interrupts in bus off so I
> guess it does not matter what exact flags were set.
Perhaps, you would like to post your patch? Turning off the interrupts when
berr-reporting is off is definitely correct behaviour. Not turning them off
seems rather pointless to me. AFAIK the whole point of this flag is to suppress
ack-error flood.
>
> > The consequence (depending on the CPU and Linux build options) is 10%-100%
> > CPU utilisation when there's nothing to ACK the packet, and a higher figure
> > again when the bus isn't terminated.
> >
> > CAN is meant to be used in cars or factories. Running with only one node or a
> > disconnected bus is not a "normal" condition, so the hardware and drivers
> > don't handle those conditions well.
> Well error states are defined by the spec so they ARE normal. What is not
> normal is to bring down system performace when they happen.
>
>
> I alose added a line to put the controller in init mode in
> c_can_stop() so that bringing the bus down will actually cause the
> controller stop transmitting. I hope it's the way to do this, it would be
> nice if some expert could verify this.
>
Put this in a separate patch if you post this change.
Best regards,
Andri Yngvason
next prev parent reply other threads:[~2015-01-13 15:48 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-03 17:54 [PATCH v5 3/5] can: mscan: Consolidate and unify state change handling Andri Yngvason
2015-01-12 17:18 ` c_can: (newbie) high system load when frame not acked? Viktor Babrian
[not found] ` <1735533.0yOonAfCy1@heinz>
2015-01-12 18:50 ` Viktor Babrian
2015-01-13 1:19 ` Tom Evans
2015-01-13 15:10 ` Viktor Babrian
2015-01-13 15:16 ` Marc Kleine-Budde
2015-01-13 15:54 ` Viktor Babrian
2015-01-13 15:55 ` Marc Kleine-Budde
2015-01-13 15:32 ` Andri Yngvason [this message]
2015-01-14 1:35 ` Tom Evans
2015-01-14 9:55 ` Andri Yngvason
2015-01-15 0:29 ` Tom Evans
2015-01-18 18:30 ` [PATCH 3.19-rc3] c_can: SIE disabled when berr-reporting is off to reduce irq flood Viktor Babrian
2015-01-18 18:34 ` Marc Kleine-Budde
2015-01-18 18:52 ` Viktor Babrian
2015-01-18 18:56 ` Marc Kleine-Budde
2015-01-19 11:32 ` Viktor Babrian
2015-01-19 22:35 ` Tom Evans
2015-01-18 19:01 ` [PATCH 3.19-rc3] c_can: end transmission on network stop Viktor Babrian
2015-01-20 14:39 ` Marc Kleine-Budde
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=20150113153243.26859.47218@shannon \
--to=andri.yngvason@marel.com \
--cc=babrian.viktor@renyi.mta.hu \
--cc=linux-can@vger.kernel.org \
--cc=tom_usenet@optusnet.com.au \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.