From: Wolfram Sang <wsa@the-dreams.de>
To: Peter Rosin <peda@axentia.se>
Cc: linux-kernel@vger.kernel.org, Jonathan Corbet <corbet@lwn.net>,
Peter Korsgaard <peter.korsgaard@barco.com>,
Guenter Roeck <linux@roeck-us.net>,
Jonathan Cameron <jic23@kernel.org>,
Hartmut Knaack <knaack.h@gmx.de>,
Lars-Peter Clausen <lars@metafoo.de>,
Peter Meerwald <pmeerw@pmeerw.net>,
Antti Palosaari <crope@iki.fi>,
Mauro Carvalho Chehab <mchehab@osg.samsung.com>,
Rob Herring <robh+dt@kernel.org>,
Frank Rowand <frowand.list@gmail.com>,
Grant Likely <grant.likely@linaro.org>,
Andrew Morton <akpm@linux-foundation.org>,
"David S. Miller" <davem@davemloft.net>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Kalle Valo <kvalo@codeaurora.org>, Jiri Slaby <jslaby@suse.com>,
Daniel Baluta <daniel.baluta@intel.com>,
Lucas De Marchi <lucas.demarchi@intel.com>,
Matt Ranostay <matt.ranostay@intel.com>,
Krzysztof Kozlowski <k.kozlowski@samsung.com>,
Hans Verkuil <hans.v>
Subject: Re: [PATCH v9 0/9] i2c mux cleanup and locking update
Date: Wed, 4 May 2016 22:42:48 +0200 [thread overview]
Message-ID: <20160504204248.GA4270@katana> (raw)
In-Reply-To: <1462392935-28011-1-git-send-email-peda@axentia.se>
[-- Attachment #1: Type: text/plain, Size: 3605 bytes --]
On Wed, May 04, 2016 at 10:15:26PM +0200, Peter Rosin wrote:
> Hi!
>
> I have a pair of boards with this i2c topology:
>
> GPIO ---| ------ BAT1
> | v /
> I2C -----+------B---+---- MUX
> | \
> EEPROM ------ BAT2
>
> (B denotes the boundary between the boards)
>
> The problem with this is that the GPIO controller sits on the same i2c bus
> that it MUXes. For pca954x devices this is worked around by using unlocked
> transfers when updating the MUX. I have no such luck as the GPIO is a general
> purpose IO expander and the MUX is just a random bidirectional MUX, unaware
> of the fact that it is muxing an i2c bus. Extending unlocked transfers
> into the GPIO subsystem is too ugly to even think about. But the general hw
> approach is sane in my opinion, with the number of connections between the
> two boards minimized. To put it plainly, I need support for it.
>
> So, I observe that while it is needed to have the i2c bus locked during the
> actual MUX update in order to avoid random garbage on the slave side, it
> is not strictly a must to have it locked over the whole sequence of a full
> select-transfer-deselect operation. The MUX itself needs to be locked, so
> transfers to clients behind the mux are serialized, and the MUX needs to be
> stable during all i2c traffic (otherwise individual mux slave segments
> might see garbage).
>
> This series accomplishes this by adding code to i2c-mux-gpio and
> i2c-mux-pinctrl that determines if all involved devices used to update the
> mux are controlled by the same root i2c adapter that is muxed. When this
> is the case, the select-transfer-deselect operations should be locked
> individually to avoid the deadlock. The i2c bus *is* still locked
> during muxing, since the muxing happens as part of i2c transfers. This
> is true even if the MUX is updated with several transfers to the GPIO (at
> least as long as *all* MUX changes are using the i2c master bus). A lock
> is added to i2c adapters that muxes on that adapter grab, so that transfers
> through the muxes are serialized.
>
> Concerns:
> - The locking is perhaps too complex?
> - I worry about the priority inheritance aspect of the adapter lock. When
> the transfers behind the mux are divided into select-transfer-deselect all
> locked individually, low priority transfers get more chances to interfere
> with high priority transfers.
> - When doing an i2c_transfer() in_atomic() context or with irqs_disabled(),
> there is a higher possibility that the mux is not returned to its idle
> state after a failed (-EAGAIN) transfer due to trylock.
> - Is the detection of i2c-controlled gpios and pinctrls sane (i.e. the
> usage of the new i2c_root_adapter() function in 18/24)?
>
> The first half (patches 01-15 in v7) of what was originally part of this
> series have already been scheduled for 4.6. So, this is the second half
> (patches 16-24 in v7, patches 1-9 in v9).
>
> To summarize the series, there is some preparatory locking changes in
> in 1/9 and the real meat is in 3/9. There is some documentation added in
> 4/9 while 5/9 and after are cleanups to existing drivers utilizing
> the new stuff.
>
> PS. needs a bunch of testing, I do not have access to all the involved hw.
>
> This second half of the series is planned to be merged with 4.7 and can
> also be pulled from github, if that is preferred:
>
Applied all to for-next, thanks for keeping at it!
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: Wolfram Sang <wsa@the-dreams.de>
To: Peter Rosin <peda@axentia.se>
Cc: linux-kernel@vger.kernel.org, Jonathan Corbet <corbet@lwn.net>,
Peter Korsgaard <peter.korsgaard@barco.com>,
Guenter Roeck <linux@roeck-us.net>,
Jonathan Cameron <jic23@kernel.org>,
Hartmut Knaack <knaack.h@gmx.de>,
Lars-Peter Clausen <lars@metafoo.de>,
Peter Meerwald <pmeerw@pmeerw.net>,
Antti Palosaari <crope@iki.fi>,
Mauro Carvalho Chehab <mchehab@osg.samsung.com>,
Rob Herring <robh+dt@kernel.org>,
Frank Rowand <frowand.list@gmail.com>,
Grant Likely <grant.likely@linaro.org>,
Andrew Morton <akpm@linux-foundation.org>,
"David S. Miller" <davem@davemloft.net>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Kalle Valo <kvalo@codeaurora.org>, Jiri Slaby <jslaby@suse.com>,
Daniel Baluta <daniel.baluta@intel.com>,
Lucas De Marchi <lucas.demarchi@intel.com>,
Matt Ranostay <matt.ranostay@intel.com>,
Krzysztof Kozlowski <k.kozlowski@samsung.com>,
Hans Verkuil <hans.verkuil@cisco.com>,
Terry Heo <terryheo@google.com>, Arnd Bergmann <arnd@arndb.de>,
Tommi Rantala <tt.rantala@gmail.com>,
Crestez Dan Leonard <leonard.crestez@intel.com>,
linux-i2c@vger.kernel.org, linux-doc@vger.kernel.org,
linux-iio@vger.kernel.org, linux-media@vger.kernel.org,
devicetree@vger.kernel.org
Subject: Re: [PATCH v9 0/9] i2c mux cleanup and locking update
Date: Wed, 4 May 2016 22:42:48 +0200 [thread overview]
Message-ID: <20160504204248.GA4270@katana> (raw)
In-Reply-To: <1462392935-28011-1-git-send-email-peda@axentia.se>
[-- Attachment #1: Type: text/plain, Size: 3605 bytes --]
On Wed, May 04, 2016 at 10:15:26PM +0200, Peter Rosin wrote:
> Hi!
>
> I have a pair of boards with this i2c topology:
>
> GPIO ---| ------ BAT1
> | v /
> I2C -----+------B---+---- MUX
> | \
> EEPROM ------ BAT2
>
> (B denotes the boundary between the boards)
>
> The problem with this is that the GPIO controller sits on the same i2c bus
> that it MUXes. For pca954x devices this is worked around by using unlocked
> transfers when updating the MUX. I have no such luck as the GPIO is a general
> purpose IO expander and the MUX is just a random bidirectional MUX, unaware
> of the fact that it is muxing an i2c bus. Extending unlocked transfers
> into the GPIO subsystem is too ugly to even think about. But the general hw
> approach is sane in my opinion, with the number of connections between the
> two boards minimized. To put it plainly, I need support for it.
>
> So, I observe that while it is needed to have the i2c bus locked during the
> actual MUX update in order to avoid random garbage on the slave side, it
> is not strictly a must to have it locked over the whole sequence of a full
> select-transfer-deselect operation. The MUX itself needs to be locked, so
> transfers to clients behind the mux are serialized, and the MUX needs to be
> stable during all i2c traffic (otherwise individual mux slave segments
> might see garbage).
>
> This series accomplishes this by adding code to i2c-mux-gpio and
> i2c-mux-pinctrl that determines if all involved devices used to update the
> mux are controlled by the same root i2c adapter that is muxed. When this
> is the case, the select-transfer-deselect operations should be locked
> individually to avoid the deadlock. The i2c bus *is* still locked
> during muxing, since the muxing happens as part of i2c transfers. This
> is true even if the MUX is updated with several transfers to the GPIO (at
> least as long as *all* MUX changes are using the i2c master bus). A lock
> is added to i2c adapters that muxes on that adapter grab, so that transfers
> through the muxes are serialized.
>
> Concerns:
> - The locking is perhaps too complex?
> - I worry about the priority inheritance aspect of the adapter lock. When
> the transfers behind the mux are divided into select-transfer-deselect all
> locked individually, low priority transfers get more chances to interfere
> with high priority transfers.
> - When doing an i2c_transfer() in_atomic() context or with irqs_disabled(),
> there is a higher possibility that the mux is not returned to its idle
> state after a failed (-EAGAIN) transfer due to trylock.
> - Is the detection of i2c-controlled gpios and pinctrls sane (i.e. the
> usage of the new i2c_root_adapter() function in 18/24)?
>
> The first half (patches 01-15 in v7) of what was originally part of this
> series have already been scheduled for 4.6. So, this is the second half
> (patches 16-24 in v7, patches 1-9 in v9).
>
> To summarize the series, there is some preparatory locking changes in
> in 1/9 and the real meat is in 3/9. There is some documentation added in
> 4/9 while 5/9 and after are cleanups to existing drivers utilizing
> the new stuff.
>
> PS. needs a bunch of testing, I do not have access to all the involved hw.
>
> This second half of the series is planned to be merged with 4.7 and can
> also be pulled from github, if that is preferred:
>
Applied all to for-next, thanks for keeping at it!
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2016-05-04 20:42 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-04 20:15 [PATCH v9 0/9] i2c mux cleanup and locking update Peter Rosin
2016-05-04 20:15 ` Peter Rosin
2016-05-04 20:15 ` [PATCH v9 1/9] i2c: allow adapter drivers to override the adapter locking Peter Rosin
2016-05-04 20:15 ` Peter Rosin
2016-05-04 20:15 ` [PATCH v9 2/9] i2c: muxes always lock the parent adapter Peter Rosin
2016-05-04 20:15 ` Peter Rosin
2016-05-04 20:15 ` [PATCH v9 3/9] i2c-mux: relax locking of the top i2c adapter during mux-locked muxing Peter Rosin
2016-05-04 20:15 ` Peter Rosin
2016-05-04 20:15 ` [PATCH v9 4/9] i2c-mux: document i2c muxes and elaborate on parent-/mux-locked muxes Peter Rosin
2016-05-04 20:15 ` Peter Rosin
2016-05-04 20:15 ` [PATCH v9 5/9] iio: imu: inv_mpu6050: change the i2c gate to be mux-locked Peter Rosin
2016-05-04 20:15 ` Peter Rosin
2016-05-04 20:15 ` [PATCH v9 6/9] [media] si2168: " Peter Rosin
2016-05-04 20:15 ` Peter Rosin
2016-05-04 20:15 ` [PATCH v9 7/9] [media] rtl2832: " Peter Rosin
2016-05-04 20:15 ` Peter Rosin
2016-05-04 20:15 ` [PATCH v9 8/9] [media] rtl2832_sdr: get rid of empty regmap wrappers Peter Rosin
2016-05-04 20:15 ` Peter Rosin
2016-05-04 20:15 ` [PATCH v9 9/9] [media] rtl2832: regmap is aware of lockdep, drop local locking hack Peter Rosin
2016-05-04 20:15 ` Peter Rosin
2016-05-04 20:42 ` Wolfram Sang [this message]
2016-05-04 20:42 ` [PATCH v9 0/9] i2c mux cleanup and locking update Wolfram Sang
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=20160504204248.GA4270@katana \
--to=wsa@the-dreams.de \
--cc=akpm@linux-foundation.org \
--cc=corbet@lwn.net \
--cc=crope@iki.fi \
--cc=daniel.baluta@intel.com \
--cc=davem@davemloft.net \
--cc=frowand.list@gmail.com \
--cc=grant.likely@linaro.org \
--cc=gregkh@linuxfoundation.org \
--cc=jic23@kernel.org \
--cc=jslaby@suse.com \
--cc=k.kozlowski@samsung.com \
--cc=knaack.h@gmx.de \
--cc=kvalo@codeaurora.org \
--cc=lars@metafoo.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=lucas.demarchi@intel.com \
--cc=matt.ranostay@intel.com \
--cc=mchehab@osg.samsung.com \
--cc=peda@axentia.se \
--cc=peter.korsgaard@barco.com \
--cc=pmeerw@pmeerw.net \
--cc=robh+dt@kernel.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.