xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Julien Grall <julien.grall@arm.com>
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: xen-devel@lists.xenproject.org, andre.przywara@arm.com,
	andrii.anisov@gmail.com
Subject: Re: [PATCH for-next] xen/arm: irq: Don't use _IRQ_PENDING when handling host interrupt
Date: Wed, 17 Apr 2019 18:24:37 +0100	[thread overview]
Message-ID: <d36567cd-7c3e-3921-0355-77c55559d61b@arm.com> (raw)
In-Reply-To: <alpine.DEB.2.10.1904171006020.1370@sstabellini-ThinkPad-X260>

Hi,

On 17/04/2019 18:12, Stefano Stabellini wrote:
> On Tue, 16 Apr 2019, Julien Grall wrote:
>> Hi Stefano,
>>
>> On 4/16/19 10:51 PM, Stefano Stabellini wrote:
>>> On Mon, 28 Jan 2019, Julien Grall wrote:
>>>> While SPIs are shared between CPU, it is not possible to receive the
>>>> same interrupts on a different CPU while the interrupt is in active
>>>> state. The deactivation of the interrupt is done at the end of the
>>>> handling.
>>>>
>>>> This means the _IRQ_PENDING logic is unecessary on Arm as a same
>>>> interrupt can never come up while in the loop. So remove it to
>>>> simplify the interrupt handle code.
>>>>
>>>> Signed-off-by: Julien Grall <julien.grall@arm.com>
>>>> ---
>>>>    xen/arch/arm/irq.c | 32 ++++++++++----------------------
>>>>    1 file changed, 10 insertions(+), 22 deletions(-)
>>>>
>>>> diff --git a/xen/arch/arm/irq.c b/xen/arch/arm/irq.c
>>>> index c51cf333ce..3877657a52 100644
>>>> --- a/xen/arch/arm/irq.c
>>>> +++ b/xen/arch/arm/irq.c
>>>> @@ -199,6 +199,7 @@ int request_irq(unsigned int irq, unsigned int
>>>> irqflags,
>>>>    void do_IRQ(struct cpu_user_regs *regs, unsigned int irq, int is_fiq)
>>>>    {
>>>>        struct irq_desc *desc = irq_to_desc(irq);
>>>> +    struct irqaction *action;
>>>>          perfc_incr(irqs);
>>>>    @@ -242,35 +243,22 @@ void do_IRQ(struct cpu_user_regs *regs, unsigned
>>>> int irq, int is_fiq)
>>>>            goto out_no_end;
>>>>        }
>>>>    -    set_bit(_IRQ_PENDING, &desc->status);
>>>> -
>>>> -    /*
>>>> -     * Since we set PENDING, if another processor is handling a different
>>>> -     * instance of this same irq, the other processor will take care of
>>>> it.
>>>> -     */
>>>> -    if ( test_bit(_IRQ_DISABLED, &desc->status) ||
>>>> -         test_bit(_IRQ_INPROGRESS, &desc->status) )
>>>> +    if ( test_bit(_IRQ_DISABLED, &desc->status) )
>>>>            goto out;
>>>
>>> It is a good idea to remove the IRQ_PENDING logic, that is OK.
>>>
>>>
>>> However, are we sure that we want to remove the _IRQ_INPROGRESS check
>>> too? IRQ handlers shouldn't be called twice in a row. Given that
>>> _IRQ_INPROGRESS can be set manually (gicv2_set_active_state) it seems it
>>> would be a good idea to keep the check anyway?
>>
>> set_active_state is only used by the vGIC to replicate state from of the
>> virtual interrupt to the physical interrupt. We don't have the virtual
>> interrupt in this path (see above).
>>
>> Any other user (e.g interrupts routed to Xen) would be pretty broken. At best
>> you would break the interrupt flow. At worst, you may never receive the
>> interrupt again.
>>
>> So I think we can drop _IRQ_PROGRESS here.
> 
> I gave it a close look. You are right, it is safe to remove the
> _IRQ_PROGRESS check here.
> 
> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
> 
> 
> The thing that worries me a bit is that technically set_active_state is
> part of the gic_hw_operations functions which are not necessarily guest
> specific: we haven't written down anywhere that set_active_state cannot
> be called passing one of the xen irqs as parameter. I agree it would be
> broken to do so, but still... Maybe we should add a comment?

How about adding an ASSERT(test_bit(_IRQ_GUEST, &desc->status)) ?

Cheers,

-- 
Julien Grall

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

WARNING: multiple messages have this Message-ID (diff)
From: Julien Grall <julien.grall@arm.com>
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: xen-devel@lists.xenproject.org, andre.przywara@arm.com,
	andrii.anisov@gmail.com
Subject: Re: [Xen-devel] [PATCH for-next] xen/arm: irq: Don't use _IRQ_PENDING when handling host interrupt
Date: Wed, 17 Apr 2019 18:24:37 +0100	[thread overview]
Message-ID: <d36567cd-7c3e-3921-0355-77c55559d61b@arm.com> (raw)
Message-ID: <20190417172437.fsr-4xGH4bP4oL4Hsf0KT3Jlbly6fWK-uIkgNf2c-rA@z> (raw)
In-Reply-To: <alpine.DEB.2.10.1904171006020.1370@sstabellini-ThinkPad-X260>

Hi,

On 17/04/2019 18:12, Stefano Stabellini wrote:
> On Tue, 16 Apr 2019, Julien Grall wrote:
>> Hi Stefano,
>>
>> On 4/16/19 10:51 PM, Stefano Stabellini wrote:
>>> On Mon, 28 Jan 2019, Julien Grall wrote:
>>>> While SPIs are shared between CPU, it is not possible to receive the
>>>> same interrupts on a different CPU while the interrupt is in active
>>>> state. The deactivation of the interrupt is done at the end of the
>>>> handling.
>>>>
>>>> This means the _IRQ_PENDING logic is unecessary on Arm as a same
>>>> interrupt can never come up while in the loop. So remove it to
>>>> simplify the interrupt handle code.
>>>>
>>>> Signed-off-by: Julien Grall <julien.grall@arm.com>
>>>> ---
>>>>    xen/arch/arm/irq.c | 32 ++++++++++----------------------
>>>>    1 file changed, 10 insertions(+), 22 deletions(-)
>>>>
>>>> diff --git a/xen/arch/arm/irq.c b/xen/arch/arm/irq.c
>>>> index c51cf333ce..3877657a52 100644
>>>> --- a/xen/arch/arm/irq.c
>>>> +++ b/xen/arch/arm/irq.c
>>>> @@ -199,6 +199,7 @@ int request_irq(unsigned int irq, unsigned int
>>>> irqflags,
>>>>    void do_IRQ(struct cpu_user_regs *regs, unsigned int irq, int is_fiq)
>>>>    {
>>>>        struct irq_desc *desc = irq_to_desc(irq);
>>>> +    struct irqaction *action;
>>>>          perfc_incr(irqs);
>>>>    @@ -242,35 +243,22 @@ void do_IRQ(struct cpu_user_regs *regs, unsigned
>>>> int irq, int is_fiq)
>>>>            goto out_no_end;
>>>>        }
>>>>    -    set_bit(_IRQ_PENDING, &desc->status);
>>>> -
>>>> -    /*
>>>> -     * Since we set PENDING, if another processor is handling a different
>>>> -     * instance of this same irq, the other processor will take care of
>>>> it.
>>>> -     */
>>>> -    if ( test_bit(_IRQ_DISABLED, &desc->status) ||
>>>> -         test_bit(_IRQ_INPROGRESS, &desc->status) )
>>>> +    if ( test_bit(_IRQ_DISABLED, &desc->status) )
>>>>            goto out;
>>>
>>> It is a good idea to remove the IRQ_PENDING logic, that is OK.
>>>
>>>
>>> However, are we sure that we want to remove the _IRQ_INPROGRESS check
>>> too? IRQ handlers shouldn't be called twice in a row. Given that
>>> _IRQ_INPROGRESS can be set manually (gicv2_set_active_state) it seems it
>>> would be a good idea to keep the check anyway?
>>
>> set_active_state is only used by the vGIC to replicate state from of the
>> virtual interrupt to the physical interrupt. We don't have the virtual
>> interrupt in this path (see above).
>>
>> Any other user (e.g interrupts routed to Xen) would be pretty broken. At best
>> you would break the interrupt flow. At worst, you may never receive the
>> interrupt again.
>>
>> So I think we can drop _IRQ_PROGRESS here.
> 
> I gave it a close look. You are right, it is safe to remove the
> _IRQ_PROGRESS check here.
> 
> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
> 
> 
> The thing that worries me a bit is that technically set_active_state is
> part of the gic_hw_operations functions which are not necessarily guest
> specific: we haven't written down anywhere that set_active_state cannot
> be called passing one of the xen irqs as parameter. I agree it would be
> broken to do so, but still... Maybe we should add a comment?

How about adding an ASSERT(test_bit(_IRQ_GUEST, &desc->status)) ?

Cheers,

-- 
Julien Grall

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

  parent reply	other threads:[~2019-04-17 17:24 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-28 15:59 [PATCH for-next] xen/arm: irq: Don't use _IRQ_PENDING when handling host interrupt Julien Grall
2019-03-19 23:28 ` Julien Grall
2019-04-05 14:16 ` Andrii Anisov
2019-04-05 14:16   ` [Xen-devel] " Andrii Anisov
2019-04-05 14:34   ` Julien Grall
2019-04-05 14:34     ` [Xen-devel] " Julien Grall
2019-04-05 14:59     ` Andrii Anisov
2019-04-05 14:59       ` [Xen-devel] " Andrii Anisov
2019-04-16 21:51 ` Stefano Stabellini
2019-04-16 21:51   ` [Xen-devel] " Stefano Stabellini
2019-04-16 22:07   ` Julien Grall
2019-04-16 22:07     ` [Xen-devel] " Julien Grall
2019-04-17 17:12     ` Stefano Stabellini
2019-04-17 17:12       ` [Xen-devel] " Stefano Stabellini
2019-04-17 17:24       ` Julien Grall [this message]
2019-04-17 17:24         ` Julien Grall
2019-04-17 17:27         ` Stefano Stabellini
2019-04-17 17:27           ` [Xen-devel] " Stefano Stabellini
2019-05-20 15:15           ` Julien Grall
2019-05-20 15:15             ` [Xen-devel] " Julien Grall
2019-05-20 21:04             ` Stefano Stabellini
2019-05-20 21:04               ` [Xen-devel] " Stefano Stabellini
2019-05-21 10:11               ` Julien Grall
2019-05-21 10:11                 ` [Xen-devel] " Julien Grall

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=d36567cd-7c3e-3921-0355-77c55559d61b@arm.com \
    --to=julien.grall@arm.com \
    --cc=andre.przywara@arm.com \
    --cc=andrii.anisov@gmail.com \
    --cc=sstabellini@kernel.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 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).