From: Thomas Gleixner <tglx@linutronix.de>
To: David Brownell <david-b@pacbell.net>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Linux Kernel list <linux-kernel@vger.kernel.org>,
Florian Fainelli <florian.fainelli@telecomint.eu>,
Haavard Skinnemoen <hskinnemoen@atmel.com>,
Ingo Molnar <mingo@elte.hu>,
Nick Piggin <nickpiggin@yahoo.com.au>
Subject: Re: [patch 2.6.24-rc2 1/3] generic gpio -- gpio_chip support
Date: Wed, 14 Nov 2007 13:14:04 +0100 (CET) [thread overview]
Message-ID: <alpine.LFD.0.9999.0711141228210.3265@localhost.localdomain> (raw)
In-Reply-To: <200711121726.39263.david-b@pacbell.net>
On Mon, 12 Nov 2007, David Brownell wrote:
> > I'm still trying to understand what you've observed here. Is it the case
> > that a single gpio operation went from 6.4 up to 11.2 usecs?
>
> That was a single bitbanged I2C bit transfer, with embedded udelay()s.
> I believe that was four gpio operations, as summarized at the end of
> that email above. Enabling preempt + debug increased the cost of
> each GPIO call from whatever it was (reasonable) by 1.2 usecs.
This raw lock change is just pampering over the design problem of the
gpio lib:
There is no need to check for every single access to a GPIO pin,
whether the pin has a valid number and the chip, which provides access
to the pin, is still registered.
Each driver, which wants to access a pin, needs to make sure that
- the pin is available
- the pin is associated to this driver
- the chip reference count is incremented
_before_ it starts to do anything with the pin. Once this is done the
access to the pin is completely lock free except for the protection of
the chip hardware itself.
What you really need is a different API to request and free the access
to a particular pin like:
struct gpio_desc {
struct gpio_chip *chip;
int pinoffset;
};
int gpio_request_pin(int nr, struct gpio_desc *desc);
void gpio_release_pin(struct gpio_desc *desc);
where the description structure is caller provided to avoid static
allocation overhead for a large number of unused gpios.
The modification functions just use the description to access the pin
instead of the number and the per access lookup/locking.
The protection of the chip list can be converted to a mutex and
does not need to be a spinlock at all.
Thanks,
tglx
next prev parent reply other threads:[~2007-11-14 12:14 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-11-09 19:36 [patch 2.6.24-rc2 1/3] generic gpio -- gpio_chip support David Brownell
2007-11-12 21:36 ` Andrew Morton
2007-11-12 22:32 ` David Brownell
2007-11-12 23:28 ` Andrew Morton
2007-11-13 1:26 ` David Brownell
2007-11-13 9:34 ` Ingo Molnar
2007-11-13 19:22 ` David Brownell
2007-11-13 12:25 ` Nick Piggin
2007-11-14 8:20 ` David Brownell
2007-11-13 21:18 ` Nick Piggin
2007-11-15 6:28 ` David Brownell
2007-11-14 18:51 ` Nick Piggin
2007-11-15 8:17 ` David Brownell
2007-11-14 19:19 ` Nick Piggin
2007-11-14 19:21 ` Nick Piggin
2007-11-13 20:46 ` Andrew Morton
2007-11-14 6:52 ` David Brownell
2007-11-13 19:45 ` Nick Piggin
2007-11-14 8:37 ` David Brownell
2007-11-13 21:08 ` Nick Piggin
2007-11-15 6:23 ` David Brownell
2007-11-14 9:54 ` Haavard Skinnemoen
2007-11-15 6:50 ` David Brownell
2007-11-15 8:43 ` Haavard Skinnemoen
2007-11-14 9:59 ` Ingo Molnar
2007-11-14 12:14 ` Thomas Gleixner [this message]
2007-11-15 7:02 ` David Brownell
2007-11-15 7:32 ` Thomas Gleixner
2007-11-15 8:20 ` David Brownell
2007-11-15 8:51 ` Haavard Skinnemoen
2007-11-15 18:55 ` David Brownell
2007-11-15 7:17 ` David Brownell
2007-11-15 7:35 ` Thomas Gleixner
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=alpine.LFD.0.9999.0711141228210.3265@localhost.localdomain \
--to=tglx@linutronix.de \
--cc=akpm@linux-foundation.org \
--cc=david-b@pacbell.net \
--cc=florian.fainelli@telecomint.eu \
--cc=hskinnemoen@atmel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=nickpiggin@yahoo.com.au \
/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