From: Christian Ruppert <christian.ruppert-ux6zf3SgZrrQT0dZR+AlfA@public.gmane.org>
To: Mika Westerberg
<mika.westerberg-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
Cc: Wolfram Sang <wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org>,
Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org>,
Pierrick Hascoet
<pierrick.hascoet-ux6zf3SgZrrQT0dZR+AlfA@public.gmane.org>,
linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH 1/2] i2c: designware: fix race between subsequent xfers
Date: Fri, 7 Jun 2013 10:16:37 +0200 [thread overview]
Message-ID: <20130607081636.GC11875@ab42.lan> (raw)
In-Reply-To: <20130607052353.GB11878-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
On Fri, Jun 07, 2013 at 08:23:53AM +0300, Mika Westerberg wrote:
> Hi Christian,
>
> On Thu, Jun 06, 2013 at 03:43:35PM +0200, Christian Ruppert wrote:
> > The designware block is not always properly disabled in the case of
> > transfer errors. Interrupts from aborted transfers might be handled
> > after the data structures for the following transfer are initialised but
> > before the hardware is set up. This might corrupt the data structures to
> > the point that the system is stuck in an infinite interrupt loop (where
> > FIFOs are never emptied).
> > This patch cleanly disables the designware-i2c hardware at the end of
> > every transfer, successful or not.
>
> Have you tried with the latest mainline driver? There is a commit that
> solves similar problem:
>
> 2a2d95e9d6d29e7 i2c: designware: always clear interrupts before enabling them
>
> Maybe it helps?
Hi Mika,
Thanks for the hint but I have checked both main line and Wolfram's
branch and I saw this patch. I actually hoped it would fix our problem
but it didn't.
Here some more details: We experienced system lockups (complete lock up,
no reaction whatsoever) in long-term tests under heavy system load with
lots of scheduling and forking/killing. These lockups could be traced to
the I2C driver which after some time ended up in an incoherent state:
i2c_dw_isr was being called with DW_IC_INTR_RX_FULL but
dev->msg_read_idx == dev->msgs_num. This resulted in the FIFO never
being emptied by i2c_dw_read. Since the DW_IC_INTR_RX_FULL interrupt is
cleared by emptying the FIFO, this situation results in an IRQ loop
locking up the system.
We found that the situation systematically occurs just after the
originating process is interrupted (premature return of
wait_for_completion_interruptible_timeout) and further analysis showed
the race condition: Interrupts from the previous transfer are sometimes
triggered after the initialisation of dev in the beginning of
i2c_dw_xfer, thus corrupting the state. If these interrupts occur before
dev is initialised everything works fine.
An alternative solution would probably be to make sure the hardware is
disabled before initialising the dev structure in i2c_dw_xfer.
Greetings,
Christian
--
Christian Ruppert , <christian.ruppert@abilis.com>
/|
Tel: +41/(0)22 816 19-42 //| 3, Chemin du Pré-Fleuri
_// | bilis Systems CH-1228 Plan-les-Ouates
next prev parent reply other threads:[~2013-06-07 8:16 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-06 13:43 [PATCH 1/2] i2c: designware: fix race between subsequent xfers Christian Ruppert
[not found] ` <1370526216-10060-1-git-send-email-christian.ruppert-ux6zf3SgZrrQT0dZR+AlfA@public.gmane.org>
2013-06-06 13:43 ` [PATCH 2/2] i2c: designware: make i2c xfers non-interruptible Christian Ruppert
[not found] ` <1370526216-10060-2-git-send-email-christian.ruppert-ux6zf3SgZrrQT0dZR+AlfA@public.gmane.org>
2013-06-07 5:25 ` Mika Westerberg
[not found] ` <20130607052555.GC11878-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2013-06-07 7:55 ` Christian Ruppert
2013-06-07 5:23 ` [PATCH 1/2] i2c: designware: fix race between subsequent xfers Mika Westerberg
[not found] ` <20130607052353.GB11878-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2013-06-07 8:16 ` Christian Ruppert [this message]
2013-06-07 8:51 ` [PATCH V2] " Christian Ruppert
[not found] ` <1370595083-801-1-git-send-email-christian.ruppert-ux6zf3SgZrrQT0dZR+AlfA@public.gmane.org>
2013-06-07 9:19 ` Andy Shevchenko
[not found] ` <CAHp75VfwSTO7UoEGVpd7qdFVSFNYrBG6aXx1Oj8UAkgbmi=1XQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-06-07 9:30 ` [RFC PATCH] i2c-designware-core: disable adapter before fill dev structure Andy Shevchenko
[not found] ` <1370597401-22501-1-git-send-email-andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2013-06-07 13:01 ` Christian Ruppert
[not found] ` <20130607130133.GH11875-7oYq3qWSd+k@public.gmane.org>
2013-06-11 18:40 ` Wolfram Sang
2013-06-12 9:41 ` Christian Ruppert
2013-06-13 8:16 ` Christian Ruppert
[not found] ` <20130613081621.GB19061-7oYq3qWSd+k@public.gmane.org>
2013-06-13 8:33 ` Andy Shevchenko
2013-06-13 8:58 ` Christian Ruppert
2013-06-14 14:37 ` [PATCH V2] i2c: designware: fix race between subsequent xfers Wolfram Sang
2013-06-17 8:19 ` Christian Ruppert
[not found] ` <20130617081931.GB19380-7oYq3qWSd+k@public.gmane.org>
2013-06-17 8:33 ` Jean Delvare
[not found] ` <20130617103336.354022c2-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2013-06-17 9:01 ` Christian Ruppert
2013-06-17 8:34 ` Mika Westerberg
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=20130607081636.GC11875@ab42.lan \
--to=christian.ruppert-ux6zf3sgzrrqt0dzr+alfa@public.gmane.org \
--cc=khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org \
--cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mika.westerberg-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
--cc=pierrick.hascoet-ux6zf3SgZrrQT0dZR+AlfA@public.gmane.org \
--cc=wsa-z923LK4zBo2bacvFa/9K2g@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).