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 05/21] xen/arm: follow-up to allow DOM0 manage IRQ and MMIO
Date: Thu, 11 Sep 2014 15:32:22 -0700 [thread overview]
Message-ID: <541222F6.1070406@linaro.org> (raw)
In-Reply-To: <1410268043.8217.173.camel@kazak.uk.xensource.com>
Hi Ian,
On 09/09/14 06:07, Ian Campbell wrote:
> On Thu, 2014-07-31 at 16:00 +0100, Julien Grall wrote:
>
> Please make the subject line reflect what this patches function is, not
> that it is a follow up to some other patch.
>> The commit 33233c2 "arch/arm: domain build: let dom0 access I/O memory of
>> mapped series" fill the iomem_caps to allow DOM0 managing MMIO of mapped
>> device.
>
> "fills in ... to allow DOM0 to manage MMIO of mapped devices" (I think
> that is what was meant")
Yes, I will change in the next version.
>>
>> A device can be disabled (i.e by adding a property status="disabled" in the
>> device tree) because the user may want to passthrough this device to a guest.
>> This will avoid DOM0 loading (and few minutes after unloading) the driver to
>
> s/after/later/
>
>> handle this device.
>>
>> Even though, we don't want to let DOM0 using this device, the domain needs
>
> "use". And I think s/the domain/it/ since you are referring to DOM0
> (just mentioned, so "it" is fine in the context) not the domain as in
> the guest.
>
>> to be able to manage the MMIO/IRQ range. This will allow the toolstack
>> to map MMIO/IRQ to a guest explicitly via "iomem" and "irqs" VM config
>> property or implicitly by passthrough a device.
>
> "by passing through"
>
>> Rework the function map_device (renamed into handle_device) to:
>>
>> * For a given device node:
>> - Give permission to manage IRQ/MMIO for this device
>> - Retrieve the IRQ configuration (i.e edge/level) from the device
>> tree
>> * For available device (i.e status != disabled in the DT)
>> - Assign the device to the guest if it's protected by an IOMMU
>> - Map the IRQs and MMIOs regions to the guest
>
> So based on that I think a suitable $subject would be something like
> "give domain 0 permission to manage IRQ/MMIO for disabled devices" or
> something like that.
It's a follow-up in the sense that it improves Arianna patch to handle
MMIO and IRQ.
Your suggestion for the title sounds good. I will use it.
> Is it a good idea to override status="disabled" in this way or should be
> add our own xen,passthrough as a boolean DT property?
>
> My concern is that we are also doing this for devices which are disabled
> for some other reason (buggy? security sensitive? not present on this
> partiocular board etc). It also leaves no way to mark a device as "not
> for any domain, including dom0 or passthrough". Quite a few .dtsi files
> define loads of stuff as disabled and then let the board files override
> what they actually have as okay.
>
> So I think keeping status="disabled" as more of a firmware thing and
> having our own for devices which are to be passed through makes sense.
Using status="disabled" was an easy solution because Linux, and most of
the other OS, knows the device should not be used by DOM0.
The current solution doesn't map the device into DOM0 memory but the
device is still described in the device tree. That would let us the
possibility to retrieve from DOM0 the properties/compatible of the
device via a driver (and would avoid the bunch of hypercalls introduced
later).
With the new property "xen,passthrough", we would have to remove the
node from DOM0, or teach DOM0 that the device should not be used.
Overall, I don't think dropping the node in DOM0 device tree will impact
it. If it's the case that would mean the device should not be
passthrough to another guest. So I will give a look to introduce this
new property. Shall I send a patch to the device tree bindings ML?
BTW, I don't think the new property should be a boolean. Use only the
name should be enough here.
> Since I expect the naming of the property isn't going to have a major
> impact on the code itself outside of a few predicate functions I took a
> look and it looks good, apart from a few nits which I'll mention.
>
>> @@ -957,7 +965,7 @@ static int map_device(struct domain *d, struct dt_device_node *dev)
>> }
>> }
>>
>> - /* Map IRQs */
>> + /* Give permission and map IRQs */
>
> double space.
>
>> for ( i = 0; i < nirq; i++ )
>> {
>> res = dt_device_get_raw_irq(dev, i, &rirq);
>> @@ -990,16 +998,28 @@ static int map_device(struct domain *d, struct dt_device_node *dev)
>> irq = res;
>>
>> DPRINT("irq %u = %u\n", i, irq);
>> - res = route_irq_to_guest(d, irq, dt_node_name(dev));
>> +
>> + res = irq_permit_access(d, irq);
>> if ( res )
>> {
>> - printk(XENLOG_ERR "Unable to route IRQ %u to domain %u\n",
>> - irq, d->domain_id);
>> + printk(XENLOG_ERR "Unable to permit to dom%u access to IRQ %u\n",
>> + d->domain_id, irq);
>> return res;
>> }
>> +
>> + if ( available )
>
> if ( !avaiable ) \n continue would save you an indentation level.
Ok.
>> + {
>> + res = route_irq_to_guest(d, irq, dt_node_name(dev));
>> + if ( res )
>> + {
>> + printk(XENLOG_ERR "Unable to route IRQ %u to domain %u\n",
>> + irq, d->domain_id);
>> + return res;
>> + }
>> + }
>> }
>>
>> - /* Map the address ranges */
>> + /* Give permission and map MMIOs */
>
> Permissions are now given above, not below, aren't they?
Only permission for IRQ. The MMIO ones are given few lines below.
>> for ( i = 0; i < naddr; i++ )
>> {
>> res = dt_device_get_address(dev, i, &addr, &size);
>> @@ -1023,17 +1043,21 @@ static int map_device(struct domain *d, struct dt_device_node *dev)
>> addr & PAGE_MASK, PAGE_ALIGN(addr + size) - 1);
>> return res;
>> }
>> - res = map_mmio_regions(d,
>> - paddr_to_pfn(addr & PAGE_MASK),
>> - DIV_ROUND_UP(size, PAGE_SIZE),
>> - paddr_to_pfn(addr & PAGE_MASK));
>> - if ( res )
>> +
>> + if ( available )
>
> if ( !avaiable ) \n continue again.
Ok.
Regards,
--
Julien Grall
next prev parent reply other threads:[~2014-09-11 23:57 UTC|newest]
Thread overview: 119+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-31 15:00 [PATCH v2 00/21] xen/arm: Add support for non-pci passthrough Julien Grall
2014-07-31 15:00 ` [PATCH v2 01/21] xen/common: do not implicitly permit access to mapped I/O memory Julien Grall
2014-07-31 15:22 ` Julien Grall
2014-07-31 15:00 ` [PATCH v2 02/21] xen: guestcopy: Provide an helper to safely copy string from guest Julien Grall
2014-08-01 8:40 ` Jan Beulich
2014-08-06 14:18 ` Julien Grall
2014-09-09 12:52 ` Ian Campbell
2014-09-09 13:17 ` Jan Beulich
2014-09-09 13:40 ` Ian Campbell
2014-08-06 13:56 ` Stefano Stabellini
2014-08-06 14:22 ` Julien Grall
2014-08-06 16:06 ` Daniel De Graaf
2014-07-31 15:00 ` [PATCH v2 03/21] xen/arm: vgic: Rename nr_lines into nr_spis Julien Grall
2014-08-06 13:58 ` Stefano Stabellini
2014-07-31 15:00 ` [PATCH v2 04/21] xen/arm: vgic: Introduce a function to initialize pending_irq Julien Grall
2014-08-06 14:06 ` Stefano Stabellini
2014-08-06 14:52 ` Julien Grall
2014-08-06 14:57 ` Stefano Stabellini
2014-07-31 15:00 ` [PATCH v2 05/21] xen/arm: follow-up to allow DOM0 manage IRQ and MMIO Julien Grall
2014-09-09 13:07 ` Ian Campbell
2014-09-11 22:32 ` Julien Grall [this message]
2014-09-12 10:13 ` Ian Campbell
2014-09-12 19:04 ` Julien Grall
2014-07-31 15:00 ` [PATCH v2 06/21] xen/arm: Allow virq != irq Julien Grall
2014-08-06 14:50 ` Stefano Stabellini
2014-08-06 15:07 ` Julien Grall
2014-08-06 16:48 ` Stefano Stabellini
2014-09-09 13:29 ` Ian Campbell
2014-09-09 18:42 ` Julien Grall
2014-09-11 22:50 ` Julien Grall
2014-09-12 10:13 ` Ian Campbell
2014-09-12 10:19 ` Ian Campbell
2014-07-31 15:00 ` [PATCH v2 07/21] xen/arm: route_irq_to_guest: Check validity of the IRQ Julien Grall
2014-08-06 14:56 ` Stefano Stabellini
2014-07-31 15:00 ` [PATCH v2 08/21] xen/arm: Initialize the virtual GIC later Julien Grall
2014-08-06 15:35 ` Stefano Stabellini
2014-09-09 13:35 ` Ian Campbell
2014-09-09 18:57 ` Julien Grall
2014-09-10 10:08 ` Ian Campbell
2014-09-11 23:01 ` Julien Grall
2014-09-12 10:14 ` Ian Campbell
2014-08-06 17:06 ` Daniel De Graaf
2014-08-29 13:09 ` Andrii Tseglytskyi
2014-08-29 18:57 ` Julien Grall
2014-08-29 19:49 ` Andrii Tseglytskyi
2014-08-29 20:04 ` Julien Grall
2014-08-29 20:14 ` Andrii Tseglytskyi
2014-09-09 13:33 ` Ian Campbell
2014-09-09 19:11 ` Julien Grall
2014-09-10 9:45 ` Andrii Tseglytskyi
2014-09-09 13:37 ` Ian Campbell
[not found] ` <CAAHg+HhhsZonrEDdHET93dy=dR1+YF-VPGJ=VwB20RRxWqdSYA@mail.gmail.com>
2014-10-06 16:04 ` Julien Grall
2014-07-31 15:00 ` [PATCH v2 09/21] xen/arm: Release IRQ routed to a domain when it's destroying Julien Grall
2014-08-06 15:49 ` Stefano Stabellini
2014-08-06 16:01 ` Julien Grall
2014-08-06 16:53 ` Stefano Stabellini
2014-08-06 17:09 ` Julien Grall
2014-08-07 15:36 ` Stefano Stabellini
2014-08-07 15:40 ` Julien Grall
2014-08-07 16:31 ` Stefano Stabellini
2014-08-07 16:35 ` Julien Grall
2014-08-07 16:39 ` Stefano Stabellini
2014-09-09 13:53 ` Ian Campbell
2014-09-09 22:29 ` Stefano Stabellini
2014-07-31 15:00 ` [PATCH v2 10/21] xen/arm: Implement hypercall PHYSDEVOP_{, un}map_pirq Julien Grall
2014-08-06 16:10 ` Stefano Stabellini
2014-08-29 12:34 ` Andrii Tseglytskyi
2014-08-29 19:08 ` Julien Grall
2014-08-29 19:44 ` Andrii Tseglytskyi
2014-07-31 15:00 ` [PATCH v2 11/21] xen/dts: Use unsigned int for MMIO and IRQ index Julien Grall
2014-08-06 16:12 ` Stefano Stabellini
2014-07-31 15:00 ` [PATCH v2 12/21] xen/dts: Provide an helper to get a DT node from a path provided by a guest Julien Grall
2014-09-09 13:55 ` Ian Campbell
2014-07-31 15:00 ` [PATCH v2 13/21] xen/dts: Add hypercalls to retrieve device node information Julien Grall
2014-08-01 8:50 ` Jan Beulich
2014-08-06 15:17 ` Julien Grall
2014-08-06 15:47 ` Jan Beulich
2014-07-31 15:00 ` [PATCH v2 14/21] xen/passthrough: Introduce iommu_construct Julien Grall
2014-08-01 8:55 ` Jan Beulich
2014-07-31 15:00 ` [PATCH v2 15/21] xen/passthrough: Call arch_iommu_domain_destroy before calling iommu_teardown Julien Grall
2014-08-01 9:00 ` Jan Beulich
2014-07-31 15:00 ` [PATCH v2 16/21] xen/passthrough: iommu_deassign_device_dt: By default reassign device to nobody Julien Grall
2014-08-06 16:23 ` Stefano Stabellini
2015-01-12 16:33 ` Julien Grall
2014-07-31 15:00 ` [PATCH v2 17/21] xen/iommu: arm: Wire iommu DOMCTL for ARM Julien Grall
2014-08-06 16:24 ` Stefano Stabellini
2014-07-31 15:00 ` [PATCH v2 18/21] xen/passthrough: dt: Add new domctl XEN_DOMCTL_assign_dt_device Julien Grall
2014-08-01 9:05 ` Jan Beulich
2014-07-31 15:00 ` [PATCH v2 19/21] xen/arm: Reserve region in guest memory for device passthrough Julien Grall
2014-08-06 16:27 ` Stefano Stabellini
2014-08-06 16:33 ` Julien Grall
2014-08-06 16:44 ` Stefano Stabellini
2014-08-06 16:45 ` Stefano Stabellini
2014-08-06 16:55 ` Julien Grall
2014-08-06 16:57 ` Stefano Stabellini
2014-08-06 16:47 ` Julien Grall
2014-07-31 15:00 ` [PATCH v2 20/21] libxl: Add support for non-PCI passthrough Julien Grall
2014-08-06 16:44 ` Stefano Stabellini
2014-08-06 16:50 ` Julien Grall
2014-08-06 16:58 ` Stefano Stabellini
2014-08-08 14:15 ` Julien Grall
2014-09-09 19:12 ` Julien Grall
2014-09-10 10:08 ` Ian Campbell
2014-07-31 15:00 ` [PATCH v2 21/21] xl: Add new option dtdev Julien Grall
2014-09-09 14:34 ` [PATCH v2 00/21] xen/arm: Add support for non-pci passthrough Ian Campbell
2014-09-09 19:34 ` Julien Grall
2014-09-10 9:22 ` Christoffer Dall
2014-09-10 10:51 ` Ian Campbell
2014-09-10 11:45 ` Christoffer Dall
2014-09-10 12:05 ` Ian Campbell
2014-09-10 22:03 ` Stefano Stabellini
2014-09-11 4:03 ` Christoffer Dall
2014-09-11 8:56 ` Ian Campbell
2014-09-12 19:16 ` Julien Grall
2014-09-10 10:11 ` Ian Campbell
2014-09-10 18:45 ` Julien Grall
2014-09-11 8:58 ` Ian Campbell
2014-09-11 19:11 ` Julien Grall
2014-09-12 10:16 ` Ian Campbell
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=541222F6.1070406@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 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).