All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tom Evans <tom_usenet@optusnet.com.au>
To: Andri Yngvason <andri.yngvason@marel.com>,
	Viktor Babrian <babrian.viktor@renyi.mta.hu>
Cc: linux-can@vger.kernel.org
Subject: Re: c_can: (newbie) high system load when frame not acked?
Date: Wed, 14 Jan 2015 12:35:46 +1100	[thread overview]
Message-ID: <54B5C7F2.3060702@optusnet.com.au> (raw)
In-Reply-To: <20150113153243.26859.47218@shannon>

On 14/01/15 02:32, Andri Yngvason wrote:
> Quoting Viktor Babrian (2015-01-13 15:10:29)
>
> Note: The FlexCAN driver does actually respect berr-reporting for i.MX6.
> However, it does not respect it for some older chips.

The flexcan.c driver behaves differently depending on whether it has 
"FLEXCAN_HAS_BROKEN_ERR_STATE" set (on for MX25, MX35, MX53 and off for MX28 
and MX6). I don't think this distinction actually helps, or improves matters 
enough to be worth the CPU loading this causes in these disconnected/solo CAN 
states.

On the "unbroken" chips, the only difference is that you get is interrupts on 
the WARNING transitions. As far as I can see, all that gets you is an 
interrupt when the WARNING state goes away which will trigger a poll that can 
then see that the ERROR_PASSIVE state has cleared in the absence of Receive or 
Transmit interrupts. You get interrupts when the WARNING state sets as well, 
but that happens before the PASSIVE state, so you'll miss that one.

The TXECTR can only decrement on successful transmission which causes a 
transmit interrupt, so the warning interrupt doesn't help here.

The RXECTR only decrements on successful reception, which will cause a receive 
interrupt UNLESS it doesn't match on a filter. But since the driver doesn't 
USE the filters (it accepts everything) that's a moot point too.

Does "FLEXCAN_HAS_BROKEN_ERR_STATE" do anything useful that I've missed? If 
not then that code should be removed. I've done that in the old (Linux 3.4) 
version of the driver I'm using.

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

There's the load caused by the interrupts, and the additional load caused by 
the call to netif_receive_skb(skb) to report the error up through the stack. 
Getting rid of the latter overhead might have been the intention, or might 
have been "this is the best we can do on this chip".

Tom Evans



  reply	other threads:[~2015-01-14  1:35 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
2015-01-14  1:35             ` Tom Evans [this message]
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=54B5C7F2.3060702@optusnet.com.au \
    --to=tom_usenet@optusnet.com.au \
    --cc=andri.yngvason@marel.com \
    --cc=babrian.viktor@renyi.mta.hu \
    --cc=linux-can@vger.kernel.org \
    /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.