From: Grygorii Strashko <grygorii.strashko@ti.com>
To: "Wang, Yalin" <Yalin.Wang@sonymobile.com>,
Linus Walleij <linus.walleij@linaro.org>
Cc: "gnurou@gmail.com" <gnurou@gmail.com>,
"linux-gpio@vger.kernel.org" <linux-gpio@vger.kernel.org>,
"akpm@linux-foundation.org" <akpm@linux-foundation.org>
Subject: Re: [PATCH] gpiolib:change to use irq_alloc_descs_from to alloc virqs
Date: Tue, 23 Sep 2014 15:59:17 +0300 [thread overview]
Message-ID: <54216EA5.5010506@ti.com> (raw)
In-Reply-To: <35FD53F367049845BC99AC72306C23D103D6DB4D6F29@CNBJMBX05.corpusers.net>
Hi Wang,
On 09/23/2014 03:03 PM, Wang, Yalin wrote:
> hi
>
> this is because , here:
>
> gpiochip->irqdomain = irq_domain_add_simple(of_node,
> gpiochip->ngpio, first_irq,
> &gpiochip_domain_ops, gpiochip);
>
>
> irq_domain_add_simple() in this function,
> if (first_irq > 0) {
> if (IS_ENABLED(CONFIG_SPARSE_IRQ)) {
> /* attempt to allocated irq_descs */
> int rc = irq_alloc_descs(first_irq, first_irq, size,
> of_node_to_nid(of_node));
> if (rc < 0)
> pr_info("Cannot allocate irq_descs @ IRQ%d, assuming pre-allocated\n",
> first_irq);
> }
> irq_domain_associate_many(domain, first_irq, 0, size);
> }
>
> if first_irq > 0 , it will allocate it ,
> and make sure the return virq is equal to first_irq .
> so we don't need allocate it again .
Could provide a little bit more information about issue you've observed, pls?
As for me, you patch will completely disable Sparse IRQ feature :(
Also, I'm sure that struct gpio_chip->irq_base field can
be removed from gpiolib irqchip code - GPIO drivers shouldn't use it also,
because otherwise they will be incompatible with Sparse IRQ feature.
Now the "irq_base" is used only twice in gpiolib code and below diff should
allow to drop it completely from gpiolib code.
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 15cc0bb..81762ed 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -524,7 +524,7 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip)
/* Remove all IRQ mappings and delete the domain */
if (gpiochip->irqdomain) {
for (offset = 0; offset < gpiochip->ngpio; offset++)
- irq_dispose_mapping(gpiochip->irq_base + offset);
+ irq_dispose_mapping(irq_find_mapping(gpiochip->irqdomain, offset));
irq_domain_remove(gpiochip->irqdomain);
}
not tested.
> ________________________________________
> From: Linus Walleij [linus.walleij@linaro.org]
> Sent: Tuesday, September 23, 2014 6:21 PM
> To: Wang, Yalin
> Cc: gnurou@gmail.com; linux-gpio@vger.kernel.org; akpm@linux-foundation.org
> Subject: Re: [PATCH] gpiolib:change to use irq_alloc_descs_from to alloc virqs
>
> On Tue, Sep 9, 2014 at 9:12 AM, Wang, Yalin <Yalin.Wang@sonymobile.com> wrote:
>
>> 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@sonymobile.com>
>
> (...)
>
>> - 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;
>
> Wait is this safe? Now you assume all descriptors are pre-allocated
> and associated in this case, atleast explain what is going on.
>
>> + } 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);
>
> This part looks OK.
>
> I'm holding this patch back until the above is clarified.
>
> Yours,
> Linus Walleij--
> To unsubscribe from this list: send the line "unsubscribe linux-gpio" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
Best regards,
-grygorii
next prev parent reply other threads:[~2014-09-23 12:59 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-09 7:12 [PATCH] gpiolib:change to use irq_alloc_descs_from to alloc virqs Wang, Yalin
2014-09-23 10:17 ` Linus Walleij
2014-09-23 10:21 ` Linus Walleij
2014-09-23 12:03 ` Wang, Yalin
2014-09-23 12:59 ` Grygorii Strashko [this message]
2014-09-23 13:37 ` Wang, Yalin
2014-09-23 13:39 ` Wang, Yalin
2014-09-23 14:15 ` Wang, Yalin
2014-09-23 14:51 ` Wang, Yalin
2014-09-23 15:03 ` Grygorii Strashko
2014-09-24 1:59 ` Wang, Yalin
2014-09-25 7:39 ` Linus Walleij
2014-09-25 7:47 ` Wang, Yalin
2014-09-25 13:18 ` Linus Walleij
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54216EA5.5010506@ti.com \
--to=grygorii.strashko@ti.com \
--cc=Yalin.Wang@sonymobile.com \
--cc=akpm@linux-foundation.org \
--cc=gnurou@gmail.com \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.