diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2020-10-09 21:33:48 +0300 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2020-10-09 21:33:48 +0300 |
commit | d813a8cb8d90225a6c0051b5b050c8dd03cc435c (patch) | |
tree | 955f42e1687e0ff55b6a37ddece93bb5cc17f4f9 /drivers | |
parent | f318052ef2f07da2cd0c535d0d2900d5080a47e1 (diff) | |
parent | 8b81edd80baf12d64420daff1759380aa9a14998 (diff) | |
download | linux-d813a8cb8d90225a6c0051b5b050c8dd03cc435c.tar.xz |
Merge tag 'gpio-v5.9-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio
Pull GPIO fixes from Linus Walleij:
"Some late fixes: one IRQ issue and one compilation issue for UML.
- Fix a compilation issue with User Mode Linux
- Handle spurious interrupts properly in the PCA953x driver"
* tag 'gpio-v5.9-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio:
gpio: pca953x: Survive spurious interrupts
gpiolib: Disable compat ->read() code in UML case
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpio/gpio-pca953x.c | 17 | ||||
-rw-r--r-- | drivers/gpio/gpiolib-cdev.c | 2 |
2 files changed, 16 insertions, 3 deletions
diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c index fb61f2fc6ed7..c2d6121c48c9 100644 --- a/drivers/gpio/gpio-pca953x.c +++ b/drivers/gpio/gpio-pca953x.c @@ -824,8 +824,21 @@ static irqreturn_t pca953x_irq_handler(int irq, void *devid) ret = pca953x_irq_pending(chip, pending); mutex_unlock(&chip->i2c_lock); - for_each_set_bit(level, pending, gc->ngpio) - handle_nested_irq(irq_find_mapping(gc->irq.domain, level)); + if (ret) { + ret = 0; + + for_each_set_bit(level, pending, gc->ngpio) { + int nested_irq = irq_find_mapping(gc->irq.domain, level); + + if (unlikely(nested_irq <= 0)) { + dev_warn_ratelimited(gc->parent, "unmapped interrupt %d\n", level); + continue; + } + + handle_nested_irq(nested_irq); + ret = 1; + } + } return IRQ_RETVAL(ret); } diff --git a/drivers/gpio/gpiolib-cdev.c b/drivers/gpio/gpiolib-cdev.c index 76c36b05aef6..fed5a3b2172f 100644 --- a/drivers/gpio/gpiolib-cdev.c +++ b/drivers/gpio/gpiolib-cdev.c @@ -425,7 +425,7 @@ static __poll_t lineevent_poll(struct file *file, static ssize_t lineevent_get_size(void) { -#ifdef __x86_64__ +#if defined(CONFIG_X86_64) && !defined(CONFIG_UML) /* i386 has no padding after 'id' */ if (in_ia32_syscall()) { struct compat_gpioeevent_data { |