[PATCH] gpiolib:change to use irq_alloc_descs_from to alloc virqs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



this patch change use from irq_create_mapping to irq_alloc_descs_from,
use irq_create_mapping to alloc virq one by one is not safe,
it can't promise the allcated virqs are continuous,
in stead, we use irq_alloc_descs_from() to alloc virqs in one time,
so that the allocated virqs are in continuous bitmaps.

Signed-off-by: Yalin Wang <yalin.wang@xxxxxxxxxxxxxx>
---
 drivers/gpio/gpiolib.c | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 15cc0bb..2b6c441 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -566,7 +566,6 @@ int gpiochip_irqchip_add(struct gpio_chip *gpiochip,
 			 unsigned int type)
 {
 	struct device_node *of_node;
-	unsigned int offset;
 	unsigned irq_base = 0;
 
 	if (!gpiochip || !irqchip)
@@ -604,14 +603,13 @@ int gpiochip_irqchip_add(struct gpio_chip *gpiochip,
 	 * any gpiochip calls. If the first_irq was zero, this is
 	 * necessary to allocate descriptors for all IRQs.
 	 */
-	for (offset = 0; offset < gpiochip->ngpio; offset++) {
-		irq_base = irq_create_mapping(gpiochip->irqdomain, offset);
-		if (offset == 0)
-			/*
-			 * Store the base into the gpiochip to be used when
-			 * unmapping the irqs.
-			 */
-			gpiochip->irq_base = irq_base;
+	if (first_irq > 0) {
+		gpiochip->irq_base = first_irq;
+	} else {
+		gpiochip->irq_base = irq_alloc_descs_from(1, gpiochip->ngpio,
+				of_node_to_nid(of_node));
+		irq_domain_associate_many(gpiochip->irqdomain,
+				gpiochip->irq_base, 0, gpiochip->ngpio);
 	}
 
 	acpi_gpiochip_request_interrupts(gpiochip);
-- 
2.1.0
--
To unsubscribe from this list: send the line "unsubscribe linux-gpio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux SPI]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux