All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rabin VINCENT <rabin.vincent@stericsson.com>
To: Samuel Ortiz <sameo@linux.intel.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	STEricsson_nomadik_linux <STEricsson_nomadik_linux@list.st.com>,
	Linus WALLEIJ <linus.walleij@stericsson.com>,
	"l.fu@pengutronix.de" <l.fu@pengutronix.de>
Subject: Re: [PATCHv2 1/3] mfd: add STMPE I/O Expander support
Date: Tue, 29 Jun 2010 08:43:26 +0530	[thread overview]
Message-ID: <20100629031324.GA6430@bnru02.bnr.st.com> (raw)
In-Reply-To: <20100627235515.GB9264@sortiz-mobl>

Hi Samuel,

On Mon, Jun 28, 2010 at 01:55:16 +0200, Samuel Ortiz wrote:
> On Tue, Jun 22, 2010 at 07:25:27PM +0530, Rabin Vincent wrote:
> > +int stmpe_reg_read(struct stmpe *stmpe, u8 reg)
> > +{
> > +	int ret;
> > +
> > +	ret = i2c_smbus_read_byte_data(stmpe->i2c, reg);
> > +	if (ret < 0)
> > +		dev_err(stmpe->dev, "failed to read reg %#x: %d\n",
> > +			reg, ret);
> > +
> > +	dev_vdbg(stmpe->dev, "rd: reg %#x => data %#x\n", reg, ret);
> > +
> > +	return ret;
> > +}
> > +EXPORT_SYMBOL(stmpe_reg_read);
> I think your locking is broken here.
> If your exporting this routine (and the next ones below), you'd better make
> sure you're under stmpe->lock for the stmpe register concurrent access.

stmpe_reg_read() and stmpe_reg_write() are just a call to one
i2c_smbus_* function, and the I2C core takes a bus_lock internally
preventing concurrent accesses.

The only place where the I2C core locking is not sufficient is the
read/modify/write sequence, and we provide stmpe_set_bits() for that,
which takes a lock.  If someone uses reg_read()/reg_write() sequences on
registers where they should be using set_bits(), adding extra locking in
reg_read()/reg_write() will not provide any additional safeguard.

The same scheme is used by adp5520.

Could you please explain why more locking is needed?

> What I suggest is that you'd have the exported routines taking your stmpe
> lock, and then have an internal version (e.g. named with a __stmpe prefix)
> without lock taken for your core code. In your case, you could probably call
> the i2c I/O routines directly, that's up to you.
> 
> > +/**
> > + * stmpe_set_bits() - set the value of a bitfield in a stmpe register
> > + * @stmpe:	device to write to
> > + * @reg:	register to write
> > + * @mask:	mask of bits to set
> > + * @val:	value to set
> > + */
> > +int stmpe_set_bits(struct stmpe *stmpe, u8 reg, u8 mask, u8 val)
> > +{
> > +	int ret;
> > +
> > +	mutex_lock(&stmpe->lock);
> > +
> > +	ret = stmpe_reg_read(stmpe, reg);
> That one for example would be __stmpe_read().
> 
> > +/**
> > + * stmpe_block_write() - write multiple stmpe registers
> > + * @stmpe:	device to write to
> > + * @reg:	first register
> > + * @length:	number of registers
> > + * @values:	values to write
> > + */
> > +int stmpe_block_write(struct stmpe *stmpe, u8 reg, u8 length,
> > +			const u8 *values)
> > +{
> > +	int ret;
> > +
> > +	dev_vdbg(stmpe->dev, "wr: regs %#x (%d)\n", reg, length);
> > +#ifdef VERBOSE_DEBUG
> > +	print_hex_dump_bytes("stmpe wr: ", dump_prefix_offset, values, length);
> > +#endif
> I don't really enjoy this part for 2 reasons:
> - You should use a less generic ifdef switch, prefixed with STMPE_ for
> example.

The dev_vdbg() in the previous line is activated via VERBOSE_DEBUG, so
the idea was to have this dump use the same config.  I'll fix it as your
recommended, though.  Will fix your other comments too.

Rabin

  reply	other threads:[~2010-06-29  3:14 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-31 12:17 [PATCH 1/3] mfd: add STMPExxxx I/O Expander support Rabin Vincent
2010-05-31 12:17 ` [PATCH 2/3] gpio: add STMPExxxx GPIO driver Rabin Vincent
2010-05-31 12:17 ` [PATCH 3/3] input: add STMPExxxx keypad driver Rabin Vincent
2010-05-31 12:17   ` Rabin Vincent
2010-06-01 22:16   ` Dmitry Torokhov
2010-06-02 13:56     ` Rabin VINCENT
2010-06-02 16:05       ` Dmitry Torokhov
2010-06-18 23:42 ` [PATCH 1/3] mfd: add STMPExxxx I/O Expander support Samuel Ortiz
2010-06-19 13:50   ` Luotao Fu
2010-06-21 13:33   ` Rabin VINCENT
2010-06-21 15:45     ` Luotao Fu
2010-06-22 13:55       ` [PATCHv2 1/3] mfd: add STMPE " Rabin Vincent
2010-06-27 23:55         ` Samuel Ortiz
2010-06-29  3:13           ` Rabin VINCENT [this message]
2010-06-29 15:33             ` Samuel Ortiz
2010-07-01 12:00           ` [PATCHv3 " Rabin Vincent
2010-07-01 12:34             ` Luotao Fu
2010-07-02 11:22               ` [PATCHv4 " Rabin Vincent
2010-07-02 15:31                 ` Samuel Ortiz
2010-07-02 11:22               ` [PATCHv4 2/3] gpio: add STMPE GPIO driver Rabin Vincent
2010-07-02 11:22               ` [PATCHv4 3/3] input: add STMPE keypad driver Rabin Vincent
2010-07-02 12:10               ` [RESEND] [PATCH V8] input: STMPE touch controller support Luotao Fu
2010-07-05 14:53                 ` Samuel Ortiz
2010-07-01 12:00           ` [PATCHv3 2/3] gpio: add STMPE GPIO driver Rabin Vincent
2010-07-01 12:29             ` Luotao Fu
2010-07-01 12:00           ` [PATCHv3 3/3] input: add STMPE keypad driver Rabin Vincent
2010-06-22 13:55       ` [PATCHv2 2/3] gpio: add STMPE GPIO driver Rabin Vincent
2010-06-22 13:55       ` [PATCHv2 3/3] input: add STMPE keypad driver Rabin Vincent
2010-06-22 13:56       ` [PATCH 1/3] mfd: add STMPExxxx I/O Expander support Rabin VINCENT
2010-06-24 11:13         ` mfd: STMPExxxx fixes and touch screen support Luotao Fu
2010-06-24 11:13         ` [PATCH 1/6] gpio/stmpe-gpio: set GPIO alternate function while requesting Luotao Fu
2010-06-24 12:43           ` Rabin VINCENT
2010-06-24 11:13         ` [PATCH 2/6] gpio/stmpe-gpio: fix set direction input Luotao Fu
2010-06-24 12:03           ` Rabin VINCENT
2010-06-24 11:13         ` [PATCH 3/6] mfd/stmpexxx: add touchscreen platform data Luotao Fu
2010-06-24 11:13         ` [PATCH 4/6] mfd/stmpexxx: change touchscreen irq Luotao Fu
2010-06-24 13:09           ` Rabin VINCENT
2010-06-24 13:17             ` Luotao Fu
2010-06-24 11:13         ` [PATCH 5/6] mfd/stmpexxx: fix stmpe811 enable hook Luotao Fu
2010-06-24 12:11           ` Rabin VINCENT
2010-06-24 12:32             ` Luotao Fu
2010-06-24 12:47               ` [PATCH 5/6 V3] " Luotao Fu
2010-06-24 13:05                 ` Rabin VINCENT
2010-06-24 11:13         ` [PATCH 6/6 V4] input: STMPE touch controller support Luotao Fu
2010-06-24 12:27           ` [PATCH 5/6 V2] mfd/stmpexxx: fix stmpe811 enable hook Luotao Fu
2010-06-24 12:35             ` Rabin VINCENT
2010-06-24 12:46               ` Luotao Fu
2010-06-24 12:28           ` [PATCH 6/6 V5] input: STMPE touch controller support Luotao Fu
2010-06-24 14:26             ` [PATCH 5/5] " Luotao Fu
2010-06-24 16:24               ` Dmitry Torokhov
2010-06-24 16:57                 ` Luotao Fu
2010-06-25  8:37                 ` [PATCH 5/5 V7] " Luotao Fu
2010-06-25  9:11                   ` Dmitry Torokhov
2010-06-25  9:32                     ` Luotao Fu
2010-06-27 21:24                     ` Samuel Ortiz
2010-06-25  9:34                   ` [PATCH 5/5 V8] " Luotao Fu
2010-06-24 12:31           ` [PATCH 6/6 V4] " Rabin VINCENT
2010-06-24 12:42             ` Luotao Fu
2010-06-24 13:01               ` Rabin VINCENT
2010-06-24 13:11                 ` Luotao Fu
2010-06-24 13:01               ` Rabin VINCENT

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=20100629031324.GA6430@bnru02.bnr.st.com \
    --to=rabin.vincent@stericsson.com \
    --cc=STEricsson_nomadik_linux@list.st.com \
    --cc=l.fu@pengutronix.de \
    --cc=linus.walleij@stericsson.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sameo@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 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.