From: William Breathitt Gray <vilhelm.gray@gmail.com>
To: Julia Cartwright <julia@ni.com>
Cc: Linus Walleij <linus.walleij@linaro.org>,
Alexandre Courbot <gnurou@gmail.com>,
linux-kernel@vger.kernel.org, linux-rt-users@vger.kernel.org,
linux-gpio@vger.kernel.org
Subject: Re: [PATCH v2 7/9] gpio: 104-idi-48: make use of raw_spinlock variants
Date: Wed, 22 Mar 2017 08:44:14 -0400 [thread overview]
Message-ID: <20170322124414.GA22323@sophia> (raw)
In-Reply-To: <a9b84439c28b96a9b6a4cbfca85f1e13a457d25d.1490135047.git.julia@ni.com>
On Tue, Mar 21, 2017 at 05:43:07PM -0500, Julia Cartwright wrote:
>The 104-idi-48 gpio driver currently implements an irq_chip for handling
>interrupts; due to how irq_chip handling is done, it's necessary for the
>irq_chip methods to be invoked from hardirq context, even on a a
>real-time kernel. Because the spinlock_t type becomes a "sleeping"
>spinlock w/ RT kernels, it is not suitable to be used with irq_chips.
>
>A quick audit of the operations under the lock reveal that they do only
>minimal, bounded work, and are therefore safe to do under a raw spinlock.
>
>Signed-off-by: Julia Cartwright <julia@ni.com>
Hi Julia,
This driver also uses a second spinlock_t, called ack_lock, to prevent
reentrance into the idi_48_irq_handler function. Should ack_lock also be
implemented as a raw_spinlock_t?
Thanks,
William Breathitt Gray
>---
>New patch as of v2 of series.
>
> drivers/gpio/gpio-104-idi-48.c | 18 ++++++++++--------
> 1 file changed, 10 insertions(+), 8 deletions(-)
>
>diff --git a/drivers/gpio/gpio-104-idi-48.c b/drivers/gpio/gpio-104-idi-48.c
>index 568375a7ebc2..337c048168d8 100644
>--- a/drivers/gpio/gpio-104-idi-48.c
>+++ b/drivers/gpio/gpio-104-idi-48.c
>@@ -51,7 +51,7 @@ MODULE_PARM_DESC(irq, "ACCES 104-IDI-48 interrupt line numbers");
> */
> struct idi_48_gpio {
> struct gpio_chip chip;
>- spinlock_t lock;
>+ raw_spinlock_t lock;
> spinlock_t ack_lock;
> unsigned char irq_mask[6];
> unsigned base;
>@@ -112,11 +112,12 @@ static void idi_48_irq_mask(struct irq_data *data)
> if (!idi48gpio->irq_mask[boundary]) {
> idi48gpio->cos_enb &= ~BIT(boundary);
>
>- spin_lock_irqsave(&idi48gpio->lock, flags);
>+ raw_spin_lock_irqsave(&idi48gpio->lock, flags);
>
> outb(idi48gpio->cos_enb, idi48gpio->base + 7);
>
>- spin_unlock_irqrestore(&idi48gpio->lock, flags);
>+ raw_spin_unlock_irqrestore(&idi48gpio->lock,
>+ flags);
> }
>
> return;
>@@ -145,11 +146,12 @@ static void idi_48_irq_unmask(struct irq_data *data)
> if (!prev_irq_mask) {
> idi48gpio->cos_enb |= BIT(boundary);
>
>- spin_lock_irqsave(&idi48gpio->lock, flags);
>+ raw_spin_lock_irqsave(&idi48gpio->lock, flags);
>
> outb(idi48gpio->cos_enb, idi48gpio->base + 7);
>
>- spin_unlock_irqrestore(&idi48gpio->lock, flags);
>+ raw_spin_unlock_irqrestore(&idi48gpio->lock,
>+ flags);
> }
>
> return;
>@@ -186,11 +188,11 @@ static irqreturn_t idi_48_irq_handler(int irq, void *dev_id)
>
> spin_lock(&idi48gpio->ack_lock);
>
>- spin_lock(&idi48gpio->lock);
>+ raw_spin_lock(&idi48gpio->lock);
>
> cos_status = inb(idi48gpio->base + 7);
>
>- spin_unlock(&idi48gpio->lock);
>+ raw_spin_unlock(&idi48gpio->lock);
>
> /* IRQ Status (bit 6) is active low (0 = IRQ generated by device) */
> if (cos_status & BIT(6)) {
>@@ -256,7 +258,7 @@ static int idi_48_probe(struct device *dev, unsigned int id)
> idi48gpio->chip.get = idi_48_gpio_get;
> idi48gpio->base = base[id];
>
>- spin_lock_init(&idi48gpio->lock);
>+ raw_spin_lock_init(&idi48gpio->lock);
> spin_lock_init(&idi48gpio->ack_lock);
>
> err = devm_gpiochip_add_data(dev, &idi48gpio->chip, idi48gpio);
>--
>2.12.0
>
next prev parent reply other threads:[~2017-03-22 12:51 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-21 22:43 [Cocci] [PATCH v2 0/9] fixup usage of non-raw spinlocks in irqchips Julia Cartwright
2017-03-21 22:43 ` Julia Cartwright
2017-03-21 22:43 ` Julia Cartwright
2017-03-21 22:43 ` [Cocci] [PATCH v2 1/9] Coccinelle: locks: identify callers of spin_lock{, _irq, _irqsave}() in irqchip implementations Julia Cartwright
2017-03-21 22:43 ` [PATCH v2 1/9] Coccinelle: locks: identify callers of spin_lock{,_irq,_irqsave}() " Julia Cartwright
2017-03-21 22:43 ` [PATCH v2 1/9] Coccinelle: locks: identify callers of spin_lock{, _irq, _irqsave}() " Julia Cartwright
2017-03-22 9:54 ` [Cocci] " Julia Lawall
2017-03-22 9:54 ` [PATCH v2 1/9] Coccinelle: locks: identify callers of spin_lock{,_irq,_irqsave}() " Julia Lawall
2017-03-22 16:18 ` [Cocci] [PATCH v2 1/9] Coccinelle: locks: identify callers of spin_lock{, _irq, _irqsave}() " Julia Cartwright
2017-03-22 16:18 ` [PATCH v2 1/9] Coccinelle: locks: identify callers of spin_lock{,_irq,_irqsave}() " Julia Cartwright
2017-03-22 16:18 ` [PATCH v2 1/9] Coccinelle: locks: identify callers of spin_lock{, _irq, _irqsave}() " Julia Cartwright
2017-03-22 21:45 ` [Cocci] " Julia Lawall
2017-03-22 21:45 ` [PATCH v2 1/9] Coccinelle: locks: identify callers of spin_lock{,_irq,_irqsave}() " Julia Lawall
2017-03-21 22:43 ` [PATCH v2 2/9] alpha: marvel: make use of raw_spinlock variants Julia Cartwright
2017-03-21 22:43 ` Julia Cartwright
2017-03-21 22:43 ` [PATCH v2 3/9] powerpc: mpc52xx_gpt: " Julia Cartwright
2017-03-21 22:43 ` Julia Cartwright
2018-01-29 4:13 ` [v2,3/9] " Michael Ellerman
2017-03-21 22:43 ` [PATCH v2 4/9] mfd: asic3: " Julia Cartwright
2017-03-23 13:42 ` Lee Jones
2017-03-21 22:43 ` [PATCH v2 5/9] mfd: t7l66xb: " Julia Cartwright
2017-03-23 13:42 ` Lee Jones
2017-03-21 22:43 ` [PATCH v2 6/9] mfd: tc6393xb: " Julia Cartwright
2017-03-23 13:42 ` Lee Jones
2017-03-21 22:43 ` [PATCH v2 7/9] gpio: 104-idi-48: " Julia Cartwright
2017-03-21 22:43 ` Julia Cartwright
2017-03-22 12:44 ` William Breathitt Gray [this message]
2017-03-22 16:11 ` Julia Cartwright
2017-03-22 16:11 ` Julia Cartwright
2017-03-28 9:11 ` Linus Walleij
2017-03-28 11:40 ` William Breathitt Gray
2017-03-28 12:55 ` Linus Walleij
2017-03-21 22:43 ` [PATCH v2 8/9] gpio: 104-idio-16: " Julia Cartwright
2017-03-21 22:43 ` Julia Cartwright
2017-03-22 12:45 ` William Breathitt Gray
2017-03-28 9:13 ` Linus Walleij
2017-03-21 22:43 ` [PATCH v2 9/9] gpio: pci-idio-16: " Julia Cartwright
2017-03-21 22:43 ` Julia Cartwright
2017-03-22 12:46 ` William Breathitt Gray
2017-03-28 9:14 ` Linus Walleij
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=20170322124414.GA22323@sophia \
--to=vilhelm.gray@gmail.com \
--cc=gnurou@gmail.com \
--cc=julia@ni.com \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rt-users@vger.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.