From: Wolfgang Grandegger <wg@grandegger.com>
To: Oliver Hartkopp <socketcan@hartkopp.net>
Cc: Stephane Grosjean <s.grosjean@peak-system.com>,
Marc Kleine-Budde <mkl@pengutronix.de>,
linux-can Mailing List <linux-can@vger.kernel.org>
Subject: Re: [PATCH v3] can/sja1000: add support for PEAK-System PCMCIA card
Date: Wed, 15 Feb 2012 08:03:45 +0100 [thread overview]
Message-ID: <4F3B58D1.1040804@grandegger.com> (raw)
In-Reply-To: <4F3A8ECB.7090803@hartkopp.net>
Hi Oliver,
we start paving common code to partially cure pcmcia related problems,
that's exactly what I do not like.
On 02/14/2012 05:41 PM, Oliver Hartkopp wrote:
> On 14.02.2012 11:16, Stephane Grosjean wrote:
>
>>
>> Le 14/02/2012 10:59, Oliver Hartkopp a écrit :
>>
>>> @@ -492,6 +492,9 @@ irqreturn_t sja1000_interrupt(int irq, void *dev_id)
>>> while ((isrc = priv->read_reg(priv, REG_IR))&& (n< SJA1000_MAX_IRQ)) {
In case of unplug, already the above read may return 0xff.
>>> n++;
>>> status = priv->read_reg(priv, REG_SR);
>>> + /* check for absent controller due to hw unplug */
>>> + if (status == 0xFF&& !sja1000_probe_chip(dev))
>>> + break;
Once...
>>> if (isrc& IRQ_WUI)
>>> netdev_warn(dev, "wakeup interrupt\n");
>>> @@ -508,6 +511,9 @@ irqreturn_t sja1000_interrupt(int irq, void *dev_id)
>>> while (status& SR_RBS) {
>>> sja1000_rx(dev);
>>> status = priv->read_reg(priv, REG_SR);
>>> + /* check for absent controller */
>>> + if (status == 0xFF&& !sja1000_probe_chip(dev))
>>> + break;
... twice... What about the other accesses?
>>> }
>>> }
>>> if (isrc& (IRQ_DOI | IRQ_EI | IRQ_BEI | IRQ_EPI | IRQ_ALI)) {
>>>
>>> The big advantage is, that we do not need another expensive register read nor
>>> another loop counter variable in the case everything is working fine.
>>>
>>> Only when the _already_ read status variable becomes 0xFF we check in the
>>> mode register if the device is still present.
>>>
>>> And finally there's a very little chance left to create rubbish data.
>>
>>
>> Quite perfect, except that we will push a "rubbish" error frame before
>> exiting, and we will return IRQ_HANDLED while I would prefer IRQ_NONE...
>> But does it matter?
Well, it's far away from being perfect?
>
> An alternative would be to replace the 'break' statements above with
>
> return IRQ_NONE;
>
> like
>
> /* check for absent controller due to hw unplug */
> if (status == 0xFF && !sja1000_probe_chip(dev))
> return IRQ_NONE;
>
> Don't know if this is 'good style' - but the while statement allows it ;-)
>
>>
>> Moreover, regarding to this patch, should the peak_pcmcia custom isr always
>> test for the card presence? I mean, this costs at least 2xtwo ioread8 for each
>> hw irq!
>
>
> I think the earlier we know the better.
>
> But indeed both drivers (PEAK/EMS PCMCIA) do no need priv->pre_irq ...
>
> So if we add the 'return IRQ_NONE' to the above patch the private check for
> present hardware becomes obsolete as the private ISRs terminate properly when
> they get an IRQ_NONE.
>
> Right?
If it's clear that the interrupt came from that device, we should return
IRQ_HANDLED otherwise it's treated as spurious. I would accept *one* "if
(status == 0xFF ..." check in a good place.
Wolfgang.
next prev parent reply other threads:[~2012-02-15 7:03 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-06 15:56 [PATCH v3] can/sja1000: add support for PEAK-System PCMCIA card Stephane Grosjean
2012-02-13 9:14 ` Marc Kleine-Budde
2012-02-13 10:01 ` Stephane Grosjean
2012-02-13 10:14 ` Wolfgang Grandegger
2012-02-13 10:41 ` Oliver Hartkopp
2012-02-13 11:02 ` Wolfgang Grandegger
2012-02-13 11:06 ` Marc Kleine-Budde
2012-02-13 11:08 ` Wolfgang Grandegger
2012-02-13 19:55 ` Oliver Hartkopp
2012-02-13 20:23 ` Wolfgang Grandegger
2012-02-14 9:14 ` Stephane Grosjean
2012-02-14 9:30 ` Wolfgang Grandegger
2012-02-14 9:59 ` Oliver Hartkopp
2012-02-14 10:16 ` Stephane Grosjean
2012-02-14 16:41 ` Oliver Hartkopp
2012-02-15 7:03 ` Wolfgang Grandegger [this message]
2012-02-15 8:05 ` Oliver Hartkopp
2012-02-15 8:37 ` Wolfgang Grandegger
2012-02-15 19:32 ` Oliver Hartkopp
2012-02-15 11:52 ` Stephane Grosjean
2012-02-15 15:06 ` Wolfgang Grandegger
2012-02-15 16:00 ` Stephane Grosjean
2012-02-15 19:46 ` Oliver Hartkopp
2012-02-13 10:46 ` Stephane Grosjean
2012-02-13 10:56 ` 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=4F3B58D1.1040804@grandegger.com \
--to=wg@grandegger.com \
--cc=linux-can@vger.kernel.org \
--cc=mkl@pengutronix.de \
--cc=s.grosjean@peak-system.com \
--cc=socketcan@hartkopp.net \
/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.