Merge tag 'gpio-v4.10-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio

Pull GPIO fix from Linus Walleij:
"A single lockdep fix, nothing else going on. This makes lockdep
noiseless and work properly with threaded GPIO IRQchips.

Summary:

Fix a lockdep issue: the threaded irqchips also need their unique key,
and take this opportunity to get rid of the horrible macro and replace
it with a static inline"

* tag 'gpio-v4.10-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio:
gpio: provide lockdep keys for nested/unnested irqchips

+61 -31
+9 -9
drivers/gpio/gpiolib.c
··· 1723 } 1724 1725 /** 1726 - * _gpiochip_irqchip_add() - adds an irqchip to a gpiochip 1727 * @gpiochip: the gpiochip to add the irqchip to 1728 * @irqchip: the irqchip to add to the gpiochip 1729 * @first_irq: if not dynamically assigned, the base (first) IRQ to ··· 1749 * the pins on the gpiochip can generate a unique IRQ. Everything else 1750 * need to be open coded. 1751 */ 1752 - int _gpiochip_irqchip_add(struct gpio_chip *gpiochip, 1753 - struct irq_chip *irqchip, 1754 - unsigned int first_irq, 1755 - irq_flow_handler_t handler, 1756 - unsigned int type, 1757 - bool nested, 1758 - struct lock_class_key *lock_key) 1759 { 1760 struct device_node *of_node; 1761 bool irq_base_set = false; ··· 1840 1841 return 0; 1842 } 1843 - EXPORT_SYMBOL_GPL(_gpiochip_irqchip_add); 1844 1845 #else /* CONFIG_GPIOLIB_IRQCHIP */ 1846
··· 1723 } 1724 1725 /** 1726 + * gpiochip_irqchip_add_key() - adds an irqchip to a gpiochip 1727 * @gpiochip: the gpiochip to add the irqchip to 1728 * @irqchip: the irqchip to add to the gpiochip 1729 * @first_irq: if not dynamically assigned, the base (first) IRQ to ··· 1749 * the pins on the gpiochip can generate a unique IRQ. Everything else 1750 * need to be open coded. 1751 */ 1752 + int gpiochip_irqchip_add_key(struct gpio_chip *gpiochip, 1753 + struct irq_chip *irqchip, 1754 + unsigned int first_irq, 1755 + irq_flow_handler_t handler, 1756 + unsigned int type, 1757 + bool nested, 1758 + struct lock_class_key *lock_key) 1759 { 1760 struct device_node *of_node; 1761 bool irq_base_set = false; ··· 1840 1841 return 0; 1842 } 1843 + EXPORT_SYMBOL_GPL(gpiochip_irqchip_add_key); 1844 1845 #else /* CONFIG_GPIOLIB_IRQCHIP */ 1846
+52 -22
include/linux/gpio/driver.h
··· 274 struct irq_chip *irqchip, 275 int parent_irq); 276 277 - int _gpiochip_irqchip_add(struct gpio_chip *gpiochip, 278 - struct irq_chip *irqchip, 279 - unsigned int first_irq, 280 - irq_flow_handler_t handler, 281 - unsigned int type, 282 - bool nested, 283 - struct lock_class_key *lock_key); 284 285 - /* FIXME: I assume threaded IRQchips do not have the lockdep problem */ 286 static inline int gpiochip_irqchip_add_nested(struct gpio_chip *gpiochip, 287 struct irq_chip *irqchip, 288 unsigned int first_irq, 289 irq_flow_handler_t handler, 290 unsigned int type) 291 { 292 - return _gpiochip_irqchip_add(gpiochip, irqchip, first_irq, 293 - handler, type, true, NULL); 294 } 295 296 - #ifdef CONFIG_LOCKDEP 297 - #define gpiochip_irqchip_add(...) \ 298 - ( \ 299 - ({ \ 300 - static struct lock_class_key _key; \ 301 - _gpiochip_irqchip_add(__VA_ARGS__, false, &_key); \ 302 - }) \ 303 - ) 304 - #else 305 - #define gpiochip_irqchip_add(...) \ 306 - _gpiochip_irqchip_add(__VA_ARGS__, false, NULL) 307 - #endif 308 309 #endif /* CONFIG_GPIOLIB_IRQCHIP */ 310
··· 274 struct irq_chip *irqchip, 275 int parent_irq); 276 277 + int gpiochip_irqchip_add_key(struct gpio_chip *gpiochip, 278 + struct irq_chip *irqchip, 279 + unsigned int first_irq, 280 + irq_flow_handler_t handler, 281 + unsigned int type, 282 + bool nested, 283 + struct lock_class_key *lock_key); 284 285 + #ifdef CONFIG_LOCKDEP 286 + 287 + /* 288 + * Lockdep requires that each irqchip instance be created with a 289 + * unique key so as to avoid unnecessary warnings. This upfront 290 + * boilerplate static inlines provides such a key for each 291 + * unique instance. 292 + */ 293 + static inline int gpiochip_irqchip_add(struct gpio_chip *gpiochip, 294 + struct irq_chip *irqchip, 295 + unsigned int first_irq, 296 + irq_flow_handler_t handler, 297 + unsigned int type) 298 + { 299 + static struct lock_class_key key; 300 + 301 + return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq, 302 + handler, type, false, &key); 303 + } 304 + 305 static inline int gpiochip_irqchip_add_nested(struct gpio_chip *gpiochip, 306 struct irq_chip *irqchip, 307 unsigned int first_irq, 308 irq_flow_handler_t handler, 309 unsigned int type) 310 { 311 + 312 + static struct lock_class_key key; 313 + 314 + return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq, 315 + handler, type, true, &key); 316 + } 317 + #else 318 + static inline int gpiochip_irqchip_add(struct gpio_chip *gpiochip, 319 + struct irq_chip *irqchip, 320 + unsigned int first_irq, 321 + irq_flow_handler_t handler, 322 + unsigned int type) 323 + { 324 + return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq, 325 + handler, type, false, NULL); 326 } 327 328 + static inline int gpiochip_irqchip_add_nested(struct gpio_chip *gpiochip, 329 + struct irq_chip *irqchip, 330 + unsigned int first_irq, 331 + irq_flow_handler_t handler, 332 + unsigned int type) 333 + { 334 + return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq, 335 + handler, type, true, NULL); 336 + } 337 + #endif /* CONFIG_LOCKDEP */ 338 339 #endif /* CONFIG_GPIOLIB_IRQCHIP */ 340