linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] gpio chip cascade fixes
@ 2018-10-08 16:32 Stephen Boyd
  2018-10-08 16:32 ` [PATCH 1/4] gpio: Assign gpio_irq_chip::parents to non-stack pointer Stephen Boyd
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Stephen Boyd @ 2018-10-08 16:32 UTC (permalink / raw)
  To: Linus Walleij
  Cc: linux-kernel, linux-gpio, Evan Green, Thierry Reding, Grygorii Strashko

Originally this was a single patch but then I noticed some
other things that didn't seem quite right so I added on a few
more patches after that. The first patch is the important one
because it fixes a bug where a stack pointer is assigned to
the gpio_irq_chip structure and used later on when that stack
is gone.

Cc: Evan Green <evgreen@chromium.org>
Cc: Thierry Reding <treding@nvidia.com>
Cc: Grygorii Strashko <grygorii.strashko@ti.com>

Stephen Boyd (4):
  gpio: Assign gpio_irq_chip::parents to non-stack pointer
  gpio: Drop parent irq assignment during cascade setup
  gpio: Remove unused 'irqchip' argument to
    gpiochip_set_cascaded_irqchip()
  gpio: Clarify kerneldoc on gpiochip_set_chained_irqchip()

 drivers/gpio/gpiolib.c      | 24 +++++-------------------
 include/linux/gpio/driver.h |  5 +++++
 2 files changed, 10 insertions(+), 19 deletions(-)

-- 
Sent by a computer through tubes


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 1/4] gpio: Assign gpio_irq_chip::parents to non-stack pointer
  2018-10-08 16:32 [PATCH 0/4] gpio chip cascade fixes Stephen Boyd
@ 2018-10-08 16:32 ` Stephen Boyd
  2018-10-09  4:56   ` kbuild test robot
  2018-10-10 12:05   ` Linus Walleij
  2018-10-08 16:32 ` [PATCH 2/4] gpio: Drop parent irq assignment during cascade setup Stephen Boyd
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 12+ messages in thread
From: Stephen Boyd @ 2018-10-08 16:32 UTC (permalink / raw)
  To: Linus Walleij
  Cc: linux-kernel, linux-gpio, Evan Green, Thierry Reding, Grygorii Strashko

gpiochip_set_cascaded_irqchip() is passed 'parent_irq' as an argument
and then the address of that argument is assigned to the gpio chips
gpio_irq_chip 'parents' pointer shortly thereafter. This can't ever
work, because we've just assigned some stack address to a pointer that
we plan to dereference later in gpiochip_irq_map(). I ran into this
issue with the KASAN report below when gpiochip_irq_map() tried to setup
the parent irq with a total junk pointer for the 'parents' array.

BUG: KASAN: stack-out-of-bounds in gpiochip_irq_map+0x228/0x248
Read of size 4 at addr ffffffc0dde472e0 by task swapper/0/1

CPU: 7 PID: 1 Comm: swapper/0 Not tainted 4.14.72 #34
Call trace:
[<ffffff9008093638>] dump_backtrace+0x0/0x718
[<ffffff9008093da4>] show_stack+0x20/0x2c
[<ffffff90096b9224>] __dump_stack+0x20/0x28
[<ffffff90096b91c8>] dump_stack+0x80/0xbc
[<ffffff900845a350>] print_address_description+0x70/0x238
[<ffffff900845a8e4>] kasan_report+0x1cc/0x260
[<ffffff900845aa14>] __asan_report_load4_noabort+0x2c/0x38
[<ffffff900897e098>] gpiochip_irq_map+0x228/0x248
[<ffffff900820cc08>] irq_domain_associate+0x114/0x2ec
[<ffffff900820d13c>] irq_create_mapping+0x120/0x234
[<ffffff900820da78>] irq_create_fwspec_mapping+0x4c8/0x88c
[<ffffff900820e2d8>] irq_create_of_mapping+0x180/0x210
[<ffffff900917114c>] of_irq_get+0x138/0x198
[<ffffff9008dc70ac>] spi_drv_probe+0x94/0x178
[<ffffff9008ca5168>] driver_probe_device+0x51c/0x824
[<ffffff9008ca6538>] __device_attach_driver+0x148/0x20c
[<ffffff9008ca14cc>] bus_for_each_drv+0x120/0x188
[<ffffff9008ca570c>] __device_attach+0x19c/0x2dc
[<ffffff9008ca586c>] device_initial_probe+0x20/0x2c
[<ffffff9008ca18bc>] bus_probe_device+0x80/0x154
[<ffffff9008c9b9b4>] device_add+0x9b8/0xbdc
[<ffffff9008dc7640>] spi_add_device+0x1b8/0x380
[<ffffff9008dcbaf0>] spi_register_controller+0x111c/0x1378
[<ffffff9008dd6b10>] spi_geni_probe+0x4dc/0x6f8
[<ffffff9008cab058>] platform_drv_probe+0xdc/0x130
[<ffffff9008ca5168>] driver_probe_device+0x51c/0x824
[<ffffff9008ca59cc>] __driver_attach+0x100/0x194
[<ffffff9008ca0ea8>] bus_for_each_dev+0x104/0x16c
[<ffffff9008ca58c0>] driver_attach+0x48/0x54
[<ffffff9008ca1edc>] bus_add_driver+0x274/0x498
[<ffffff9008ca8448>] driver_register+0x1ac/0x230
[<ffffff9008caaf6c>] __platform_driver_register+0xcc/0xdc
[<ffffff9009c4b33c>] spi_geni_driver_init+0x1c/0x24
[<ffffff9008084cb8>] do_one_initcall+0x240/0x3dc
[<ffffff9009c017d0>] kernel_init_freeable+0x378/0x468
[<ffffff90096e8240>] kernel_init+0x14/0x110
[<ffffff9008086fcc>] ret_from_fork+0x10/0x18

The buggy address belongs to the page:
page:ffffffbf037791c0 count:0 mapcount:0 mapping:          (null) index:0x0
flags: 0x4000000000000000()
raw: 4000000000000000 0000000000000000 0000000000000000 00000000ffffffff
raw: ffffffbf037791e0 ffffffbf037791e0 0000000000000000 0000000000000000
page dumped because: kasan: bad access detected

Memory state around the buggy address:
 ffffffc0dde47180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 ffffffc0dde47200: f1 f1 f1 f1 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f2 f2
>ffffffc0dde47280: f2 f2 00 00 00 00 00 00 00 00 00 00 f3 f3 f3 f3
                                                       ^
 ffffffc0dde47300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 ffffffc0dde47380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Let's leave around one unsigned int in the gpio_irq_chip struct for the
single parent irq case and repoint the 'parents' array at it. This way
code is left mostly intact to setup parents and we waste an extra few
bytes per structure of which there should be only a handful in a system.

Cc: Evan Green <evgreen@chromium.org>
Cc: Thierry Reding <treding@nvidia.com>
Cc: Grygorii Strashko <grygorii.strashko@ti.com>
Fixes: e0d897289813 ("gpio: Implement tighter IRQ chip integration")
Signed-off-by: Stephen Boyd <swboyd@chromium.org>
---
 drivers/gpio/gpiolib.c      | 3 ++-
 include/linux/gpio/driver.h | 5 +++++
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 86c147b3f4af..d9d823e3761b 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -1684,7 +1684,8 @@ static void gpiochip_set_cascaded_irqchip(struct gpio_chip *gpiochip,
 		irq_set_chained_handler_and_data(parent_irq, parent_handler,
 						 gpiochip);
 
-		gpiochip->irq.parents = &parent_irq;
+		gpiochip->irq.parent_irq = parent_irq;
+		gpiochip->irq.parents = &gpiochip->irq.parent_irq;
 		gpiochip->irq.num_parents = 1;
 	}
 
diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h
index f6b95734073f..31e47b1d264e 100644
--- a/include/linux/gpio/driver.h
+++ b/include/linux/gpio/driver.h
@@ -100,6 +100,11 @@ struct gpio_irq_chip {
 	 */
 	unsigned int num_parents;
 
+	/**
+	 * private: For use by gpiochip_set_cascaded_irqchip()
+	 */
+	unsigned int parent_irq;
+
 	/**
 	 * @parents:
 	 *
-- 
Sent by a computer through tubes


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 2/4] gpio: Drop parent irq assignment during cascade setup
  2018-10-08 16:32 [PATCH 0/4] gpio chip cascade fixes Stephen Boyd
  2018-10-08 16:32 ` [PATCH 1/4] gpio: Assign gpio_irq_chip::parents to non-stack pointer Stephen Boyd
@ 2018-10-08 16:32 ` Stephen Boyd
  2018-10-16  7:28   ` Linus Walleij
  2018-10-08 16:32 ` [PATCH 3/4] gpio: Remove unused 'irqchip' argument to gpiochip_set_cascaded_irqchip() Stephen Boyd
  2018-10-08 16:32 ` [PATCH 4/4] gpio: Clarify kerneldoc on gpiochip_set_chained_irqchip() Stephen Boyd
  3 siblings, 1 reply; 12+ messages in thread
From: Stephen Boyd @ 2018-10-08 16:32 UTC (permalink / raw)
  To: Linus Walleij
  Cc: linux-kernel, linux-gpio, Evan Green, Thierry Reding, Grygorii Strashko

We want to set the irq parent for interrupts that we're setting up to be
cascaded from another interrupt controller, but we may or may not have
already mapped the gpiochip irqs into the kernel's virtual irq number
space at this point. If we have mapped irqs before calling here, then
we've gone through gpiochip_irq_map() and called irq_set_parent()
already. If we haven't mapped irqs, then the gpiochip is dynamically
mapping irqs and we can rely on gpiochip_irq_map() or the gpio driver's
irqdomain ops to setup the irq parent properly.

Either way, setting the parent here when cascading the gpiochip doesn't
make much sense because it should be done at irq mapping time. In the
dynamic mapping case, this code is mapping virq 0 to some parent virq in
a loop. While that's benign, let's drop this code to simplify.

Cc: Evan Green <evgreen@chromium.org>
Cc: Thierry Reding <treding@nvidia.com>
Cc: Grygorii Strashko <grygorii.strashko@ti.com>
Signed-off-by: Stephen Boyd <swboyd@chromium.org>
---
 drivers/gpio/gpiolib.c | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index d9d823e3761b..8fccfcf559ee 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -1663,8 +1663,6 @@ static void gpiochip_set_cascaded_irqchip(struct gpio_chip *gpiochip,
 					  unsigned int parent_irq,
 					  irq_flow_handler_t parent_handler)
 {
-	unsigned int offset;
-
 	if (!gpiochip->irq.domain) {
 		chip_err(gpiochip, "called %s before setting up irqchip\n",
 			 __func__);
@@ -1688,14 +1686,6 @@ static void gpiochip_set_cascaded_irqchip(struct gpio_chip *gpiochip,
 		gpiochip->irq.parents = &gpiochip->irq.parent_irq;
 		gpiochip->irq.num_parents = 1;
 	}
-
-	/* Set the parent IRQ for all affected IRQs */
-	for (offset = 0; offset < gpiochip->ngpio; offset++) {
-		if (!gpiochip_irqchip_irq_valid(gpiochip, offset))
-			continue;
-		irq_set_parent(irq_find_mapping(gpiochip->irq.domain, offset),
-			       parent_irq);
-	}
 }
 
 /**
-- 
Sent by a computer through tubes


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 3/4] gpio: Remove unused 'irqchip' argument to gpiochip_set_cascaded_irqchip()
  2018-10-08 16:32 [PATCH 0/4] gpio chip cascade fixes Stephen Boyd
  2018-10-08 16:32 ` [PATCH 1/4] gpio: Assign gpio_irq_chip::parents to non-stack pointer Stephen Boyd
  2018-10-08 16:32 ` [PATCH 2/4] gpio: Drop parent irq assignment during cascade setup Stephen Boyd
@ 2018-10-08 16:32 ` Stephen Boyd
  2018-10-16  7:29   ` Linus Walleij
  2018-10-08 16:32 ` [PATCH 4/4] gpio: Clarify kerneldoc on gpiochip_set_chained_irqchip() Stephen Boyd
  3 siblings, 1 reply; 12+ messages in thread
From: Stephen Boyd @ 2018-10-08 16:32 UTC (permalink / raw)
  To: Linus Walleij
  Cc: linux-kernel, linux-gpio, Evan Green, Thierry Reding, Grygorii Strashko

This argument hasn't ever been used since it was introduced in commit
1425052097b5 ("gpio: add IRQ chip helpers in gpiolib"). Let's drop it to
reduce reading confusion.

Cc: Evan Green <evgreen@chromium.org>
Cc: Thierry Reding <treding@nvidia.com>
Cc: Grygorii Strashko <grygorii.strashko@ti.com>
Signed-off-by: Stephen Boyd <swboyd@chromium.org>
---
 drivers/gpio/gpiolib.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 8fccfcf559ee..37c6fc73b179 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -1651,7 +1651,6 @@ EXPORT_SYMBOL_GPL(gpiochip_irqchip_irq_valid);
 /**
  * gpiochip_set_cascaded_irqchip() - connects a cascaded irqchip to a gpiochip
  * @gpiochip: the gpiochip to set the irqchip chain to
- * @irqchip: the irqchip to chain to the gpiochip
  * @parent_irq: the irq number corresponding to the parent IRQ for this
  * chained irqchip
  * @parent_handler: the parent interrupt handler for the accumulated IRQ
@@ -1659,7 +1658,6 @@ EXPORT_SYMBOL_GPL(gpiochip_irqchip_irq_valid);
  * cascaded, pass NULL in this handler argument
  */
 static void gpiochip_set_cascaded_irqchip(struct gpio_chip *gpiochip,
-					  struct irq_chip *irqchip,
 					  unsigned int parent_irq,
 					  irq_flow_handler_t parent_handler)
 {
@@ -1708,8 +1706,7 @@ void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
 		return;
 	}
 
-	gpiochip_set_cascaded_irqchip(gpiochip, irqchip, parent_irq,
-				      parent_handler);
+	gpiochip_set_cascaded_irqchip(gpiochip, parent_irq, parent_handler);
 }
 EXPORT_SYMBOL_GPL(gpiochip_set_chained_irqchip);
 
@@ -1724,8 +1721,7 @@ void gpiochip_set_nested_irqchip(struct gpio_chip *gpiochip,
 				 struct irq_chip *irqchip,
 				 unsigned int parent_irq)
 {
-	gpiochip_set_cascaded_irqchip(gpiochip, irqchip, parent_irq,
-				      NULL);
+	gpiochip_set_cascaded_irqchip(gpiochip, parent_irq, NULL);
 }
 EXPORT_SYMBOL_GPL(gpiochip_set_nested_irqchip);
 
-- 
Sent by a computer through tubes


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 4/4] gpio: Clarify kerneldoc on gpiochip_set_chained_irqchip()
  2018-10-08 16:32 [PATCH 0/4] gpio chip cascade fixes Stephen Boyd
                   ` (2 preceding siblings ...)
  2018-10-08 16:32 ` [PATCH 3/4] gpio: Remove unused 'irqchip' argument to gpiochip_set_cascaded_irqchip() Stephen Boyd
@ 2018-10-08 16:32 ` Stephen Boyd
  2018-10-16  7:30   ` Linus Walleij
  3 siblings, 1 reply; 12+ messages in thread
From: Stephen Boyd @ 2018-10-08 16:32 UTC (permalink / raw)
  To: Linus Walleij
  Cc: linux-kernel, linux-gpio, Evan Green, Thierry Reding, Grygorii Strashko

This doesn't support nested anymore, so drivers shouldn't call it with
the handler set to NULL.

Cc: Evan Green <evgreen@chromium.org>
Cc: Thierry Reding <treding@nvidia.com>
Cc: Grygorii Strashko <grygorii.strashko@ti.com>
Signed-off-by: Stephen Boyd <swboyd@chromium.org>
---
 drivers/gpio/gpiolib.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 37c6fc73b179..1729d0f698e7 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -1693,8 +1693,7 @@ static void gpiochip_set_cascaded_irqchip(struct gpio_chip *gpiochip,
  * @parent_irq: the irq number corresponding to the parent IRQ for this
  * chained irqchip
  * @parent_handler: the parent interrupt handler for the accumulated IRQ
- * coming out of the gpiochip. If the interrupt is nested rather than
- * cascaded, pass NULL in this handler argument
+ * coming out of the gpiochip.
  */
 void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
 				  struct irq_chip *irqchip,
-- 
Sent by a computer through tubes


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/4] gpio: Assign gpio_irq_chip::parents to non-stack pointer
  2018-10-08 16:32 ` [PATCH 1/4] gpio: Assign gpio_irq_chip::parents to non-stack pointer Stephen Boyd
@ 2018-10-09  4:56   ` kbuild test robot
  2018-10-09  6:01     ` Stephen Boyd
  2018-10-10 12:05   ` Linus Walleij
  1 sibling, 1 reply; 12+ messages in thread
From: kbuild test robot @ 2018-10-09  4:56 UTC (permalink / raw)
  To: Stephen Boyd
  Cc: kbuild-all, Linus Walleij, linux-kernel, linux-gpio, Evan Green,
	Thierry Reding, Grygorii Strashko

[-- Attachment #1: Type: text/plain, Size: 33076 bytes --]

Hi Stephen,

I love your patch! Perhaps something to improve:

[auto build test WARNING on gpio/for-next]
[also build test WARNING on v4.19-rc7 next-20181008]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Stephen-Boyd/gpio-chip-cascade-fixes/20181009-041639
base:   https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git for-next
reproduce: make htmldocs

All warnings (new ones prefixed by >>):

   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/cfg80211.h:4869: warning: Excess function parameter 'ptr' description in 'reg_query_regdb_wmm'
   include/net/mac80211.h:2328: warning: Function parameter or member 'radiotap_timestamp.units_pos' not described in 'ieee80211_hw'
   include/net/mac80211.h:2328: warning: Function parameter or member 'radiotap_timestamp.accuracy' not described in 'ieee80211_hw'
   include/net/mac80211.h:977: warning: Function parameter or member 'control.rates' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'control.rts_cts_rate_idx' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'control.use_rts' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'control.use_cts_prot' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'control.short_preamble' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'control.skip_table' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'control.jiffies' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'control.vif' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'control.hw_key' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'control.flags' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'control.enqueue_time' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'ack' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'ack.cookie' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'status.rates' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'status.ack_signal' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'status.ampdu_ack_len' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'status.ampdu_len' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'status.antenna' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'status.tx_time' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'status.is_valid_ack_signal' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'status.status_driver_data' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'driver_rates' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'pad' not described in 'ieee80211_tx_info'
   include/net/mac80211.h:977: warning: Function parameter or member 'rate_driver_data' not described in 'ieee80211_tx_info'
   net/mac80211/sta_info.h:588: warning: Function parameter or member 'rx_stats_avg' not described in 'sta_info'
   net/mac80211/sta_info.h:588: warning: Function parameter or member 'rx_stats_avg.signal' not described in 'sta_info'
   net/mac80211/sta_info.h:588: warning: Function parameter or member 'rx_stats_avg.chain_signal' not described in 'sta_info'
   net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.filtered' not described in 'sta_info'
   net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.retry_failed' not described in 'sta_info'
   net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.retry_count' not described in 'sta_info'
   net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.lost_packets' not described in 'sta_info'
   net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.last_tdls_pkt_time' not described in 'sta_info'
   net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.msdu_retries' not described in 'sta_info'
   net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.msdu_failed' not described in 'sta_info'
   net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.last_ack' not described in 'sta_info'
   net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.last_ack_signal' not described in 'sta_info'
   net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.ack_signal_filled' not described in 'sta_info'
   net/mac80211/sta_info.h:588: warning: Function parameter or member 'status_stats.avg_ack_signal' not described in 'sta_info'
   net/mac80211/sta_info.h:588: warning: Function parameter or member 'tx_stats.packets' not described in 'sta_info'
   net/mac80211/sta_info.h:588: warning: Function parameter or member 'tx_stats.bytes' not described in 'sta_info'
   net/mac80211/sta_info.h:588: warning: Function parameter or member 'tx_stats.last_rate' not described in 'sta_info'
   net/mac80211/sta_info.h:588: warning: Function parameter or member 'tx_stats.msdu' not described in 'sta_info'
   include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_excl.cb' not described in 'dma_buf'
   include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_excl.poll' not described in 'dma_buf'
   include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_excl.active' not described in 'dma_buf'
   include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_shared.cb' not described in 'dma_buf'
   include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_shared.poll' not described in 'dma_buf'
   include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_shared.active' not described in 'dma_buf'
   include/linux/dma-fence-array.h:54: warning: Function parameter or member 'work' not described in 'dma_fence_array'
   include/linux/gpio/driver.h:105: warning: Incorrect use of kernel-doc format: Documentation Makefile include scripts source private: For use by gpiochip_set_cascaded_irqchip()
>> include/linux/gpio/driver.h:167: warning: Function parameter or member 'parent_irq' not described in 'gpio_irq_chip'
   Error: Cannot open file drivers/gpio/devres.c
   Error: Cannot open file drivers/gpio/devres.c
   WARNING: kernel-doc 'scripts/kernel-doc -rst -enable-lineno -export drivers/gpio/devres.c' failed with return code 2
   include/linux/iio/hw-consumer.h:1: warning: no structured comments found
   include/linux/input/sparse-keymap.h:46: warning: Function parameter or member 'sw' not described in 'key_entry'
   drivers/pci/pci.c:218: warning: Excess function parameter 'p' description in 'pci_dev_str_match_path'
   include/linux/regulator/driver.h:227: warning: Function parameter or member 'resume' not described in 'regulator_ops'
   drivers/regulator/core.c:4479: warning: Excess function parameter 'state' description in 'regulator_suspend'
   arch/s390/include/asm/cio.h:245: warning: Function parameter or member 'esw.esw0' not described in 'irb'
   arch/s390/include/asm/cio.h:245: warning: Function parameter or member 'esw.esw1' not described in 'irb'
   arch/s390/include/asm/cio.h:245: warning: Function parameter or member 'esw.esw2' not described in 'irb'
   arch/s390/include/asm/cio.h:245: warning: Function parameter or member 'esw.esw3' not described in 'irb'
   arch/s390/include/asm/cio.h:245: warning: Function parameter or member 'esw.eadm' not described in 'irb'
   drivers/slimbus/stream.c:1: warning: no structured comments found
   drivers/target/target_core_device.c:1: warning: no structured comments found
   drivers/usb/typec/bus.c:1: warning: no structured comments found
   drivers/usb/typec/class.c:1: warning: no structured comments found
   include/linux/w1.h:281: warning: Function parameter or member 'of_match_table' not described in 'w1_family'
   fs/direct-io.c:257: warning: Excess function parameter 'offset' description in 'dio_complete'
   fs/file_table.c:1: warning: no structured comments found
   fs/libfs.c:477: warning: Excess function parameter 'available' description in 'simple_write_end'
   fs/posix_acl.c:646: warning: Function parameter or member 'inode' not described in 'posix_acl_update_mode'
   fs/posix_acl.c:646: warning: Function parameter or member 'mode_p' not described in 'posix_acl_update_mode'
   fs/posix_acl.c:646: warning: Function parameter or member 'acl' not described in 'posix_acl_update_mode'
   drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c:183: warning: Function parameter or member 'blockable' not described in 'amdgpu_mn_read_lock'
   drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c:254: warning: Function parameter or member 'blockable' not described in 'amdgpu_mn_invalidate_range_start_gfx'
   drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c:302: warning: Function parameter or member 'blockable' not described in 'amdgpu_mn_invalidate_range_start_hsa'
   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:3011: warning: Excess function parameter 'dev' description in 'amdgpu_vm_get_task_info'
   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:3012: warning: Function parameter or member 'adev' not described in 'amdgpu_vm_get_task_info'
   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:3012: warning: Excess function parameter 'dev' description in 'amdgpu_vm_get_task_info'
   include/drm/drm_drv.h:610: warning: Function parameter or member 'gem_prime_pin' not described in 'drm_driver'
   include/drm/drm_drv.h:610: warning: Function parameter or member 'gem_prime_unpin' not described in 'drm_driver'
   include/drm/drm_drv.h:610: warning: Function parameter or member 'gem_prime_res_obj' not described in 'drm_driver'
   include/drm/drm_drv.h:610: warning: Function parameter or member 'gem_prime_get_sg_table' not described in 'drm_driver'
   include/drm/drm_drv.h:610: warning: Function parameter or member 'gem_prime_import_sg_table' not described in 'drm_driver'
   include/drm/drm_drv.h:610: warning: Function parameter or member 'gem_prime_vmap' not described in 'drm_driver'
   include/drm/drm_drv.h:610: warning: Function parameter or member 'gem_prime_vunmap' not described in 'drm_driver'
   include/drm/drm_drv.h:610: warning: Function parameter or member 'gem_prime_mmap' not described in 'drm_driver'
   include/drm/drm_panel.h:98: warning: Function parameter or member 'link' not described in 'drm_panel'
   drivers/gpu/drm/i915/i915_vma.h:49: warning: cannot understand function prototype: 'struct i915_vma '
   drivers/gpu/drm/i915/i915_vma.h:1: warning: no structured comments found
   drivers/gpu/drm/i915/intel_guc_fwif.h:553: warning: cannot understand function prototype: 'struct guc_log_buffer_state '
   drivers/gpu/drm/i915/i915_trace.h:1: warning: no structured comments found
   include/linux/skbuff.h:860: warning: Function parameter or member 'dev_scratch' not described in 'sk_buff'
   include/linux/skbuff.h:860: warning: Function parameter or member 'list' not described in 'sk_buff'
   include/linux/skbuff.h:860: warning: Function parameter or member 'ip_defrag_offset' not described in 'sk_buff'
   include/linux/skbuff.h:860: warning: Function parameter or member 'skb_mstamp' not described in 'sk_buff'
   include/linux/skbuff.h:860: warning: Function parameter or member '__cloned_offset' not described in 'sk_buff'
   include/linux/skbuff.h:860: warning: Function parameter or member 'head_frag' not described in 'sk_buff'
   include/linux/skbuff.h:860: warning: Function parameter or member '__pkt_type_offset' not described in 'sk_buff'
   include/linux/skbuff.h:860: warning: Function parameter or member 'encapsulation' not described in 'sk_buff'
   include/linux/skbuff.h:860: warning: Function parameter or member 'encap_hdr_csum' not described in 'sk_buff'
   include/linux/skbuff.h:860: warning: Function parameter or member 'csum_valid' not described in 'sk_buff'
   include/linux/skbuff.h:860: warning: Function parameter or member 'csum_complete_sw' not described in 'sk_buff'
   include/linux/skbuff.h:860: warning: Function parameter or member 'csum_level' not described in 'sk_buff'
   include/linux/skbuff.h:860: warning: Function parameter or member 'inner_protocol_type' not described in 'sk_buff'
   include/linux/skbuff.h:860: warning: Function parameter or member 'remcsum_offload' not described in 'sk_buff'
   include/linux/skbuff.h:860: warning: Function parameter or member 'offload_fwd_mark' not described in 'sk_buff'
   include/linux/skbuff.h:860: warning: Function parameter or member 'offload_mr_fwd_mark' not described in 'sk_buff'
   include/linux/skbuff.h:860: warning: Function parameter or member 'sender_cpu' not described in 'sk_buff'
   include/linux/skbuff.h:860: warning: Function parameter or member 'reserved_tailroom' not described in 'sk_buff'
   include/linux/skbuff.h:860: warning: Function parameter or member 'inner_ipproto' not described in 'sk_buff'
   include/net/sock.h:238: warning: Function parameter or member 'skc_addrpair' not described in 'sock_common'
   include/net/sock.h:238: warning: Function parameter or member 'skc_portpair' not described in 'sock_common'
   include/net/sock.h:238: warning: Function parameter or member 'skc_ipv6only' not described in 'sock_common'
   include/net/sock.h:238: warning: Function parameter or member 'skc_net_refcnt' not described in 'sock_common'
   include/net/sock.h:238: warning: Function parameter or member 'skc_v6_daddr' not described in 'sock_common'
   include/net/sock.h:238: warning: Function parameter or member 'skc_v6_rcv_saddr' not described in 'sock_common'
   include/net/sock.h:238: warning: Function parameter or member 'skc_cookie' not described in 'sock_common'
   include/net/sock.h:238: warning: Function parameter or member 'skc_listener' not described in 'sock_common'
   include/net/sock.h:238: warning: Function parameter or member 'skc_tw_dr' not described in 'sock_common'
   include/net/sock.h:238: warning: Function parameter or member 'skc_rcv_wnd' not described in 'sock_common'
   include/net/sock.h:238: warning: Function parameter or member 'skc_tw_rcv_nxt' not described in 'sock_common'
   include/net/sock.h:509: warning: Function parameter or member 'sk_backlog.rmem_alloc' not described in 'sock'
   include/net/sock.h:509: warning: Function parameter or member 'sk_backlog.len' not described in 'sock'
   include/net/sock.h:509: warning: Function parameter or member 'sk_backlog.head' not described in 'sock'
   include/net/sock.h:509: warning: Function parameter or member 'sk_backlog.tail' not described in 'sock'
   include/net/sock.h:509: warning: Function parameter or member 'sk_wq_raw' not described in 'sock'
   include/net/sock.h:509: warning: Function parameter or member 'tcp_rtx_queue' not described in 'sock'
   include/net/sock.h:509: warning: Function parameter or member 'sk_route_forced_caps' not described in 'sock'
   include/net/sock.h:509: warning: Function parameter or member 'sk_txtime_report_errors' not described in 'sock'
   include/net/sock.h:509: warning: Function parameter or member 'sk_validate_xmit_skb' not described in 'sock'
   include/linux/netdevice.h:2018: warning: Function parameter or member 'adj_list.upper' not described in 'net_device'
   include/linux/netdevice.h:2018: warning: Function parameter or member 'adj_list.lower' not described in 'net_device'
   include/linux/netdevice.h:2018: warning: Function parameter or member 'gso_partial_features' not described in 'net_device'
   include/linux/netdevice.h:2018: warning: Function parameter or member 'switchdev_ops' not described in 'net_device'
   include/linux/netdevice.h:2018: warning: Function parameter or member 'l3mdev_ops' not described in 'net_device'
   include/linux/netdevice.h:2018: warning: Function parameter or member 'xfrmdev_ops' not described in 'net_device'
   include/linux/netdevice.h:2018: warning: Function parameter or member 'tlsdev_ops' not described in 'net_device'
   include/linux/netdevice.h:2018: warning: Function parameter or member 'name_assign_type' not described in 'net_device'
   include/linux/netdevice.h:2018: warning: Function parameter or member 'ieee802154_ptr' not described in 'net_device'
   include/linux/netdevice.h:2018: warning: Function parameter or member 'mpls_ptr' not described in 'net_device'
   include/linux/netdevice.h:2018: warning: Function parameter or member 'xdp_prog' not described in 'net_device'
   include/linux/netdevice.h:2018: warning: Function parameter or member 'gro_flush_timeout' not described in 'net_device'
   include/linux/netdevice.h:2018: warning: Function parameter or member 'nf_hooks_ingress' not described in 'net_device'
   include/linux/netdevice.h:2018: warning: Function parameter or member '____cacheline_aligned_in_smp' not described in 'net_device'
   include/linux/netdevice.h:2018: warning: Function parameter or member 'qdisc_hash' not described in 'net_device'
   include/linux/netdevice.h:2018: warning: Function parameter or member 'xps_cpus_map' not described in 'net_device'
   include/linux/netdevice.h:2018: warning: Function parameter or member 'xps_rxqs_map' not described in 'net_device'
   include/linux/phylink.h:56: warning: Function parameter or member '__ETHTOOL_DECLARE_LINK_MODE_MASK(advertising' not described in 'phylink_link_state'

vim +167 include/linux/gpio/driver.h

bb1e88cc Alexandre Courbot 2014-02-09   22  
c44eafd7 Thierry Reding    2017-11-07   23  #ifdef CONFIG_GPIOLIB_IRQCHIP
c44eafd7 Thierry Reding    2017-11-07   24  /**
c44eafd7 Thierry Reding    2017-11-07   25   * struct gpio_irq_chip - GPIO interrupt controller
c44eafd7 Thierry Reding    2017-11-07   26   */
c44eafd7 Thierry Reding    2017-11-07   27  struct gpio_irq_chip {
c44eafd7 Thierry Reding    2017-11-07   28  	/**
da80ff81 Thierry Reding    2017-11-07   29  	 * @chip:
da80ff81 Thierry Reding    2017-11-07   30  	 *
da80ff81 Thierry Reding    2017-11-07   31  	 * GPIO IRQ chip implementation, provided by GPIO driver.
da80ff81 Thierry Reding    2017-11-07   32  	 */
da80ff81 Thierry Reding    2017-11-07   33  	struct irq_chip *chip;
da80ff81 Thierry Reding    2017-11-07   34  
da80ff81 Thierry Reding    2017-11-07   35  	/**
f0fbe7bc Thierry Reding    2017-11-07   36  	 * @domain:
f0fbe7bc Thierry Reding    2017-11-07   37  	 *
f0fbe7bc Thierry Reding    2017-11-07   38  	 * Interrupt translation domain; responsible for mapping between GPIO
f0fbe7bc Thierry Reding    2017-11-07   39  	 * hwirq number and Linux IRQ number.
f0fbe7bc Thierry Reding    2017-11-07   40  	 */
f0fbe7bc Thierry Reding    2017-11-07   41  	struct irq_domain *domain;
f0fbe7bc Thierry Reding    2017-11-07   42  
f0fbe7bc Thierry Reding    2017-11-07   43  	/**
c44eafd7 Thierry Reding    2017-11-07   44  	 * @domain_ops:
c44eafd7 Thierry Reding    2017-11-07   45  	 *
c44eafd7 Thierry Reding    2017-11-07   46  	 * Table of interrupt domain operations for this IRQ chip.
c44eafd7 Thierry Reding    2017-11-07   47  	 */
c44eafd7 Thierry Reding    2017-11-07   48  	const struct irq_domain_ops *domain_ops;
c44eafd7 Thierry Reding    2017-11-07   49  
c44eafd7 Thierry Reding    2017-11-07   50  	/**
c7a0aa59 Thierry Reding    2017-11-07   51  	 * @handler:
c7a0aa59 Thierry Reding    2017-11-07   52  	 *
c7a0aa59 Thierry Reding    2017-11-07   53  	 * The IRQ handler to use (often a predefined IRQ core function) for
c7a0aa59 Thierry Reding    2017-11-07   54  	 * GPIO IRQs, provided by GPIO driver.
c7a0aa59 Thierry Reding    2017-11-07   55  	 */
c7a0aa59 Thierry Reding    2017-11-07   56  	irq_flow_handler_t handler;
c7a0aa59 Thierry Reding    2017-11-07   57  
c7a0aa59 Thierry Reding    2017-11-07   58  	/**
3634eeb0 Thierry Reding    2017-11-07   59  	 * @default_type:
3634eeb0 Thierry Reding    2017-11-07   60  	 *
3634eeb0 Thierry Reding    2017-11-07   61  	 * Default IRQ triggering type applied during GPIO driver
3634eeb0 Thierry Reding    2017-11-07   62  	 * initialization, provided by GPIO driver.
3634eeb0 Thierry Reding    2017-11-07   63  	 */
3634eeb0 Thierry Reding    2017-11-07   64  	unsigned int default_type;
3634eeb0 Thierry Reding    2017-11-07   65  
3634eeb0 Thierry Reding    2017-11-07   66  	/**
ca9df053 Thierry Reding    2017-11-07   67  	 * @lock_key:
ca9df053 Thierry Reding    2017-11-07   68  	 *
02ad0437 Randy Dunlap      2018-09-03   69  	 * Per GPIO IRQ chip lockdep class for IRQ lock.
ca9df053 Thierry Reding    2017-11-07   70  	 */
ca9df053 Thierry Reding    2017-11-07   71  	struct lock_class_key *lock_key;
02ad0437 Randy Dunlap      2018-09-03   72  
02ad0437 Randy Dunlap      2018-09-03   73  	/**
02ad0437 Randy Dunlap      2018-09-03   74  	 * @request_key:
02ad0437 Randy Dunlap      2018-09-03   75  	 *
02ad0437 Randy Dunlap      2018-09-03   76  	 * Per GPIO IRQ chip lockdep class for IRQ request.
02ad0437 Randy Dunlap      2018-09-03   77  	 */
39c3fd58 Andrew Lunn       2017-12-02   78  	struct lock_class_key *request_key;
ca9df053 Thierry Reding    2017-11-07   79  
ca9df053 Thierry Reding    2017-11-07   80  	/**
c44eafd7 Thierry Reding    2017-11-07   81  	 * @parent_handler:
c44eafd7 Thierry Reding    2017-11-07   82  	 *
c44eafd7 Thierry Reding    2017-11-07   83  	 * The interrupt handler for the GPIO chip's parent interrupts, may be
c44eafd7 Thierry Reding    2017-11-07   84  	 * NULL if the parent interrupts are nested rather than cascaded.
c44eafd7 Thierry Reding    2017-11-07   85  	 */
c44eafd7 Thierry Reding    2017-11-07   86  	irq_flow_handler_t parent_handler;
c44eafd7 Thierry Reding    2017-11-07   87  
c44eafd7 Thierry Reding    2017-11-07   88  	/**
c44eafd7 Thierry Reding    2017-11-07   89  	 * @parent_handler_data:
c44eafd7 Thierry Reding    2017-11-07   90  	 *
c44eafd7 Thierry Reding    2017-11-07   91  	 * Data associated, and passed to, the handler for the parent
c44eafd7 Thierry Reding    2017-11-07   92  	 * interrupt.
c44eafd7 Thierry Reding    2017-11-07   93  	 */
c44eafd7 Thierry Reding    2017-11-07   94  	void *parent_handler_data;
39e5f096 Thierry Reding    2017-11-07   95  
39e5f096 Thierry Reding    2017-11-07   96  	/**
39e5f096 Thierry Reding    2017-11-07   97  	 * @num_parents:
39e5f096 Thierry Reding    2017-11-07   98  	 *
39e5f096 Thierry Reding    2017-11-07   99  	 * The number of interrupt parents of a GPIO chip.
39e5f096 Thierry Reding    2017-11-07  100  	 */
39e5f096 Thierry Reding    2017-11-07  101  	unsigned int num_parents;
39e5f096 Thierry Reding    2017-11-07  102  
39e5f096 Thierry Reding    2017-11-07  103  	/**
7f91778d Stephen Boyd      2018-10-08  104  	 * private: For use by gpiochip_set_cascaded_irqchip()
7f91778d Stephen Boyd      2018-10-08 @105  	 */
7f91778d Stephen Boyd      2018-10-08  106  	unsigned int parent_irq;
7f91778d Stephen Boyd      2018-10-08  107  
7f91778d Stephen Boyd      2018-10-08  108  	/**
39e5f096 Thierry Reding    2017-11-07  109  	 * @parents:
39e5f096 Thierry Reding    2017-11-07  110  	 *
39e5f096 Thierry Reding    2017-11-07  111  	 * A list of interrupt parents of a GPIO chip. This is owned by the
39e5f096 Thierry Reding    2017-11-07  112  	 * driver, so the core will only reference this list, not modify it.
39e5f096 Thierry Reding    2017-11-07  113  	 */
39e5f096 Thierry Reding    2017-11-07  114  	unsigned int *parents;
dc6bafee Thierry Reding    2017-11-07  115  
dc6bafee Thierry Reding    2017-11-07  116  	/**
e0d89728 Thierry Reding    2017-11-07  117  	 * @map:
e0d89728 Thierry Reding    2017-11-07  118  	 *
e0d89728 Thierry Reding    2017-11-07  119  	 * A list of interrupt parents for each line of a GPIO chip.
e0d89728 Thierry Reding    2017-11-07  120  	 */
e0d89728 Thierry Reding    2017-11-07  121  	unsigned int *map;
e0d89728 Thierry Reding    2017-11-07  122  
e0d89728 Thierry Reding    2017-11-07  123  	/**
60ed54ca Thierry Reding    2017-11-07  124  	 * @threaded:
dc6bafee Thierry Reding    2017-11-07  125  	 *
60ed54ca Thierry Reding    2017-11-07  126  	 * True if set the interrupt handling uses nested threads.
dc6bafee Thierry Reding    2017-11-07  127  	 */
60ed54ca Thierry Reding    2017-11-07  128  	bool threaded;
dc7b0387 Thierry Reding    2017-11-07  129  
dc7b0387 Thierry Reding    2017-11-07  130  	/**
dc7b0387 Thierry Reding    2017-11-07  131  	 * @need_valid_mask:
dc7b0387 Thierry Reding    2017-11-07  132  	 *
dc7b0387 Thierry Reding    2017-11-07  133  	 * If set core allocates @valid_mask with all bits set to one.
dc7b0387 Thierry Reding    2017-11-07  134  	 */
dc7b0387 Thierry Reding    2017-11-07  135  	bool need_valid_mask;
dc7b0387 Thierry Reding    2017-11-07  136  
dc7b0387 Thierry Reding    2017-11-07  137  	/**
dc7b0387 Thierry Reding    2017-11-07  138  	 * @valid_mask:
dc7b0387 Thierry Reding    2017-11-07  139  	 *
dc7b0387 Thierry Reding    2017-11-07  140  	 * If not %NULL holds bitmask of GPIOs which are valid to be included
dc7b0387 Thierry Reding    2017-11-07  141  	 * in IRQ domain of the chip.
dc7b0387 Thierry Reding    2017-11-07  142  	 */
dc7b0387 Thierry Reding    2017-11-07  143  	unsigned long *valid_mask;
8302cf58 Thierry Reding    2017-11-07  144  
8302cf58 Thierry Reding    2017-11-07  145  	/**
8302cf58 Thierry Reding    2017-11-07  146  	 * @first:
8302cf58 Thierry Reding    2017-11-07  147  	 *
8302cf58 Thierry Reding    2017-11-07  148  	 * Required for static IRQ allocation. If set, irq_domain_add_simple()
8302cf58 Thierry Reding    2017-11-07  149  	 * will allocate and map all IRQs during initialization.
8302cf58 Thierry Reding    2017-11-07  150  	 */
8302cf58 Thierry Reding    2017-11-07  151  	unsigned int first;
461c1a7d Hans Verkuil      2018-09-08  152  
461c1a7d Hans Verkuil      2018-09-08  153  	/**
461c1a7d Hans Verkuil      2018-09-08  154  	 * @irq_enable:
461c1a7d Hans Verkuil      2018-09-08  155  	 *
461c1a7d Hans Verkuil      2018-09-08  156  	 * Store old irq_chip irq_enable callback
461c1a7d Hans Verkuil      2018-09-08  157  	 */
461c1a7d Hans Verkuil      2018-09-08  158  	void		(*irq_enable)(struct irq_data *data);
461c1a7d Hans Verkuil      2018-09-08  159  
461c1a7d Hans Verkuil      2018-09-08  160  	/**
461c1a7d Hans Verkuil      2018-09-08  161  	 * @irq_disable:
461c1a7d Hans Verkuil      2018-09-08  162  	 *
461c1a7d Hans Verkuil      2018-09-08  163  	 * Store old irq_chip irq_disable callback
461c1a7d Hans Verkuil      2018-09-08  164  	 */
461c1a7d Hans Verkuil      2018-09-08  165  	void		(*irq_disable)(struct irq_data *data);
c44eafd7 Thierry Reding    2017-11-07  166  };
da80ff81 Thierry Reding    2017-11-07 @167  

:::::: The code at line 167 was first introduced by commit
:::::: da80ff81a8f54611b834d73149f8ac0d59151c87 gpio: Move irqchip into struct gpio_irq_chip

:::::: TO: Thierry Reding <treding@nvidia.com>
:::::: CC: Linus Walleij <linus.walleij@linaro.org>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 6571 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/4] gpio: Assign gpio_irq_chip::parents to non-stack pointer
  2018-10-09  4:56   ` kbuild test robot
@ 2018-10-09  6:01     ` Stephen Boyd
  0 siblings, 0 replies; 12+ messages in thread
From: Stephen Boyd @ 2018-10-09  6:01 UTC (permalink / raw)
  To: kbuild test robot
  Cc: kbuild-all, Linus Walleij, linux-kernel, linux-gpio, Evan Green,
	Thierry Reding, Grygorii Strashko

Quoting kbuild test robot (2018-10-08 21:56:25)
> Hi Stephen,
> 
> I love your patch! Perhaps something to improve:
[...]
>    net/mac80211/sta_info.h:588: warning: Function parameter or member 'tx_stats.packets' not described in 'sta_info'
>    net/mac80211/sta_info.h:588: warning: Function parameter or member 'tx_stats.bytes' not described in 'sta_info'
>    net/mac80211/sta_info.h:588: warning: Function parameter or member 'tx_stats.last_rate' not described in 'sta_info'
>    net/mac80211/sta_info.h:588: warning: Function parameter or member 'tx_stats.msdu' not described in 'sta_info'
>    include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_excl.cb' not described in 'dma_buf'
>    include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_excl.poll' not described in 'dma_buf'
>    include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_excl.active' not described in 'dma_buf'
>    include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_shared.cb' not described in 'dma_buf'
>    include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_shared.poll' not described in 'dma_buf'
>    include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_shared.active' not described in 'dma_buf'
>    include/linux/dma-fence-array.h:54: warning: Function parameter or member 'work' not described in 'dma_fence_array'
>    include/linux/gpio/driver.h:105: warning: Incorrect use of kernel-doc format: Documentation Makefile include scripts source private: For use by gpiochip_set_cascaded_irqchip()
> >> include/linux/gpio/driver.h:167: warning: Function parameter or member 'parent_irq' not described in 'gpio_irq_chip'

Ok! That was a little rough to pick out. Is there any way to mark
something as private with inline kernel doc?


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/4] gpio: Assign gpio_irq_chip::parents to non-stack pointer
  2018-10-08 16:32 ` [PATCH 1/4] gpio: Assign gpio_irq_chip::parents to non-stack pointer Stephen Boyd
  2018-10-09  4:56   ` kbuild test robot
@ 2018-10-10 12:05   ` Linus Walleij
  2018-10-10 17:02     ` Stephen Boyd
  1 sibling, 1 reply; 12+ messages in thread
From: Linus Walleij @ 2018-10-10 12:05 UTC (permalink / raw)
  To: Stephen Boyd
  Cc: linux-kernel, open list:GPIO SUBSYSTEM, evgreen, Thierry Reding,
	Grygorii Strashko

On Mon, Oct 8, 2018 at 6:32 PM Stephen Boyd <swboyd@chromium.org> wrote:

> gpiochip_set_cascaded_irqchip() is passed 'parent_irq' as an argument
> and then the address of that argument is assigned to the gpio chips
> gpio_irq_chip 'parents' pointer shortly thereafter. This can't ever
> work, because we've just assigned some stack address to a pointer that
> we plan to dereference later in gpiochip_irq_map(). I ran into this
> issue with the KASAN report below when gpiochip_irq_map() tried to setup
> the parent irq with a total junk pointer for the 'parents' array.
>
> BUG: KASAN: stack-out-of-bounds in gpiochip_irq_map+0x228/0x248
> Read of size 4 at addr ffffffc0dde472e0 by task swapper/0/1
>
> CPU: 7 PID: 1 Comm: swapper/0 Not tainted 4.14.72 #34
> Call trace:
> [<ffffff9008093638>] dump_backtrace+0x0/0x718
> [<ffffff9008093da4>] show_stack+0x20/0x2c
> [<ffffff90096b9224>] __dump_stack+0x20/0x28
> [<ffffff90096b91c8>] dump_stack+0x80/0xbc
> [<ffffff900845a350>] print_address_description+0x70/0x238
> [<ffffff900845a8e4>] kasan_report+0x1cc/0x260
> [<ffffff900845aa14>] __asan_report_load4_noabort+0x2c/0x38
> [<ffffff900897e098>] gpiochip_irq_map+0x228/0x248
> [<ffffff900820cc08>] irq_domain_associate+0x114/0x2ec
> [<ffffff900820d13c>] irq_create_mapping+0x120/0x234
> [<ffffff900820da78>] irq_create_fwspec_mapping+0x4c8/0x88c
> [<ffffff900820e2d8>] irq_create_of_mapping+0x180/0x210
> [<ffffff900917114c>] of_irq_get+0x138/0x198
> [<ffffff9008dc70ac>] spi_drv_probe+0x94/0x178
> [<ffffff9008ca5168>] driver_probe_device+0x51c/0x824
> [<ffffff9008ca6538>] __device_attach_driver+0x148/0x20c
> [<ffffff9008ca14cc>] bus_for_each_drv+0x120/0x188
> [<ffffff9008ca570c>] __device_attach+0x19c/0x2dc
> [<ffffff9008ca586c>] device_initial_probe+0x20/0x2c
> [<ffffff9008ca18bc>] bus_probe_device+0x80/0x154
> [<ffffff9008c9b9b4>] device_add+0x9b8/0xbdc
> [<ffffff9008dc7640>] spi_add_device+0x1b8/0x380
> [<ffffff9008dcbaf0>] spi_register_controller+0x111c/0x1378
> [<ffffff9008dd6b10>] spi_geni_probe+0x4dc/0x6f8
> [<ffffff9008cab058>] platform_drv_probe+0xdc/0x130
> [<ffffff9008ca5168>] driver_probe_device+0x51c/0x824
> [<ffffff9008ca59cc>] __driver_attach+0x100/0x194
> [<ffffff9008ca0ea8>] bus_for_each_dev+0x104/0x16c
> [<ffffff9008ca58c0>] driver_attach+0x48/0x54
> [<ffffff9008ca1edc>] bus_add_driver+0x274/0x498
> [<ffffff9008ca8448>] driver_register+0x1ac/0x230
> [<ffffff9008caaf6c>] __platform_driver_register+0xcc/0xdc
> [<ffffff9009c4b33c>] spi_geni_driver_init+0x1c/0x24
> [<ffffff9008084cb8>] do_one_initcall+0x240/0x3dc
> [<ffffff9009c017d0>] kernel_init_freeable+0x378/0x468
> [<ffffff90096e8240>] kernel_init+0x14/0x110
> [<ffffff9008086fcc>] ret_from_fork+0x10/0x18
>
> The buggy address belongs to the page:
> page:ffffffbf037791c0 count:0 mapcount:0 mapping:          (null) index:0x0
> flags: 0x4000000000000000()
> raw: 4000000000000000 0000000000000000 0000000000000000 00000000ffffffff
> raw: ffffffbf037791e0 ffffffbf037791e0 0000000000000000 0000000000000000
> page dumped because: kasan: bad access detected
>
> Memory state around the buggy address:
>  ffffffc0dde47180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>  ffffffc0dde47200: f1 f1 f1 f1 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f2 f2
> >ffffffc0dde47280: f2 f2 00 00 00 00 00 00 00 00 00 00 f3 f3 f3 f3
>                                                        ^
>  ffffffc0dde47300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>  ffffffc0dde47380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>
> Let's leave around one unsigned int in the gpio_irq_chip struct for the
> single parent irq case and repoint the 'parents' array at it. This way
> code is left mostly intact to setup parents and we waste an extra few
> bytes per structure of which there should be only a handful in a system.
>
> Cc: Evan Green <evgreen@chromium.org>
> Cc: Thierry Reding <treding@nvidia.com>
> Cc: Grygorii Strashko <grygorii.strashko@ti.com>
> Fixes: e0d897289813 ("gpio: Implement tighter IRQ chip integration")
> Signed-off-by: Stephen Boyd <swboyd@chromium.org>

OMG critical fix. I fixed up the thing the kbuild robot was complaining
about with some vanilla kerneldoc and applied for fixes since it's kind
of urgent.

Please check the result.

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/4] gpio: Assign gpio_irq_chip::parents to non-stack pointer
  2018-10-10 12:05   ` Linus Walleij
@ 2018-10-10 17:02     ` Stephen Boyd
  0 siblings, 0 replies; 12+ messages in thread
From: Stephen Boyd @ 2018-10-10 17:02 UTC (permalink / raw)
  To: Linus Walleij
  Cc: linux-kernel, open list:GPIO SUBSYSTEM, evgreen, Thierry Reding,
	Grygorii Strashko

Quoting Linus Walleij (2018-10-10 05:05:18)
> On Mon, Oct 8, 2018 at 6:32 PM Stephen Boyd <swboyd@chromium.org> wrote:
> 
> >
> > Let's leave around one unsigned int in the gpio_irq_chip struct for the
> > single parent irq case and repoint the 'parents' array at it. This way
> > code is left mostly intact to setup parents and we waste an extra few
> > bytes per structure of which there should be only a handful in a system.
> >
> > Cc: Evan Green <evgreen@chromium.org>
> > Cc: Thierry Reding <treding@nvidia.com>
> > Cc: Grygorii Strashko <grygorii.strashko@ti.com>
> > Fixes: e0d897289813 ("gpio: Implement tighter IRQ chip integration")
> > Signed-off-by: Stephen Boyd <swboyd@chromium.org>
> 
> OMG critical fix. I fixed up the thing the kbuild robot was complaining
> about with some vanilla kerneldoc and applied for fixes since it's kind
> of urgent.
> 
> Please check the result.
> 

Looks good. Thanks!


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 2/4] gpio: Drop parent irq assignment during cascade setup
  2018-10-08 16:32 ` [PATCH 2/4] gpio: Drop parent irq assignment during cascade setup Stephen Boyd
@ 2018-10-16  7:28   ` Linus Walleij
  0 siblings, 0 replies; 12+ messages in thread
From: Linus Walleij @ 2018-10-16  7:28 UTC (permalink / raw)
  To: Stephen Boyd
  Cc: linux-kernel, open list:GPIO SUBSYSTEM, evgreen, Thierry Reding,
	Grygorii Strashko

On Mon, Oct 8, 2018 at 6:32 PM Stephen Boyd <swboyd@chromium.org> wrote:

> We want to set the irq parent for interrupts that we're setting up to be
> cascaded from another interrupt controller, but we may or may not have
> already mapped the gpiochip irqs into the kernel's virtual irq number
> space at this point. If we have mapped irqs before calling here, then
> we've gone through gpiochip_irq_map() and called irq_set_parent()
> already. If we haven't mapped irqs, then the gpiochip is dynamically
> mapping irqs and we can rely on gpiochip_irq_map() or the gpio driver's
> irqdomain ops to setup the irq parent properly.
>
> Either way, setting the parent here when cascading the gpiochip doesn't
> make much sense because it should be done at irq mapping time. In the
> dynamic mapping case, this code is mapping virq 0 to some parent virq in
> a loop. While that's benign, let's drop this code to simplify.
>
> Cc: Evan Green <evgreen@chromium.org>
> Cc: Thierry Reding <treding@nvidia.com>
> Cc: Grygorii Strashko <grygorii.strashko@ti.com>
> Signed-off-by: Stephen Boyd <swboyd@chromium.org>

Yep this is some leftover from the past.

Patch applied!

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 3/4] gpio: Remove unused 'irqchip' argument to gpiochip_set_cascaded_irqchip()
  2018-10-08 16:32 ` [PATCH 3/4] gpio: Remove unused 'irqchip' argument to gpiochip_set_cascaded_irqchip() Stephen Boyd
@ 2018-10-16  7:29   ` Linus Walleij
  0 siblings, 0 replies; 12+ messages in thread
From: Linus Walleij @ 2018-10-16  7:29 UTC (permalink / raw)
  To: Stephen Boyd
  Cc: linux-kernel, open list:GPIO SUBSYSTEM, evgreen, Thierry Reding,
	Grygorii Strashko

On Mon, Oct 8, 2018 at 6:32 PM Stephen Boyd <swboyd@chromium.org> wrote:

> This argument hasn't ever been used since it was introduced in commit
> 1425052097b5 ("gpio: add IRQ chip helpers in gpiolib"). Let's drop it to
> reduce reading confusion.
>
> Cc: Evan Green <evgreen@chromium.org>
> Cc: Thierry Reding <treding@nvidia.com>
> Cc: Grygorii Strashko <grygorii.strashko@ti.com>
> Signed-off-by: Stephen Boyd <swboyd@chromium.org>

Patch applied. Good catch.

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 4/4] gpio: Clarify kerneldoc on gpiochip_set_chained_irqchip()
  2018-10-08 16:32 ` [PATCH 4/4] gpio: Clarify kerneldoc on gpiochip_set_chained_irqchip() Stephen Boyd
@ 2018-10-16  7:30   ` Linus Walleij
  0 siblings, 0 replies; 12+ messages in thread
From: Linus Walleij @ 2018-10-16  7:30 UTC (permalink / raw)
  To: Stephen Boyd
  Cc: linux-kernel, open list:GPIO SUBSYSTEM, evgreen, Thierry Reding,
	Grygorii Strashko

On Mon, Oct 8, 2018 at 6:32 PM Stephen Boyd <swboyd@chromium.org> wrote:

> This doesn't support nested anymore, so drivers shouldn't call it with
> the handler set to NULL.
>
> Cc: Evan Green <evgreen@chromium.org>
> Cc: Thierry Reding <treding@nvidia.com>
> Cc: Grygorii Strashko <grygorii.strashko@ti.com>
> Signed-off-by: Stephen Boyd <swboyd@chromium.org>

Patch applied.

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2018-10-16  7:30 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-08 16:32 [PATCH 0/4] gpio chip cascade fixes Stephen Boyd
2018-10-08 16:32 ` [PATCH 1/4] gpio: Assign gpio_irq_chip::parents to non-stack pointer Stephen Boyd
2018-10-09  4:56   ` kbuild test robot
2018-10-09  6:01     ` Stephen Boyd
2018-10-10 12:05   ` Linus Walleij
2018-10-10 17:02     ` Stephen Boyd
2018-10-08 16:32 ` [PATCH 2/4] gpio: Drop parent irq assignment during cascade setup Stephen Boyd
2018-10-16  7:28   ` Linus Walleij
2018-10-08 16:32 ` [PATCH 3/4] gpio: Remove unused 'irqchip' argument to gpiochip_set_cascaded_irqchip() Stephen Boyd
2018-10-16  7:29   ` Linus Walleij
2018-10-08 16:32 ` [PATCH 4/4] gpio: Clarify kerneldoc on gpiochip_set_chained_irqchip() Stephen Boyd
2018-10-16  7:30   ` Linus Walleij

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).