All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Buesch <mb@bu3sch.de>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: dbrownell@users.sourceforge.net, linux-kernel@vger.kernel.org,
	openwrt-devel@lists.openwrt.org
Subject: Re: [PATCH] spi-gpio: Sanitize MISO bitvalue
Date: Wed, 18 Feb 2009 22:52:42 +0100	[thread overview]
Message-ID: <200902182252.42519.mb@bu3sch.de> (raw)
In-Reply-To: <20090218130426.a12e6bfa.akpm@linux-foundation.org>

On Wednesday 18 February 2009 22:04:26 Andrew Morton wrote:
> On Sun, 15 Feb 2009 16:30:41 +0100
> Michael Buesch <mb@bu3sch.de> wrote:
> 
> > gpio_get_value() returns 0 or nonzero, but getmiso() expects 0 or 1.
> > Sanitize the value to a 0/1 boolean.
> > 
> > Signed-off-by: Michael Buesch <mb@bu3sch.de>
> > 
> > ---
> > 
> > Well, we could also change the bitbang helpers in linux/spi/spi_bitbang.h
> > or change the way the gpio_get_value API is defined, but I personally think
> > this patch is pretty good as is.
> > In any case, it fixes a real bug on platforms like the bcm47xx which
> > return 0 or nonzero for gpio_get_value.
> > 
> > Index: linux-2.6/drivers/spi/spi_gpio.c
> > ===================================================================
> > --- linux-2.6.orig/drivers/spi/spi_gpio.c	2009-02-14 21:37:14.000000000 +0100
> > +++ linux-2.6/drivers/spi/spi_gpio.c	2009-02-15 16:27:16.000000000 +0100
> > @@ -114,7 +114,7 @@ static inline void setmosi(const struct 
> >  
> >  static inline int getmiso(const struct spi_device *spi)
> >  {
> > -	return gpio_get_value(SPI_MISO_GPIO);
> > +	return !!gpio_get_value(SPI_MISO_GPIO);
> >  }
> >  
> >  #undef pdata
> > 
> 
> Seems somewhat pointless, really.  It's a very common C idiom to treat
> any non-zero value as true, and the above just adds a couple more
> instructions which we didn't need to execute.

No you must look at the user of getmiso().
It does something like this:

	for (bitnr = 0; bitnr < x; bitnr++) {
		foo = getmiso() << bitnr;
		...
	}

> If this function is speed-critical (which is what David's comment
> implies) then perhaps this should be "fixed" by tightening up the
> (presently apparently undocumented) interface?  And then speeding up
> all the other getmiso() implementations?

He was talking about gpio_get_value() and my (silly) suggestion to change
it to return 0 or 1. I knew that he would reject that, because we already talked
about this in the past. So changing getmiso() _is_ the way to go. It is the cheapest
way to do this, in fact. Doing it _inside_ of getmiso() would mean that it could
possibly be redundant, if upper layers already did it.

David suggested documenting the fact that getmiso() expects 0/1.
He can easily do that in yet another patch if he likes this.

My patch is just supposed to fix a real-world bug, which isn't in a released kernel, yet.
So if we hurry up, we can still get it into .29.

The documentation change can still go in later.

-- 
Greetings, Michael.

  reply	other threads:[~2009-02-18 21:55 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-15 15:30 [PATCH] spi-gpio: Sanitize MISO bitvalue Michael Buesch
2009-02-16 19:58 ` David Brownell
2009-02-18 21:04 ` Andrew Morton
2009-02-18 21:52   ` Michael Buesch [this message]
2009-02-19  0:29   ` David Brownell

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=200902182252.42519.mb@bu3sch.de \
    --to=mb@bu3sch.de \
    --cc=akpm@linux-foundation.org \
    --cc=dbrownell@users.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=openwrt-devel@lists.openwrt.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.