From: Alexander Sverdlin <alexander.sverdlin-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
To: "ext Grygorii.Strashko-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org"
<grygorii.strashko-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Sekhar Nori <nsekhar-l0cyMroinI0@public.gmane.org>,
Murali Karicheri <m-karicheri2-l0cyMroinI0@public.gmane.org>
Cc: Mastalski Bartosz
<bartosz.mastalski-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
Subject: Re: [PATCH 1/3] i2c: davinci: Rework racy ISR
Date: Fri, 13 Mar 2015 09:03:33 +0100 [thread overview]
Message-ID: <550299D5.5080000@nokia.com> (raw)
In-Reply-To: <550191AB.8000103-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Hello!
On 12/03/15 14:16, ext Grygorii.Strashko-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org wrote:
>> There is one big problem in the current design: ISR accesses the controller
>> > registers in parallel with i2c_davinci_xfer_msg() in process context. The whole
>> > logic is not obvious, many operations are performed in process context while
>> > ISR is always enabled and does something asynchronous even while it's not
>> > expected. We have faced these races on 4-cores Keystone chip. Some examples:
>> >
>> > - when non-existing device is accessed first comes NAK IRQ, then ARDY IRQ. After
>> > NAK we already jump out of wait_for_completion_timeout() and depending on how
>> > lucky we are ARDY IRQ will access MDR register in the middle of some other
>> > operation in process context;
>> >
>> > - STOP condition is triggered in many places in the driver, in ISR, in
>> > i2c_davinci_xfer_msg(), but there is no code which guarantees that STOP will
>> > be really completed. We have seen many STOP conditions simply missing in
>> > back-to-back transfers, when next i2c_davinci_xfer_msg() call simply overwrites
>> > MDR register while STOP is still not generated.
>> >
>> > So, make the design more robust and obvious:
>> > - leave hot path (buffers management) in ISR, remove other registers access from
>> > ISR;
>> > - introduce second synchronization point, to make sure that STOP condition is
>> > really generated and it's safe to begin next transfer;
>> > - simplify the state machine;
>> > - enable IRQs only when they are expected, disable them in ISR when transfer is
>> > completed/failed;
>> > - STOP is normally set simultaneously with START condition (in case of last
>> > message); only special case when STOP is additionally generated is received NAK
>> > -- this case is handled separately.
> I'm not sure about this change (- It's too significant and definitely will need more review & Tested-by.
Maybe you can offer this patch the customers who suddenly cannot access the devices on the bus until reboot...
Because it's not a "bus lockup".
> We need to be careful with it, especially taking into account DAVINCI_I2C_MDR_RM mode and future
> changes like https://lkml.org/lkml/2014/5/1/348.
>
> May be you can split it?
I can may be split it into two patches, but I'm not sure about the result. Each of them will only solve
50% of the problem and then nobody will see a clear benefit applying only one. But what I can offer you is
to spend the same effort on rebasing the "DAVINCI_I2C_MDR_RM mode" patch you are referring to. I can rebase
it and take it into my series if you wish.
>> >
>> > Signed-off-by: Alexander Sverdlin <alexander.sverdlin-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
>> > ---
>> > drivers/i2c/busses/i2c-davinci.c | 219 ++++++++++++++++---------------------
>> > 1 files changed, 95 insertions(+), 124 deletions(-)
--
Best regards,
Alexander Sverdlin.
next prev parent reply other threads:[~2015-03-13 8:03 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-11 13:08 [PATCH 1/3] i2c: davinci: Rework racy ISR Alexander Sverdlin
[not found] ` <55003E64.2030701-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2015-03-12 13:16 ` Grygorii.Strashko-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org
[not found] ` <550191AB.8000103-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2015-03-13 8:03 ` Alexander Sverdlin [this message]
[not found] ` <550299D5.5080000-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2015-04-03 20:15 ` Wolfram Sang
2015-04-06 16:26 ` Grygorii.Strashko-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org
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=550299D5.5080000@nokia.com \
--to=alexander.sverdlin-xnzwkgviw5gavxtiumwx3w@public.gmane.org \
--cc=bartosz.mastalski-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org \
--cc=grygorii.strashko-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=m-karicheri2-l0cyMroinI0@public.gmane.org \
--cc=nsekhar-l0cyMroinI0@public.gmane.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.