Linux CAN drivers development
 help / color / mirror / Atom feed
From: Viktor Babrian <babrian.viktor@renyi.mta.hu>
To: 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 16:10:29 +0100 (CET)	[thread overview]
Message-ID: <alpine.DEB.2.02.1501131523290.12789@login> (raw)
In-Reply-To: <54B472B2.4010300@optusnet.com.au>

> 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.
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. 
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.

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.

> 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.

Thanks,
Best Regards,
Viktor


  reply	other threads:[~2015-01-13 15:10 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 [this message]
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
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=alpine.DEB.2.02.1501131523290.12789@login \
    --to=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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox