All of lore.kernel.org
 help / color / mirror / Atom feed
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 9/9] gpio: pci-idio-16: make use of raw_spinlock variants
Date: Wed, 22 Mar 2017 08:46:09 -0400	[thread overview]
Message-ID: <20170322124609.GC22323@sophia> (raw)
In-Reply-To: <a5d7b7ed45046ec6f7b5fbf9c284281e02204198.1490135047.git.julia@ni.com>

On Tue, Mar 21, 2017 at 05:43:09PM -0500, Julia Cartwright wrote:
>The pci-idio-16 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>

Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>

>---
>New patch as of v2 of series.
>
> drivers/gpio/gpio-pci-idio-16.c | 28 ++++++++++++++--------------
> 1 file changed, 14 insertions(+), 14 deletions(-)
>
>diff --git a/drivers/gpio/gpio-pci-idio-16.c b/drivers/gpio/gpio-pci-idio-16.c
>index 269ab628634b..7de4f6a2cb49 100644
>--- a/drivers/gpio/gpio-pci-idio-16.c
>+++ b/drivers/gpio/gpio-pci-idio-16.c
>@@ -59,7 +59,7 @@ struct idio_16_gpio_reg {
>  */
> struct idio_16_gpio {
> 	struct gpio_chip chip;
>-	spinlock_t lock;
>+	raw_spinlock_t lock;
> 	struct idio_16_gpio_reg __iomem *reg;
> 	unsigned long irq_mask;
> };
>@@ -121,7 +121,7 @@ static void idio_16_gpio_set(struct gpio_chip *chip, unsigned int offset,
> 	} else
> 		base = &idio16gpio->reg->out0_7;
> 
>-	spin_lock_irqsave(&idio16gpio->lock, flags);
>+	raw_spin_lock_irqsave(&idio16gpio->lock, flags);
> 
> 	if (value)
> 		out_state = ioread8(base) | mask;
>@@ -130,7 +130,7 @@ static void idio_16_gpio_set(struct gpio_chip *chip, unsigned int offset,
> 
> 	iowrite8(out_state, base);
> 
>-	spin_unlock_irqrestore(&idio16gpio->lock, flags);
>+	raw_spin_unlock_irqrestore(&idio16gpio->lock, flags);
> }
> 
> static void idio_16_gpio_set_multiple(struct gpio_chip *chip,
>@@ -140,7 +140,7 @@ static void idio_16_gpio_set_multiple(struct gpio_chip *chip,
> 	unsigned long flags;
> 	unsigned int out_state;
> 
>-	spin_lock_irqsave(&idio16gpio->lock, flags);
>+	raw_spin_lock_irqsave(&idio16gpio->lock, flags);
> 
> 	/* process output lines 0-7 */
> 	if (*mask & 0xFF) {
>@@ -160,7 +160,7 @@ static void idio_16_gpio_set_multiple(struct gpio_chip *chip,
> 		iowrite8(out_state, &idio16gpio->reg->out8_15);
> 	}
> 
>-	spin_unlock_irqrestore(&idio16gpio->lock, flags);
>+	raw_spin_unlock_irqrestore(&idio16gpio->lock, flags);
> }
> 
> static void idio_16_irq_ack(struct irq_data *data)
>@@ -177,11 +177,11 @@ static void idio_16_irq_mask(struct irq_data *data)
> 	idio16gpio->irq_mask &= ~mask;
> 
> 	if (!idio16gpio->irq_mask) {
>-		spin_lock_irqsave(&idio16gpio->lock, flags);
>+		raw_spin_lock_irqsave(&idio16gpio->lock, flags);
> 
> 		iowrite8(0, &idio16gpio->reg->irq_ctl);
> 
>-		spin_unlock_irqrestore(&idio16gpio->lock, flags);
>+		raw_spin_unlock_irqrestore(&idio16gpio->lock, flags);
> 	}
> }
> 
>@@ -196,11 +196,11 @@ static void idio_16_irq_unmask(struct irq_data *data)
> 	idio16gpio->irq_mask |= mask;
> 
> 	if (!prev_irq_mask) {
>-		spin_lock_irqsave(&idio16gpio->lock, flags);
>+		raw_spin_lock_irqsave(&idio16gpio->lock, flags);
> 
> 		ioread8(&idio16gpio->reg->irq_ctl);
> 
>-		spin_unlock_irqrestore(&idio16gpio->lock, flags);
>+		raw_spin_unlock_irqrestore(&idio16gpio->lock, flags);
> 	}
> }
> 
>@@ -229,11 +229,11 @@ static irqreturn_t idio_16_irq_handler(int irq, void *dev_id)
> 	struct gpio_chip *const chip = &idio16gpio->chip;
> 	int gpio;
> 
>-	spin_lock(&idio16gpio->lock);
>+	raw_spin_lock(&idio16gpio->lock);
> 
> 	irq_status = ioread8(&idio16gpio->reg->irq_status);
> 
>-	spin_unlock(&idio16gpio->lock);
>+	raw_spin_unlock(&idio16gpio->lock);
> 
> 	/* Make sure our device generated IRQ */
> 	if (!(irq_status & 0x3) || !(irq_status & 0x4))
>@@ -242,12 +242,12 @@ static irqreturn_t idio_16_irq_handler(int irq, void *dev_id)
> 	for_each_set_bit(gpio, &idio16gpio->irq_mask, chip->ngpio)
> 		generic_handle_irq(irq_find_mapping(chip->irqdomain, gpio));
> 
>-	spin_lock(&idio16gpio->lock);
>+	raw_spin_lock(&idio16gpio->lock);
> 
> 	/* Clear interrupt */
> 	iowrite8(0, &idio16gpio->reg->in0_7);
> 
>-	spin_unlock(&idio16gpio->lock);
>+	raw_spin_unlock(&idio16gpio->lock);
> 
> 	return IRQ_HANDLED;
> }
>@@ -302,7 +302,7 @@ static int idio_16_probe(struct pci_dev *pdev, const struct pci_device_id *id)
> 	idio16gpio->chip.set = idio_16_gpio_set;
> 	idio16gpio->chip.set_multiple = idio_16_gpio_set_multiple;
> 
>-	spin_lock_init(&idio16gpio->lock);
>+	raw_spin_lock_init(&idio16gpio->lock);
> 
> 	err = devm_gpiochip_add_data(dev, &idio16gpio->chip, idio16gpio);
> 	if (err) {
>-- 
>2.12.0
>

  reply	other threads:[~2017-03-22 12:55 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
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 [this message]
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=20170322124609.GC22323@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.