Two GPIO fixes:

- GPIO direction flags where handled wrong in the new
   descriptor-based API, so direction changes did not always
   "take".
 - Fix a handler installation race in the generic GPIO
   irqchip code.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJUI7/XAAoJEEEQszewGV1z0nMP/AqILT9Boa4JHorEb0vveLjy
 +zooJXwez8CTd0BXPpBVxqUaHnFLsHREOkkwUJfBm5ghDiRm0J3owLiS/i90DIcY
 dAyjFQzOQOcoItD1/NqMUOnviVicVOBmuDovddAnBYspKNL8HQ0A8MZIkBaQrGon
 UqrOfNgfPzuvwU8kFv6MkrY0hA4bNn0EUDwhHrhjP9IoSV8dXjW3G4qR0mbRaWx5
 yRYsuYHk6L3DyhUHjszl1YbDzufxrDahXIw5AAS2GtW1vRZ5F9aRgjplwmH/mBDQ
 o7e04TbPgS+Z3aACeChu7kpFIOCpmn5LFB4JMEjpNVnKCHecWWWG8XnWyAzd0kwx
 OXtqS73VWDjpQ0dEic++7R14c/VY7/I+e2xFe8ceTKt+ePM8kC3FQ6oczWNHxaNW
 KvrChZKMfxlABVqkEk4tg9ih+wZUDo1wzY1N3hbm7u9BAEsKrpuRbxQJN9GgkMcs
 eDY7i6AbuzqkVpiAE99e1nLfi2bkk6M4iYcdAxBLRe5ZwBuytaq8/h8zsxwjSws9
 0wMv9oAHhs9cRYALmcXvlrD10Gz46euDIJsqmErxnSr38/38cVaR6DgovRsAR1t0
 J2wZNZ7Tjdt8X5NGtDxjHI6G2RYuXJThJel/Jl8kaTgH0V2wg8zid252UQxj0mka
 Fjw3YDQL39u+HvGmlPju
 =ziCt
 -----END PGP SIGNATURE-----

Merge tag 'gpio-v3.17-4' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio

Pull gpio fixes from Linus Walleij:
 "Two GPIO fixes:

   - GPIO direction flags where handled wrong in the new descriptor-
     based API, so direction changes did not always "take".

   - Fix a handler installation race in the generic GPIO irqchip code"

* tag 'gpio-v3.17-4' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio:
  gpio: Fix potential NULL handler data in chained irqchip handler
  gpio: Fix gpio direction flags not getting set
This commit is contained in:
Linus Torvalds 2014-09-25 10:17:37 -07:00
commit 2289823c22

View File

@ -413,12 +413,12 @@ void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
return;
}
irq_set_chained_handler(parent_irq, parent_handler);
/*
* The parent irqchip is already using the chip_data for this
* irqchip, so our callbacks simply use the handler_data.
*/
irq_set_handler_data(parent_irq, gpiochip);
irq_set_chained_handler(parent_irq, parent_handler);
}
EXPORT_SYMBOL_GPL(gpiochip_set_chained_irqchip);
@ -1674,7 +1674,7 @@ struct gpio_desc *__must_check __gpiod_get_index(struct device *dev,
set_bit(FLAG_OPEN_SOURCE, &desc->flags);
/* No particular flag request, return here... */
if (flags & GPIOD_FLAGS_BIT_DIR_SET)
if (!(flags & GPIOD_FLAGS_BIT_DIR_SET))
return desc;
/* Process flags */