All of lore.kernel.org
 help / color / mirror / Atom feed
From: Julien Grall <julien.grall@linaro.org>
To: Ian Campbell <Ian.Campbell@citrix.com>
Cc: xen-devel@lists.xenproject.org, tim@xen.org,
	stefano.stabellini@citrix.com
Subject: Re: [PATCH v2 10/16] xen/arm: IRQ: Don't need to have a specific function to route IRQ to Xen
Date: Mon, 07 Apr 2014 15:15:37 +0100	[thread overview]
Message-ID: <5342B309.20006@linaro.org> (raw)
In-Reply-To: <1396878824.22845.105.camel@kazak.uk.xensource.com>

On 04/07/2014 02:53 PM, Ian Campbell wrote:
> On Thu, 2014-04-03 at 21:42 +0100, Julien Grall wrote:
>> When the IRQ is handling by Xen, the setup is done in 2 steps:
> 
> "an IRQ is handled" (and perhaps s/, the//)

Will fix it.

> $subject is an odd way to describe the change too (it's more like the
> motivation). Something like "defer routing IRQ to Xen until setup_irq()
> call" perhaps?

Sounds better. I will change the commit title.

> 
>>     - Route the IRQ to the current CPU and set priorities
>>     - Set up the handler
>>
>> For PPIs, these steps are called on every cpu. For SPIs, they are only called
>> on the boot CPU.
>>
>> Dividing the setup in two step complicates the code when a new driver is
>> added to Xen (for instance a SMMU driver). Xen can safely route the IRQ
>> when the driver sets up the interrupt handler.
>>
>> Signed-off-by: Julien Grall <julien.grall@linaro.org>
>>
>> ---
>>     Changes in v2:
>>         - Fix typo in commit message
>>         - s/SGI/SPI/ in comments
>>         - Rename gic_route_dt_irq into gic_route_irq_to_xen which is
>>         taking a desc now
>>         - Call setup_irq before initializing the GIC IRQ as the first one
>>         can fail.
>> ---
>>  xen/arch/arm/gic.c         |   63 +++++++-------------------------------------
>>  xen/arch/arm/irq.c         |   24 ++++++++++++++++-
>>  xen/arch/arm/setup.c       |    2 --
>>  xen/arch/arm/smpboot.c     |    2 --
>>  xen/arch/arm/time.c        |   11 --------
>>  xen/include/asm-arm/gic.h  |   10 +++----
>>  xen/include/asm-arm/time.h |    3 ---
>>  7 files changed, 36 insertions(+), 79 deletions(-)
>>
>> diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c
>> index 8c53e52..9127ecf 100644
>> --- a/xen/arch/arm/gic.c
>> +++ b/xen/arch/arm/gic.c
>> @@ -257,30 +257,20 @@ static void gic_set_irq_properties(unsigned int irq, bool_t level,
>>      spin_unlock(&gic.lock);
>>  }
>>  
>> -/* Program the GIC to route an interrupt */
>> -static int gic_route_irq(unsigned int irq, bool_t level,
>> -                         const cpumask_t *cpu_mask, unsigned int priority)
>> +/* Program the GIC to route an interrupt to the host (eg Xen)
> 
> You mean i.e. not e.g.

Will fix it.

>> diff --git a/xen/arch/arm/irq.c b/xen/arch/arm/irq.c
>> index 798353b..1262a9c 100644
>> --- a/xen/arch/arm/irq.c
>> +++ b/xen/arch/arm/irq.c
>> @@ -247,15 +247,37 @@ int setup_dt_irq(const struct dt_irq *irq, struct irqaction *new)
>>      int rc;
>>      unsigned long flags;
>>      struct irq_desc *desc;
>> +    bool_t disabled = 0;
> 
> No need to init, it's unconditionally assigned below. But if you do want
> to keep it then I think boot_t wants to go with false even if that is
> the same as 0 in the end.

Ok.

>>      desc = irq_to_desc(irq->irq);
>>  
>>      spin_lock_irqsave(&desc->lock, flags);
>> +
>> +    disabled = (desc->action == NULL);
>> +
>>      rc = __setup_irq(desc, new);
>> +    if ( rc )
>> +        goto err;
>>  
>> -    if ( !rc )
>> +    /* First time the IRQ is setup */
>> +    if ( disabled )
> 
> There's no way we can get back into this state. Perhaps with calls to
> release_irq?

release_irq will disable the interrupt if all the actions are removed.

> 
>> +    {
>> +        bool_t level;
>> +
>> +        level = dt_irq_is_level_triggered(irq);
>> +        /* It's fine to use smp_processor_id() because:
>> +         * For PPI: irq_desc is banked
>> +         * For SPI: we don't care for now which CPU will receive the
>> +         * interrupt
> 
> setup_dt_irq expected to be called multiple times for a PPI and the desc
> is not shared, so that's how they get setup as well, right?

Yes, this setup_dt_irq should be called on the right processor when the
IRQ is a PPI.

Regards,

-- 
Julien Grall

  reply	other threads:[~2014-04-07 14:15 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-03 20:41 [PATCH v2 00/16] Interrupt management reworking Julien Grall
2014-04-03 20:41 ` [PATCH v2 01/16] xen/arm: timer: replace timer_dt_irq by timer_get_irq Julien Grall
2014-04-07 13:10   ` Ian Campbell
2014-04-07 13:24     ` Julien Grall
2014-04-03 20:41 ` [PATCH v2 02/16] xen/arm: IRQ: Use default irq callback from common code for no_irq_type Julien Grall
2014-04-07 13:10   ` Ian Campbell
2014-04-03 20:41 ` [PATCH v2 03/16] xen/arm: IRQ: Rename irq_cfg into arch_irq_desc Julien Grall
2014-04-07 13:10   ` Ian Campbell
2014-04-03 20:41 ` [PATCH v2 04/16] xen/arm: IRQ: move gic {, un}lock in gic_set_irq_properties Julien Grall
2014-04-03 20:41 ` [PATCH v2 05/16] xen/arm: IRQ: drop irq parameter in __setup_irq Julien Grall
2014-04-07 13:05   ` Ian Campbell
2014-04-07 13:26     ` Julien Grall
2014-04-03 20:41 ` [PATCH v2 06/16] xen/arm: IRQ: remove __init from setup_dt_irq, request_dt_irq and release_irq Julien Grall
2014-04-07 13:11   ` Ian Campbell
2014-04-03 20:41 ` [PATCH v2 07/16] xen/arm: IRQ: Move IRQ management from gic.c to irq.c Julien Grall
2014-04-07 13:07   ` Ian Campbell
2014-04-07 13:34     ` Julien Grall
2014-04-03 20:41 ` [PATCH v2 08/16] xen/arm: IRQ Introduce irq_get_domain Julien Grall
2014-04-07 13:15   ` Ian Campbell
2014-04-07 13:44     ` Julien Grall
2014-04-03 20:42 ` [PATCH v2 09/16] xen/arm: IRQ: Add lock contrainst for gic_irq_{startup, shutdown} Julien Grall
2014-04-07 13:27   ` Ian Campbell
2014-04-07 14:45     ` Julien Grall
2014-04-03 20:42 ` [PATCH v2 10/16] xen/arm: IRQ: Don't need to have a specific function to route IRQ to Xen Julien Grall
2014-04-07 13:53   ` Ian Campbell
2014-04-07 14:15     ` Julien Grall [this message]
2014-04-03 20:42 ` [PATCH v2 11/16] xen/arm: IRQ: Protect IRQ to be shared between domains and XEN Julien Grall
2014-04-07 14:46   ` Ian Campbell
2014-04-07 14:53     ` Julien Grall
2014-04-07 15:12       ` Ian Campbell
2014-04-07 15:32         ` Julien Grall
2014-04-03 20:42 ` [PATCH v2 12/16] xen/serial: remove serial_dt_irq Julien Grall
2014-04-07 14:49   ` Ian Campbell
2014-04-03 20:42 ` [PATCH v2 13/16] xen/arm: IRQ: Store IRQ type in arch_irq_desc Julien Grall
2014-04-07 15:03   ` Ian Campbell
2014-04-07 16:06     ` Julien Grall
2014-04-07 16:26       ` Ian Campbell
2014-04-08 11:46         ` Julien Grall
2014-04-08 15:30           ` Ian Campbell
2014-04-08 15:50             ` Julien Grall
2014-04-08 15:54               ` Ian Campbell
2014-04-03 20:42 ` [PATCH v2 14/16] xen/arm: IRQ: Replace {request, setup}_dt_irq by {request, setup}_irq Julien Grall
2014-04-07 15:06   ` Ian Campbell
2014-04-07 16:11     ` Julien Grall
2014-04-03 20:42 ` [PATCH v2 15/16] xen: IRQ: Add dev_id parameter to release_irq Julien Grall
2014-04-04  7:47   ` Jan Beulich
2014-04-04  8:39     ` Julien Grall
2014-04-07 15:08   ` Ian Campbell
2014-04-03 20:42 ` [PATCH v2 16/16] xen/arm: IRQ: Handle multiple action per IRQ Julien Grall
2014-04-04  7:59   ` Jan Beulich
2014-04-04  8:52     ` Julien Grall
2014-04-04  9:00       ` Jan Beulich

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=5342B309.20006@linaro.org \
    --to=julien.grall@linaro.org \
    --cc=Ian.Campbell@citrix.com \
    --cc=stefano.stabellini@citrix.com \
    --cc=tim@xen.org \
    --cc=xen-devel@lists.xenproject.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.