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 v3 12/24] xen/arm: Release IRQ routed to a domain when it's destroying
Date: Fri, 20 Feb 2015 17:41:27 +0000 [thread overview]
Message-ID: <54E771C7.4000003@linaro.org> (raw)
In-Reply-To: <1424449912.30924.346.camel@citrix.com>
Hi Ian,
On 20/02/15 16:31, Ian Campbell wrote:
> On Tue, 2015-01-13 at 14:25 +0000, Julien Grall wrote:
>
>> Futhermore, a guest can crash and let the IRQ in an incorrect state (i.e has
>
> "Furthermore" (I think your finger macros have this one wrong, you might
> want to grep the series ;-))
I do this mistake every-time. I will check this series (and upcoming series)
>
>> + /* TODO: Handle eviction from LRs. For now, deny remove if the IRQ
>> + * is inflight and not disabled.
>
> If we are ungracefully killing a guest doesn't this risk ending up with
> an undestroyable domain? i.e. if the guest is paused with an inflight
> IRQ and then destroyed, how does the inflight IRQ ever become
> not-inflight again? A similar argument could apply if the guest has e.g.
> crashed, paniced or is otherwise not processing any more interrupts or
> generating EOIs for existing ones.
No, this will fall on the "is_dying" part. During domain destruction,
the hypervisor will release all the IRQ still assigned to the guest one
by one.
> We need to be able to kill a guest in such a state somehow.
The TODO is here for running domain where we try to deassign an inflight
IRQ.
> (BTW, I notice the comment style is consistently wrong through the
> series)
I will check all the patches.
>> + /* Only SPIs are supported */
>> + if ( virq < 32 || virq >= vgic_num_irqs(d) )
>> + return -EINVAL;
>> +
>> + p = irq_to_pending(d->vcpu[0], virq);
>> + if ( !p->desc )
>> + return -EINVAL;
>
> Are we seeing this pattern a lot? It seems so, I wonder if a helper
> could be useful:
> p = spi_to_pending(d, virq);
> if ( !p->desc )
> return -EINVAL;
>
> with the < 32 check etc in the helper where it only needs commenting on
> once.
IIRC, there is only 2 places. I will replace it by an helper.
>> +
>> + desc = p->desc;
>> +
>> + spin_lock_irqsave(&desc->lock, flags);
>> +
>> + ret = -EINVAL;
>> + if ( !test_bit(_IRQ_GUEST, &desc->status) )
>> + goto unlock;
>> +
>> + ret = -EINVAL;
>
> A bit redundant, or should nestle the info = like you did above with the
> test_bit.
I will invert it.
>> + info = irq_get_guest_info(desc);
>> + if ( d != info->d )
>> + goto unlock;
>> +
>> + ret = gic_remove_irq_from_guest(d, virq, desc);
>> +
>> + spin_unlock_irqrestore(&desc->lock, flags);
>> +
>> + if ( !ret )
>
> This is a bit unconventional (it looks essentially like you have three
> exit paths, with this extra special success case and two error cases).
>
> It would better if the gic_remove_irq_from_guest failure case went to
> unlock like all the other failure cases, then the success path would be
> a straight line.
>
> (yes, that would mean a goto unlock right before the first spin_unlock,
> but the code flow would be clearer).
I will do.
>
>> + {
>> + release_irq(desc->irq, info);
>> + xfree(info);
>> + }
>> +
>> + return ret;
>> +
>> +unlock:
>> + spin_unlock_irqrestore(&desc->lock, flags);
>> +
>> + return ret;
>> +}
>> +
>> /*
>> * pirq event channels. We don't use these on ARM, instead we use the
>> * features of the GIC to inject virtualised normal interrupts.
>> diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c
>> index fc8a270..4ddfd73 100644
>> --- a/xen/arch/arm/vgic.c
>> +++ b/xen/arch/arm/vgic.c
>> @@ -133,6 +133,22 @@ void register_vgic_ops(struct domain *d, const struct vgic_ops *ops)
>>
>> void domain_vgic_free(struct domain *d)
>> {
>> + int i;
>> + int ret;
>> +
>> + for ( i = 0; i < (d->arch.vgic.nr_spis); i++ )
>> + {
>> + struct pending_irq *p = &d->arch.vgic.pending_irqs[i];
>
> Is there not a helper for this lookup? If so it should be used.
The irq_pending code is adding extra-check. But I guess we don't care
for domain destruction?
Regards,
--
Julien Grall
next prev parent reply other threads:[~2015-02-20 17:41 UTC|newest]
Thread overview: 251+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-13 14:25 [PATCH v3 00/24] xen/arm: Add support for non-pci passthrough Julien Grall
2015-01-13 14:25 ` [PATCH v3 01/24] xen: Extend DOMCTL createdomain to support arch configuration Julien Grall
2015-01-13 15:08 ` Daniel De Graaf
2015-01-19 16:46 ` Jan Beulich
2015-01-20 12:40 ` Julien Grall
2015-01-28 15:50 ` Stefano Stabellini
2015-02-20 15:15 ` Ian Campbell
2015-02-20 16:09 ` Julien Grall
2015-02-20 16:37 ` Jan Beulich
2015-02-23 15:09 ` Ian Campbell
2015-02-20 16:35 ` Jan Beulich
2015-02-23 15:48 ` Andrew Cooper
2015-02-23 16:00 ` Ian Campbell
2015-02-23 21:48 ` Julien Grall
2015-02-24 10:06 ` Ian Campbell
2015-01-13 14:25 ` [PATCH v3 02/24] xen/arm: Divide GIC initialization in 2 parts Julien Grall
2015-01-28 16:09 ` Stefano Stabellini
2015-02-20 15:19 ` Ian Campbell
2015-02-20 15:19 ` Ian Campbell
2015-01-13 14:25 ` [PATCH v3 03/24] xen/dts: Allow only IRQ translation that are mapped to main GIC Julien Grall
2015-01-28 16:11 ` Stefano Stabellini
2015-02-20 15:20 ` Ian Campbell
2015-01-13 14:25 ` [PATCH v3 04/24] xen: guestcopy: Provide an helper to safely copy string from guest Julien Grall
2015-01-13 15:10 ` Daniel De Graaf
2015-01-19 16:51 ` Jan Beulich
2015-01-20 12:45 ` Julien Grall
2015-01-20 13:16 ` Jan Beulich
2015-02-20 15:22 ` Ian Campbell
2015-01-13 14:25 ` [PATCH v3 05/24] xen/arm: vgic: Introduce a function to initialize pending_irq Julien Grall
2015-02-20 15:24 ` Ian Campbell
2015-01-13 14:25 ` [PATCH v3 06/24] xen/arm: Map disabled device in DOM0 Julien Grall
2015-01-28 16:18 ` Stefano Stabellini
2015-01-28 16:23 ` Julien Grall
2015-01-29 11:41 ` Stefano Stabellini
2015-02-20 15:27 ` Ian Campbell
2015-01-13 14:25 ` [PATCH v3 07/24] xen/arm: Introduce xen, passthrough property Julien Grall
2015-01-28 16:36 ` Stefano Stabellini
2015-01-28 16:53 ` Julien Grall
2015-01-29 11:43 ` Stefano Stabellini
2015-02-20 15:38 ` Ian Campbell
2015-02-20 17:01 ` Julien Grall
2015-02-23 15:12 ` Ian Campbell
2015-02-23 15:43 ` Julien Grall
2015-02-20 15:42 ` Ian Campbell
2015-02-20 17:03 ` Julien Grall
2015-02-23 15:15 ` Ian Campbell
2015-02-23 15:44 ` Julien Grall
2015-01-13 14:25 ` [PATCH v3 08/24] xen/arm: Allow virq != irq Julien Grall
2015-01-28 16:47 ` Stefano Stabellini
2015-01-28 16:56 ` Julien Grall
2015-01-28 17:00 ` Julien Grall
2015-01-29 11:50 ` Stefano Stabellini
2015-02-20 15:52 ` Ian Campbell
2015-02-20 17:09 ` Julien Grall
2015-02-27 14:33 ` Julien Grall
2015-02-27 14:44 ` Ian Campbell
2015-02-27 15:55 ` Julien Grall
2015-02-27 14:25 ` Julien Grall
2015-01-13 14:25 ` [PATCH v3 09/24] xen/arm: route_irq_to_guest: Check validity of the IRQ Julien Grall
2015-01-28 17:55 ` Stefano Stabellini
2015-01-28 18:05 ` Julien Grall
2015-01-29 11:52 ` Stefano Stabellini
2015-02-20 16:00 ` Ian Campbell
2015-02-20 17:21 ` Julien Grall
2015-01-13 14:25 ` [PATCH v3 10/24] xen/arm: gic: Add sanity checks gic_route_irq_to_guest Julien Grall
2015-01-28 18:15 ` Stefano Stabellini
2015-02-20 16:07 ` Ian Campbell
2015-02-20 17:28 ` Julien Grall
2015-02-23 15:20 ` Ian Campbell
2015-02-23 15:47 ` Julien Grall
2015-02-23 15:52 ` Ian Campbell
2015-02-23 15:54 ` Julien Grall
2015-02-23 16:04 ` Ian Campbell
2015-01-13 14:25 ` [PATCH v3 11/24] xen/arm: Let the toolstack configure the number of SPIs Julien Grall
2015-01-28 18:26 ` Stefano Stabellini
2015-01-28 18:58 ` Julien Grall
2015-01-29 12:01 ` Stefano Stabellini
2015-01-29 12:14 ` Julien Grall
2015-02-20 16:08 ` Ian Campbell
2015-02-20 17:29 ` Julien Grall
2015-02-23 15:22 ` Ian Campbell
2015-02-23 15:48 ` Julien Grall
2015-02-20 16:23 ` Ian Campbell
2015-02-20 17:31 ` Julien Grall
2015-01-13 14:25 ` [PATCH v3 12/24] xen/arm: Release IRQ routed to a domain when it's destroying Julien Grall
2015-01-28 18:38 ` Stefano Stabellini
2015-02-20 16:31 ` Ian Campbell
2015-02-20 17:41 ` Julien Grall [this message]
2015-02-23 15:25 ` Ian Campbell
2015-02-23 15:49 ` Julien Grall
2015-03-03 12:50 ` Julien Grall
2015-01-13 14:25 ` [PATCH v3 13/24] xen/arm: Implement hypercall PHYSDEVOP_{, un}map_pirq Julien Grall
2015-01-19 16:54 ` Jan Beulich
2015-01-20 14:01 ` Julien Grall
2015-01-28 18:52 ` Stefano Stabellini
2015-01-28 19:04 ` Julien Grall
2015-01-29 12:17 ` Stefano Stabellini
2015-01-29 12:26 ` Julien Grall
2015-01-29 12:33 ` Stefano Stabellini
2015-02-20 16:53 ` Ian Campbell
2015-02-23 9:33 ` Jan Beulich
2015-02-23 15:28 ` Ian Campbell
2015-02-23 15:53 ` Julien Grall
2015-02-23 16:04 ` Ian Campbell
2015-02-23 16:11 ` Julien Grall
2015-02-23 16:34 ` Ian Campbell
2015-02-23 21:54 ` Julien Grall
2015-02-23 16:22 ` Jan Beulich
2015-02-23 15:51 ` Julien Grall
2015-02-23 16:02 ` Ian Campbell
2015-03-04 14:37 ` Julien Grall
2015-03-04 14:55 ` Jan Beulich
2015-03-04 14:56 ` Julien Grall
2015-01-13 14:25 ` [PATCH v3 14/24] xen/dts: Use unsigned int for MMIO and IRQ index Julien Grall
2015-02-20 16:55 ` Ian Campbell
2015-02-23 15:57 ` Julien Grall
2015-01-13 14:25 ` [PATCH v3 15/24] xen/dts: Provide an helper to get a DT node from a path provided by a guest Julien Grall
2015-02-20 16:56 ` Ian Campbell
2015-02-20 17:43 ` Julien Grall
2015-02-23 15:29 ` Ian Campbell
2015-02-23 15:30 ` Ian Campbell
2015-02-23 16:01 ` Julien Grall
2015-02-23 16:27 ` Ian Campbell
2015-03-10 13:58 ` Julien Grall
2015-03-11 12:34 ` Ian Campbell
2015-03-19 14:53 ` Julien Grall
2015-01-13 14:25 ` [PATCH v3 16/24] xen/passthrough: Introduce iommu_construct Julien Grall
2015-01-19 17:02 ` Jan Beulich
2015-01-20 14:28 ` Julien Grall
2015-01-20 16:40 ` Jan Beulich
2015-01-20 17:11 ` Julien Grall
2015-01-21 10:23 ` Jan Beulich
2015-01-21 10:37 ` Julien Grall
2015-01-21 10:48 ` Jan Beulich
2015-01-21 12:13 ` Julien Grall
2015-01-21 14:13 ` Jan Beulich
2015-01-21 14:22 ` Julien Grall
2015-01-21 14:29 ` Jan Beulich
2015-02-20 16:58 ` Ian Campbell
2015-02-20 17:45 ` Julien Grall
2015-02-23 15:31 ` Ian Campbell
2015-02-23 16:04 ` Julien Grall
2015-01-13 14:25 ` [PATCH v3 17/24] xen/passthrough: arm: release earlier the DT devices assigned to a guest Julien Grall
2015-01-20 9:19 ` Jan Beulich
2015-01-20 14:30 ` Julien Grall
2015-01-20 16:42 ` Jan Beulich
2015-01-28 18:59 ` Stefano Stabellini
2015-02-20 17:03 ` Ian Campbell
2015-02-20 17:46 ` Julien Grall
2015-02-23 9:37 ` Jan Beulich
2015-02-23 15:33 ` Ian Campbell
2015-02-23 16:22 ` Jan Beulich
2015-01-13 14:25 ` [PATCH v3 18/24] xen/passthrough: iommu_deassign_device_dt: By default reassign device to nobody Julien Grall
2015-01-20 9:21 ` Jan Beulich
2015-01-20 14:31 ` Julien Grall
2015-01-29 10:20 ` Stefano Stabellini
2015-02-20 17:04 ` Ian Campbell
2015-02-23 9:40 ` Jan Beulich
2015-02-23 10:10 ` Julien Grall
2015-02-23 10:20 ` Jan Beulich
2015-02-23 15:39 ` Ian Campbell
2015-02-23 16:24 ` Jan Beulich
2015-02-23 16:35 ` Ian Campbell
2015-02-23 16:37 ` Julien Grall
2015-02-23 16:47 ` Jan Beulich
2015-02-23 16:54 ` Julien Grall
2015-02-23 10:10 ` Julien Grall
2015-02-23 15:34 ` Ian Campbell
2015-03-10 15:29 ` Julien Grall
2015-03-11 12:35 ` Ian Campbell
2015-03-19 15:07 ` Julien Grall
2015-01-13 14:25 ` [PATCH v3 19/24] xen/iommu: arm: Wire iommu DOMCTL for ARM Julien Grall
2015-01-20 9:22 ` Jan Beulich
2015-01-20 14:32 ` Julien Grall
2015-02-20 17:06 ` Ian Campbell
2015-01-13 14:25 ` [PATCH v3 20/24] xen/passthrough: Extend XEN_DOMCTL_assign_device to support DT device Julien Grall
2015-01-20 9:34 ` Jan Beulich
2015-01-20 14:37 ` Julien Grall
2015-01-20 16:43 ` Jan Beulich
2015-01-29 10:29 ` Stefano Stabellini
2015-01-29 10:37 ` Jan Beulich
2015-01-29 11:40 ` Julien Grall
2015-01-29 10:29 ` Stefano Stabellini
2015-01-29 11:45 ` Julien Grall
2015-01-29 12:09 ` Stefano Stabellini
2015-01-29 13:09 ` Julien Grall
2015-01-29 15:03 ` Stefano Stabellini
2015-01-29 15:14 ` Julien Grall
2015-02-20 17:17 ` Ian Campbell
2015-02-23 16:25 ` Daniel De Graaf
2015-03-10 16:52 ` Julien Grall
2015-03-10 22:45 ` Daniel De Graaf
2015-03-10 23:07 ` Julien Grall
2015-03-10 23:39 ` Daniel De Graaf
2015-03-11 12:30 ` Julien Grall
2015-03-11 8:53 ` Jan Beulich
2015-03-11 12:15 ` Julien Grall
2015-03-11 12:23 ` Ian Campbell
2015-03-11 12:35 ` Julien Grall
2015-03-11 12:45 ` Jan Beulich
2015-03-10 16:33 ` Julien Grall
2015-03-11 12:37 ` Ian Campbell
2015-03-11 13:50 ` Julien Grall
2015-03-11 13:55 ` Ian Campbell
2015-03-11 14:03 ` Jan Beulich
2015-03-11 14:11 ` Julien Grall
2015-03-13 16:47 ` Julien Grall
2015-01-13 14:25 ` [PATCH v3 21/24] tools/(lib)xl: Add partial device tree support for ARM Julien Grall
2015-01-29 11:03 ` Stefano Stabellini
2015-01-29 12:02 ` Julien Grall
2015-01-29 12:26 ` Stefano Stabellini
2015-02-23 11:31 ` Ian Campbell
2015-02-23 11:46 ` Ian Campbell
2015-02-23 17:06 ` Julien Grall
2015-02-23 17:22 ` Ian Campbell
2015-03-17 13:32 ` Julien Grall
2015-02-23 12:03 ` Ian Jackson
2015-02-23 12:44 ` Ian Jackson
2015-02-23 18:43 ` Julien Grall
2015-02-23 19:12 ` Ian Jackson
2015-01-13 14:25 ` [PATCH v3 22/24] tools/libxl: arm: Use an higher value for the GIC phandle Julien Grall
2015-01-29 11:07 ` Stefano Stabellini
2015-01-29 12:05 ` Julien Grall
2015-01-29 12:28 ` Stefano Stabellini
2015-01-29 13:48 ` Julien Grall
2015-01-29 15:04 ` Stefano Stabellini
2015-01-29 15:12 ` Julien Grall
2015-02-23 14:36 ` Ian Campbell
2015-02-23 22:02 ` Julien Grall
2015-02-24 10:08 ` Ian Campbell
2015-03-18 14:14 ` Julien Grall
2015-01-13 14:25 ` [PATCH v3 23/24] libxl: Add support for non-PCI passthrough Julien Grall
2015-01-29 11:12 ` Stefano Stabellini
2015-01-29 12:08 ` Julien Grall
2015-01-29 12:31 ` Stefano Stabellini
2015-01-29 13:51 ` Julien Grall
2015-02-23 14:41 ` Ian Campbell
2015-02-23 14:42 ` Ian Campbell
2015-01-13 14:25 ` [PATCH v3 24/24] xl: Add new option dtdev Julien Grall
2015-01-29 11:18 ` Stefano Stabellini
2015-01-29 12:09 ` Julien Grall
2015-01-29 12:32 ` Stefano Stabellini
2015-01-29 13:51 ` Julien Grall
2015-01-29 15:06 ` Stefano Stabellini
2015-02-23 14:44 ` Ian Campbell
2015-02-23 14:45 ` Ian Campbell
2015-02-23 22:03 ` Julien Grall
2015-02-24 10:07 ` Ian Campbell
2015-01-13 17:56 ` [PATCH v3 00/24] xen/arm: Add support for non-pci passthrough Julien Grall
2015-02-20 17:18 ` Ian Campbell
2015-02-20 17:47 ` 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=54E771C7.4000003@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.