All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christian Ruppert <christian.ruppert-ux6zf3SgZrrQT0dZR+AlfA@public.gmane.org>
To: Andy Shevchenko
	<andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
Cc: Mika Westerberg
	<mika.westerberg-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
	linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [RFC PATCH] i2c-designware-core: disable adapter before fill dev structure
Date: Fri, 7 Jun 2013 15:01:34 +0200	[thread overview]
Message-ID: <20130607130133.GH11875@ab42.lan> (raw)
In-Reply-To: <1370597401-22501-1-git-send-email-andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>

Hi Andy,

I like your patch and I just did some testing on it. Unluckily, it
doesn't solve the lock-up problem.

I haven't investigated any further but I suspect that on top of the
cases I observed when debugging this (interrupts after initialisation of
dev, easy to prove) there are more obscure cases in which interrupts are
generated in an unexpected manner after errors. The interrupt-driven
transfer state machine of the driver implicitly relies on the fact that
all updates of dev which are related to the same transfer are performed
between the mutex_lock and mutex_unlock calls in i2c_dw_xfer. Thus, I
decided it was safer to disable the block before releasing the mutex
when I wrote my patch.

That said, I think the sequencing at transfer initialisation is more
logical with your patch and I wonder if it is still worth applying. Any
other opinions on this?

Greetings,
  Christian

On Fri, Jun 07, 2013 at 12:30:01PM +0300, Andy Shevchenko wrote:
> Signed-off-by: Andy Shevchenko <andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
> ---
>  drivers/i2c/busses/i2c-designware-core.c | 14 +++++++-------
>  1 file changed, 7 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/i2c/busses/i2c-designware-core.c b/drivers/i2c/busses/i2c-designware-core.c
> index c41ca63..a1d3d95 100644
> --- a/drivers/i2c/busses/i2c-designware-core.c
> +++ b/drivers/i2c/busses/i2c-designware-core.c
> @@ -366,9 +366,6 @@ static void i2c_dw_xfer_init(struct dw_i2c_dev *dev)
>  	struct i2c_msg *msgs = dev->msgs;
>  	u32 ic_con;
>  
> -	/* Disable the adapter */
> -	__i2c_dw_enable(dev, false);
> -
>  	/* set the slave (target) address */
>  	dw_writel(dev, msgs[dev->msg_write_idx].addr, DW_IC_TAR);
>  
> @@ -561,6 +558,13 @@ i2c_dw_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
>  	mutex_lock(&dev->lock);
>  	pm_runtime_get_sync(dev->dev);
>  
> +	ret = i2c_dw_wait_bus_not_busy(dev);
> +	if (ret < 0)
> +		goto done;
> +
> +	/* Disable the adapter */
> +	__i2c_dw_enable(dev, false);
> +
>  	INIT_COMPLETION(dev->cmd_complete);
>  	dev->msgs = msgs;
>  	dev->msgs_num = num;
> @@ -572,10 +576,6 @@ i2c_dw_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
>  	dev->abort_source = 0;
>  	dev->rx_outstanding = 0;
>  
> -	ret = i2c_dw_wait_bus_not_busy(dev);
> -	if (ret < 0)
> -		goto done;
> -
>  	/* start the transfers */
>  	i2c_dw_xfer_init(dev);
>  
> -- 
> 1.8.2.rc0.22.gb3600c3
> 

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

  parent reply	other threads:[~2013-06-07 13:01 UTC|newest]

Thread overview: 31+ 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
2013-06-06 13:43 ` 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
2013-06-06 13:43     ` Christian Ruppert
     [not found]     ` <1370526216-10060-2-git-send-email-christian.ruppert-ux6zf3SgZrrQT0dZR+AlfA@public.gmane.org>
2013-06-07  5:25       ` Mika Westerberg
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  7:55             ` Christian Ruppert
2013-06-07  5:23   ` [PATCH 1/2] i2c: designware: fix race between subsequent xfers Mika Westerberg
2013-06-07  5:23     ` Mika Westerberg
     [not found]     ` <20130607052353.GB11878-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2013-06-07  8:16       ` Christian Ruppert
2013-06-07  8:16         ` Christian Ruppert
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
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 [this message]
     [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-14 14:37       ` Wolfram Sang
2013-06-17  8:19       ` Christian Ruppert
2013-06-17  8:19         ` Christian Ruppert
     [not found]         ` <20130617081931.GB19380-7oYq3qWSd+k@public.gmane.org>
2013-06-17  8:33           ` Jean Delvare
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  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=20130607130133.GH11875@ab42.lan \
    --to=christian.ruppert-ux6zf3sgzrrqt0dzr+alfa@public.gmane.org \
    --cc=andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
    --cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=mika.westerberg-VuQAYsv1563Yd54FQh9/CA@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.