All of lore.kernel.org
 help / color / mirror / Atom feed
From: Julien Grall <julien.grall@linaro.org>
To: Ian Campbell <Ian.Campbell@citrix.com>,
	Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: xen-devel@lists.xenproject.org, stefano.stabellini@citrix.com,
	tim@xen.org
Subject: Re: [RFC 06/19] xen/arm: Implement hypercall PHYSDEVOP_map_pirq
Date: Thu, 03 Jul 2014 13:02:33 +0100	[thread overview]
Message-ID: <53B54659.9090809@linaro.org> (raw)
In-Reply-To: <1404386851.17859.11.camel@kazak.uk.xensource.com>

On 07/03/2014 12:27 PM, Ian Campbell wrote:
> On Thu, 2014-06-19 at 13:29 +0100, Stefano Stabellini wrote:
>> On Thu, 19 Jun 2014, Julien Grall wrote:
>>> On 06/18/2014 08:24 PM, Stefano Stabellini wrote:
>>>>>  /*
>>>>> diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c
>>>>> index e451324..c18b2ca 100644
>>>>> --- a/xen/arch/arm/vgic.c
>>>>> +++ b/xen/arch/arm/vgic.c
>>>>> @@ -82,10 +82,7 @@ int domain_vgic_init(struct domain *d)
>>>>>      /* Currently nr_lines in vgic and gic doesn't have the same meanings
>>>>>       * Here nr_lines = number of SPIs
>>>>>       */
>>>>> -    if ( is_hardware_domain(d) )
>>>>> -        d->arch.vgic.nr_lines = gic_number_lines() - 32;
>>>>> -    else
>>>>> -        d->arch.vgic.nr_lines = 0; /* We don't need SPIs for the guest */
>>>>> +    d->arch.vgic.nr_lines = gic_number_lines() - 32;
>>>>>  
>>>>>      d->arch.vgic.shared_irqs =
>>>>>          xzalloc_array(struct vgic_irq_rank, DOMAIN_NR_RANKS(d));
>>>>
>>>> I see what you mean about virq != pirq.
>>>>
>>>> It seems to me that setting d->arch.vgic.nr_lines = gic_number_lines() -
>>>> 32 for the hardware domain is OK, but it is really a waste for the
>>>> others. We could find a way to pass down the info about how many SPIs we
>>>> need from libxl. Or we could delay the vgic allocations until the first
>>>> SPI is assigned to the domU.
>>>
>>> I gave a check on both midway and the versatile express and there is
>>> about 200 lines.
>>>
>>> It make the overhead of less than 8K per domain. Which is not too bad.
>>>
>>> If the host really support 1024 IRQs that would make an overhead of ~32K.
>>>
>>>> Similarly to the MMIO hole sizing, I don't think that it would be a
>>>> requirement for this patch series but it is something to keep in mind.
>>>
>>> Handling virq != pirq will be more complex as we need to take into
>>> account of the hotplug solution.
> 
> What's the issue here? Something to do with irqdesc->irq-pending lookup?
> 
> Seems like irqdesc needs to store the domain and virq number when the
> irq is passed through. I assume it must store the dmain already.

The issues are mostly:
	- we need to defer the vGIC IRQs allocation
	- Add a new hypercall to setup the number of IRQs
	- How do we handle hotplug?

>>> The vgic has a register which provide the number of lines, I suspect
>>> this number can't grow up while the guest is running.
>>
>> Of course not. But keep in mind that for non-PCI passthrough we would be
>> fully aware of all the assigned interrupts before starting the VM.
> 
> Are we ruling out hotplug of such devices? (I don't have a problem with
> that BTW)
> 
>> PCI passthrough and MSI-X are the issue because there can be many MSI
>> per device and the device can be hotplugged into the guest.
> 
> MSI(-X) AKA LPIs are in a different more dynamic number space though
> (from 8192 onwards). I think for that specific case we can dynamically
> do things.
> 
> The bigger issue would be the legacy INT-x interrupts (which I expect
> look like SPIs), those would no doubt need exposing somehow.

INT-x is shared between different PCI and this will means lots of rework
in the interrupt code (mostly now with the no maintenance interrupt
series). I hope we won't have to handle them.

> Do we think it is the case that we are eventually going to need a guest
> cfg option pci = 0|1? I think the answer is yes. Assinging a pci device
> would cause pci=1, or you can set pci=1 to enable hotplug of pci devices
> later (i.e. mmio space is reserved, INTx interrupts are assigned etc).

I'm not sure to understand what we would need a "pci" cfg option... For
now, this series doesn't aim to support PCI. So I think we could defer
this problem later.

-- 
Julien Grall

  reply	other threads:[~2014-07-03 12:02 UTC|newest]

Thread overview: 122+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-16 16:17 [RFC 00/19] xe/arm: Add support for non-pci passthrough Julien Grall
2014-06-16 16:17 ` [RFC 01/19] xen/arm: guest_physmap_remove_page: Print a warning if we fail to unmap the page Julien Grall
2014-06-18 15:03   ` Stefano Stabellini
2014-07-03 10:52   ` Ian Campbell
2014-07-03 11:17     ` Julien Grall
2014-06-16 16:17 ` [RFC 02/19] xen: guestcopy: Provide an helper to copy string from guest Julien Grall
2014-06-17  8:01   ` Jan Beulich
2014-06-17  9:09     ` Julien Grall
2014-06-17  9:17       ` Jan Beulich
2014-06-17  9:23         ` Julien Grall
2014-06-17 22:43           ` Daniel De Graaf
2014-06-18 11:59             ` Jan Beulich
2014-06-18 12:22               ` Julien Grall
2014-06-18 12:49                 ` Jan Beulich
2014-06-18 12:53                   ` Julien Grall
2014-06-18 13:01                     ` Jan Beulich
2014-06-24 14:58                       ` Julien Grall
2014-06-16 16:17 ` [RFC 03/19] xen/arm: follow-up to allow DOM0 manage IRQ and MMIO Julien Grall
2014-06-18 20:21   ` Stefano Stabellini
2014-06-18 20:32     ` Julien Grall
2014-07-03 11:02       ` Ian Campbell
2014-07-03 11:23         ` Julien Grall
2014-07-03 12:12           ` Ian Campbell
2014-06-16 16:17 ` [RFC 04/19] xen/arm: route_irq_to_guest: Check validity of the IRQ Julien Grall
2014-06-18 18:52   ` Stefano Stabellini
2014-06-18 19:03     ` Julien Grall
2014-07-03 11:04   ` Ian Campbell
2014-07-03 11:47     ` Julien Grall
2014-06-16 16:17 ` [RFC 05/19] xen/arm: Release IRQ routed to a domain when it's destroying Julien Grall
2014-06-18 18:08   ` Stefano Stabellini
2014-06-18 18:26     ` Julien Grall
2014-06-18 18:48       ` Stefano Stabellini
2014-06-18 18:54         ` Julien Grall
2014-06-18 19:06           ` Stefano Stabellini
2014-06-18 19:09             ` Julien Grall
2014-06-16 16:17 ` [RFC 06/19] xen/arm: Implement hypercall PHYSDEVOP_map_pirq Julien Grall
2014-06-18 19:24   ` Stefano Stabellini
2014-06-19 11:39     ` Julien Grall
2014-06-19 12:29       ` Stefano Stabellini
2014-07-03 11:27         ` Ian Campbell
2014-07-03 12:02           ` Julien Grall [this message]
2014-07-03 12:53             ` Ian Campbell
2014-07-15 13:01               ` Julien Grall
2014-07-15 13:03                 ` Ian Campbell
2014-08-18 19:20                   ` Andrii Tseglytskyi
2014-08-18 21:55                     ` Julien Grall
2014-08-19  9:11                       ` Andrii Tseglytskyi
2014-08-19 14:24                         ` Julien Grall
2014-06-16 16:17 ` [RFC 07/19] xen/dts: Use unsigned int for MMIO and IRQ index Julien Grall
2014-06-18 18:54   ` Stefano Stabellini
2014-06-19 11:42     ` Julien Grall
2014-06-16 16:17 ` [RFC 08/19] xen/dts: Provide an helper to get a DT node from a path provided by a guest Julien Grall
2014-07-03 11:30   ` Ian Campbell
2014-07-03 11:49     ` Julien Grall
2014-07-03 12:13       ` Ian Campbell
2014-07-03 12:22         ` Julien Grall
2014-06-16 16:17 ` [RFC 09/19] xen/dts: Add hypercalls to retrieve device node information Julien Grall
2014-06-18 19:38   ` Stefano Stabellini
2014-06-19 11:58     ` Julien Grall
2014-06-19 12:21       ` Stefano Stabellini
2014-06-19 12:25         ` Julien Grall
2014-07-03 11:40           ` Ian Campbell
2014-06-24  8:46       ` Christoffer Dall
2014-07-03 11:34       ` Ian Campbell
2014-07-03 11:33   ` Ian Campbell
2014-07-03 11:51     ` Julien Grall
2014-07-03 12:13       ` Ian Campbell
2014-06-16 16:17 ` [RFC 10/19] xen/passthrough: Introduce iommu_buildup Julien Grall
2014-07-03 11:45   ` Ian Campbell
2014-07-03 11:55     ` Julien Grall
2014-06-16 16:17 ` [RFC 11/19] xen/passthrough: Call arch_iommu_domain_destroy before calling iommu_teardown Julien Grall
2014-06-17  8:07   ` Jan Beulich
2014-06-17  9:18     ` Julien Grall
2014-06-17  9:29       ` Jan Beulich
2014-06-17 12:38         ` Julien Grall
2014-06-17 13:04           ` Jan Beulich
2014-06-18 12:24             ` Julien Grall
2014-06-18 12:50               ` Jan Beulich
2014-06-16 16:17 ` [RFC 12/19] xen/passthrough: iommu_deassign_device_dt: By default reassign device to nobody Julien Grall
2014-06-18 19:28   ` Stefano Stabellini
2014-07-03 11:48   ` Ian Campbell
2014-07-03 12:07     ` Julien Grall
2014-07-03 12:53       ` Ian Campbell
2014-07-03 13:01         ` Julien Grall
2014-07-03 13:42           ` Ian Campbell
2014-07-03 13:51             ` Julien Grall
2014-07-03 14:04               ` Ian Campbell
2014-07-03 14:09                 ` Julien Grall
2014-06-16 16:18 ` [RFC 13/19] xen/iommu: arm: Wire iommu DOMCTL for ARM Julien Grall
2014-06-17  8:24   ` Jan Beulich
2014-06-17 13:05     ` Julien Grall
2014-06-16 16:18 ` [RFC 14/19] xen/passthrough: dt: Add new domctl XEN_DOMCTL_assign_dt_device Julien Grall
2014-06-17  8:34   ` Jan Beulich
2014-06-17 13:23     ` Julien Grall
2014-06-17 13:30       ` Jan Beulich
2014-06-17 13:48         ` Julien Grall
2014-06-17 13:55           ` Jan Beulich
2014-07-03 11:54             ` Ian Campbell
2014-06-16 16:18 ` [RFC 15/19] xen/arm: Reserve region in guest memory for device passthrough Julien Grall
2014-06-18 15:12   ` Stefano Stabellini
2014-06-18 15:23     ` Julien Grall
2014-06-18 15:26       ` Ian Campbell
2014-06-18 17:48         ` Stefano Stabellini
2014-06-18 17:54           ` Julien Grall
2014-06-18 18:14             ` Stefano Stabellini
2014-06-18 18:33               ` Julien Grall
2014-06-18 18:55                 ` Stefano Stabellini
2014-07-03 11:56                 ` Ian Campbell
2014-06-16 16:18 ` [RFC 16/19] libxl/arm: Introduce DT_IRQ_TYPE_* Julien Grall
2014-07-03 11:56   ` Ian Campbell
2014-06-16 16:18 ` [RFC 17/19] libxl/arm: Rename set_interrupt_ppi to set_interrupt and handle SPIs Julien Grall
2014-07-03 11:58   ` Ian Campbell
2014-07-03 12:04     ` Julien Grall
2014-07-03 14:04       ` Ian Campbell
2014-06-16 16:18 ` [RFC 18/19] libxl: Add support for non-PCI passthrough Julien Grall
2014-06-16 17:19   ` Wei Liu
2014-06-18 12:26     ` Julien Grall
2014-06-16 16:18 ` [RFC 19/19] xl: Add new option dtdev Julien Grall
2014-06-16 17:19   ` Wei Liu
2014-06-18 13:40     ` Julien Grall
2014-06-18 13:43       ` Wei Liu
2014-06-18 13:46         ` 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=53B54659.9090809@linaro.org \
    --to=julien.grall@linaro.org \
    --cc=Ian.Campbell@citrix.com \
    --cc=stefano.stabellini@citrix.com \
    --cc=stefano.stabellini@eu.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.