pinctrl: baytrail: Add missing spinlock usage in byt_gpio_irq_handler
authorAlexander Stein <alexander.stein@systec-electronic.com>
Mon, 30 Jan 2017 11:35:28 +0000 (12:35 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Mon, 30 Jan 2017 14:53:57 +0000 (15:53 +0100)
According to VLI64 Intel Atom E3800 Specification Update (#329901)
concurrent read accesses may result in returning 0xffffffff and write
accesses may be dropped silently.
To workaround all accesses must be protected by locks.

Cc: stable@vger.kernel.org
Signed-off-by: Alexander Stein <alexander.stein@systec-electronic.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/intel/pinctrl-baytrail.c

index 05ba052ff6b94f95f389aada3bbc12f26392a3d2..d94aef17348b4b88f3952670886b863b952cfc60 100644 (file)
@@ -1623,7 +1623,9 @@ static void byt_gpio_irq_handler(struct irq_desc *desc)
                        continue;
                }
 
+               raw_spin_lock(&vg->lock);
                pending = readl(reg);
+               raw_spin_unlock(&vg->lock);
                for_each_set_bit(pin, &pending, 32) {
                        virq = irq_find_mapping(vg->chip.irqdomain, base + pin);
                        generic_handle_irq(virq);