mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Boris Brezillon <boris.brezillon@free-electrons.com>
Cc: Wolfram Sang <wsa@the-dreams.de>,
	linux-i2c@vger.kernel.org, Jonathan Corbet <corbet@lwn.net>,
	linux-doc@vger.kernel.org, Arnd Bergmann <arnd@arndb.de>,
	Przemyslaw Sroka <psroka@cadence.com>,
	Arkadiusz Golec <agolec@cadence.com>,
	Alan Douglas <adouglas@cadence.com>,
	Bartosz Folta <bfolta@cadence.com>, Damian Kos <dkos@cadence.com>,
	Alicja Jurasik-Urbaniak <alicja@cadence.com>,
	Jan Kotas <jank@cadence.com>,
	Cyprian Wronka <cwronka@cadence.com>,
	Alexandre Belloni <alexandre.belloni@free-electrons.com>,
	Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
	Nishanth Menon <nm@ti.com>, Rob Herring <robh+dt@kernel.org>,
	Pawel Moll <pawel.moll@arm.com>,
	Mark Rutland <mark.rutland@arm.com>,
	Ian Campbell <ijc+devicetree@hellion.org.uk>,
	Kumar Gala <galak@codeaurora.org>,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [RFC 2/5] i3c: Add core I3C infrastructure
Date: Tue, 1 Aug 2017 19:13:27 -0700	[thread overview]
Message-ID: <20170802021327.GB23033@kroah.com> (raw)
In-Reply-To: <20170801233001.4b08834f@bbrezillon>

On Tue, Aug 01, 2017 at 11:30:01PM +0200, Boris Brezillon wrote:
> Hi Greg,
> 
> Le Tue, 1 Aug 2017 10:51:33 -0700,
> Greg Kroah-Hartman <gregkh@linuxfoundation.org> a écrit :
> 
> > On Tue, Aug 01, 2017 at 12:48:01PM +0200, Boris Brezillon wrote:
> > > > > +static DEFINE_MUTEX(i3c_core_lock);
> > > > > +
> > > > > +void i3c_bus_lock(struct i3c_bus *bus, bool exclusive)
> > > > > +{
> > > > > +	if (exclusive)
> > > > > +		down_write(&bus->lock);
> > > > > +	else
> > > > > +		down_read(&bus->lock);
> > > > > +}    
> > > > 
> > > > The "exclusive" flag is odd, and messy, and hard to understand, don't
> > > > you agree?  
> > > 
> > > I could create 2 functions, one for the exclusive lock and the other
> > > one for the shared lock.  
> > 
> > Or you could just use a simple mutex until you determine you really
> > would do better with a rw lock :)
> > 
> > > > And have you measured the difference in using a rw lock over
> > > > a normal mutex and found it to be faster?  If not, just use a normal
> > > > mutex, it's simpler and almost always better in the end.  
> > > 
> > > I did not measure the difference, but using a standard lock means
> > > serializing all I3C accesses going through a given master in the core.  
> > 
> > Which you are doing with a rw lock anyway, right?
> 
> Absolutely not. If you look more closely at the code you'll see that
> most of the time the lock is taken in read/non-exclusive mode. The only
> situations where it's taken in exclusive mode is when the operation (and
> associated command) has an impact on the bus and/or its devices.

Then you really need to document the heck out of this, as it was not
obvious at all :)

> > > Unless you see a good reason to not use a R/W lock, I'd like to keep it
> > > this way because master IPs are likely to implement advanced queuing
> > > mechanism (allows one to queue new transfers even if the master is
> > > already busy processing other requests), and serializing things at the
> > > framework level will just prevent us from using this kind of
> > > optimization.  
> > 
> > Unless you can prove otherwise, using a rw lock is almost always worse
> > than just a mutex.
> 
> Is it still true when it's taken in non-exclusive mode most of the
> time, and the time you spend in the critical section is non-negligible?
> 
> I won't pretend I know better than you do what is preferable, it's just
> that the RW lock seemed appropriate to me for the situation I tried to
> described here.

Again, measure it.  If you can't measure it, then don't use it.  Use a
simple lock instead.  Seriously, don't make it more complex until you
really have to.  It sounds like you didn't measure it at all, which
isn't good, please do so.

> > And you shouldn't have a lock for bus transactions,
> > that's just going to be a total mess.
> 
> It's not a lock for bus transactions, it's lock to protect from any
> operation that can have an impact on the bus or its devices (see the
> 'change device address' example above).

Again, document it really well please.

> > > > > +		ret = sprintf(buf + offset, "%s\n", hdrcap_strings[mode]);    
> > > > 
> > > > Multiple lines in a single sysfs file?  No.  
> > > 
> > > Okay. Would that be okay with a different separator (like a comma)?  
> > 
> > No, sysfs files are "one value per file", given you don't have any
> > documentation saying what this file is supposed to be showing, I can't
> > really judge the proper way for you to present it to userspace :)
> 
> Okay. Let's put that aside until I send a v2 with a sysfs doc.
> 
> Still, note that the "one value per file" rule does not apply to all
> sysfs files. I have 2 examples in mind (maybe they are bad examples,
> but they exist):
> 
> - /sys/class/leds/<led>/trigger returns a list of supported triggers
>   each of them is separated by a space
> - /sys/class/graphics/<fbx>/modes lists the supported video modes, one
>   per line

I'm not saying there are not bad files, but I didn't review them :)

A list of supported triggers all on one line and one you pick from it
(the power file is also the same way), is different from multiple lines.
The graphics stuff should be fixed up.

thanks,

greg k-h

  parent reply	other threads:[~2017-08-02  2:13 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-31 16:24 [RFC 0/5] Add I3C subsystem Boris Brezillon
2017-07-31 16:24 ` [RFC 1/5] i2c: Export of_i2c_get_board_info() Boris Brezillon
2017-07-31 16:24 ` [RFC 2/5] i3c: Add core I3C infrastructure Boris Brezillon
2017-07-31 19:17   ` Wolfram Sang
2017-07-31 20:46     ` Boris Brezillon
2017-07-31 20:16   ` Arnd Bergmann
2017-07-31 21:15     ` Boris Brezillon
2017-07-31 21:32       ` Peter Rosin
2017-07-31 21:42       ` Wolfram Sang
2017-08-01 16:47         ` Andrew F. Davis
2017-08-01 17:27           ` Wolfram Sang
2017-08-01 21:47             ` Boris Brezillon
2017-08-02 10:21               ` Wolfram Sang
2017-08-01 12:00       ` Arnd Bergmann
2017-08-01 12:29         ` Boris Brezillon
2017-08-01 13:11           ` Arnd Bergmann
2017-08-01 13:34             ` Boris Brezillon
2017-08-01 13:58               ` Boris Brezillon
2017-08-01 14:22                 ` Arnd Bergmann
2017-08-01 15:14                   ` Boris Brezillon
2017-08-01 20:16                     ` Arnd Bergmann
2017-08-01 14:12               ` Wolfram Sang
2017-08-01 14:48                 ` Boris Brezillon
2017-08-01 15:01                   ` Wolfram Sang
2017-08-01 15:20                     ` Boris Brezillon
2017-08-03  8:03                       ` Boris Brezillon
2017-08-16 21:03                     ` Geert Uytterhoeven
2017-08-17  7:48                       ` Boris Brezillon
2017-08-01  1:40   ` Greg Kroah-Hartman
2017-08-01 10:48     ` Boris Brezillon
2017-08-01 17:51       ` Greg Kroah-Hartman
2017-08-01 21:30         ` Boris Brezillon
2017-08-02  0:54           ` Greg Kroah-Hartman
2017-08-02  2:13           ` Greg Kroah-Hartman [this message]
2017-12-13 16:20             ` Boris Brezillon
2017-12-13 16:51               ` Greg Kroah-Hartman
2017-08-17  9:03   ` Linus Walleij
2017-08-17  9:28     ` Boris Brezillon
2017-07-31 16:24 ` [RFC 3/5] dt-bindings: i3c: Document core bindings Boris Brezillon
2017-08-09 23:43   ` Rob Herring
2017-08-10  8:49     ` Boris Brezillon
2017-07-31 16:24 ` [RFC 4/5] i3c: master: Add driver for Cadence IP Boris Brezillon
2017-07-31 16:24 ` [RFC 5/5] dt-bindings: i3c: Document Cadence I3C master bindings Boris Brezillon
2017-07-31 19:17 ` [RFC 0/5] Add I3C subsystem Wolfram Sang
2017-07-31 20:40   ` Boris Brezillon
2017-07-31 20:47     ` Wolfram Sang
2017-12-12 19:58   ` Boris Brezillon
2017-12-12 22:01     ` 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=20170802021327.GB23033@kroah.com \
    --to=gregkh@linuxfoundation.org \
    --cc=adouglas@cadence.com \
    --cc=agolec@cadence.com \
    --cc=alexandre.belloni@free-electrons.com \
    --cc=alicja@cadence.com \
    --cc=arnd@arndb.de \
    --cc=bfolta@cadence.com \
    --cc=boris.brezillon@free-electrons.com \
    --cc=corbet@lwn.net \
    --cc=cwronka@cadence.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dkos@cadence.com \
    --cc=galak@codeaurora.org \
    --cc=ijc+devicetree@hellion.org.uk \
    --cc=jank@cadence.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=nm@ti.com \
    --cc=pawel.moll@arm.com \
    --cc=psroka@cadence.com \
    --cc=robh+dt@kernel.org \
    --cc=thomas.petazzoni@free-electrons.com \
    --cc=wsa@the-dreams.de \
    /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

Powered by JetHome