linux-iio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Wolfram Sang <wsa@the-dreams.de>
To: Daniel Baluta <daniel.baluta@intel.com>
Cc: jic23@kernel.org, knaack.h@gmx.de, lars@metafoo.de,
	pmeerw@pmeerw.net, linux-iio@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-i2c@vger.kernel.org,
	lucas.demarchi@intel.com, srinivas.pandruvada@linux.intel.com,
	ggao@invensense.com, adi.reus@gmail.com, cmo@melexis.com,
	mwelling@ieee.org
Subject: Re: [RFC PATCH 9/9] iio: imu: inv_mpu6050: Fix deadlock between i2c adapter lock and mpu lock
Date: Tue, 1 Mar 2016 21:50:52 +0100	[thread overview]
Message-ID: <20160301205052.GD1488@katana> (raw)
In-Reply-To: <1455810794-3188-10-git-send-email-daniel.baluta@intel.com>

[-- Attachment #1: Type: text/plain, Size: 1901 bytes --]

On Thu, Feb 18, 2016 at 05:53:14PM +0200, Daniel Baluta wrote:
> From: Adriana Reus <adriana.reus@intel.com>
> 
> This deadlock occurs if the accel/gyro and the sensor on the auxiliary
> I2C (in my setup it's an ak8975) are working at the same time.
> 
> Scenario:
> 
>       T1					T2
>      ====				       ====
> inv_mpu6050_read_fifo                  aux sensor op (eg. ak8975_read_raw)
>         |                                     |
> mutex_lock(&indio_dev->mlock)           i2c_transfer
>         |                                     |
> i2c transaction                         i2c adapter lock
>         |                                     |
> i2c adapter lock                        i2c_mux_master_xfer
>                                               |
>                                         inv_mpu6050_select_bypass
>                                               |
>                                         mutex_lock(&indio_dev->mlock)
> 
> When we operate on an mpu sensor the order of locking is mpu lock
> followed by the i2c adapter lock. However, when we operate the auxiliary
> sensor the order of locking is the other way around.
> 
> In order to avoid this enable the bypass mux bit once in the beginning
> and remove the select/deselect_bypass functions.
> 
> This patch moves the bypass enabling in a separate function
> that is called once at probe and removes the functionality from
> inv_mpu_select/deselect_bypass.
> 
> Another advantage of this approach is that power-wise the mpu chip isn't
> powered up at each auxiliary sensor i2c transaction so if only the
> compass is used this would be more power efficient.

I think the comments (power must be enabled on select) rendered this
solution not acceptable. What about using mutex_trylock in
inv_mpu6050_select_bypass() and returning -EAGAIN if the lock is already
held?


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

  parent reply	other threads:[~2016-03-01 20:51 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-18 15:53 [RFC PATCH 0/9] iio: Fix ABBA deadlock in inv-mpu6050 Daniel Baluta
2016-02-18 15:53 ` [RFC PATCH 1/9] iio: imu: inv_mpu6050: Fix multiline comments style Daniel Baluta
2016-02-21 20:36   ` Jonathan Cameron
2016-02-18 15:53 ` [RFC PATCH 2/9] iio: imu: inv_mpu6050: Fix Yoda conditions Daniel Baluta
2016-02-19  9:09   ` Crt Mori
2016-02-21 20:38     ` Jonathan Cameron
2016-03-01 21:23   ` Wolfram Sang
2016-02-18 15:53 ` [RFC PATCH 3/9] iio: imu: inv_mpu6050: Fix newlines to make code easier to read Daniel Baluta
2016-02-21 20:38   ` Jonathan Cameron
2016-02-18 15:53 ` [RFC PATCH 4/9] iio: imu: inv_mpu6050: Remove unnecessary parentheses Daniel Baluta
2016-02-21 20:39   ` Jonathan Cameron
2016-02-18 15:53 ` [RFC PATCH 5/9] iio: imu: inv_mpu6050: Delete space before comma Daniel Baluta
2016-02-18 15:53 ` [RFC PATCH 6/9] iio: imu: inv_mpu6050: Fix code indent for if statement Daniel Baluta
2016-02-21 20:40   ` Jonathan Cameron
2016-02-18 15:53 ` [RFC PATCH 7/9] iio: imu: inv_mpu6050: Fix alignment with open parenthesis Daniel Baluta
2016-02-21 20:41   ` Jonathan Cameron
2016-02-21 20:59     ` Joe Perches
2016-02-21 21:08       ` Jonathan Cameron
2016-02-18 15:53 ` [RFC PATCH 8/9] i2c: i2c-mux: Allow for NULL select callback Daniel Baluta
2016-03-01 20:30   ` Wolfram Sang
2016-03-01 20:38     ` Daniel Baluta
2016-02-18 15:53 ` [RFC PATCH 9/9] iio: imu: inv_mpu6050: Fix deadlock between i2c adapter lock and mpu lock Daniel Baluta
2016-02-18 18:17   ` Srinivas Pandruvada
2016-02-19 20:17     ` Ge Gao
2016-03-01 20:50   ` Wolfram Sang [this message]
2016-03-02 16:33     ` Daniel Baluta
2016-03-02 17:06       ` Wolfram Sang
2016-02-21 23:17 ` [RFC PATCH 0/9] iio: Fix ABBA deadlock in inv-mpu6050 Wolfram Sang
2016-02-22  9:43   ` Daniel Baluta
2016-02-26 15:52   ` Daniel Baluta
2016-03-03 23:09     ` Peter Rosin
2016-03-04 10:20       ` Daniel Baluta

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=20160301205052.GD1488@katana \
    --to=wsa@the-dreams.de \
    --cc=adi.reus@gmail.com \
    --cc=cmo@melexis.com \
    --cc=daniel.baluta@intel.com \
    --cc=ggao@invensense.com \
    --cc=jic23@kernel.org \
    --cc=knaack.h@gmx.de \
    --cc=lars@metafoo.de \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lucas.demarchi@intel.com \
    --cc=mwelling@ieee.org \
    --cc=pmeerw@pmeerw.net \
    --cc=srinivas.pandruvada@linux.intel.com \
    /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).