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
next prev 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).