From: Julien Grall <julien.grall@linaro.org>
To: Ian Campbell <ian.campbell@citrix.com>
Cc: xen-devel@lists.xenproject.org, tim@xen.org,
Ian Jackson <ian.jackson@eu.citrix.com>,
stefano.stabellini@citrix.com, Wei Liu <wei.liu2@citrix.com>
Subject: Re: [PATCH v3 21/24] tools/(lib)xl: Add partial device tree support for ARM
Date: Mon, 23 Feb 2015 17:06:11 +0000 [thread overview]
Message-ID: <54EB5E03.2010800@linaro.org> (raw)
In-Reply-To: <1424691989.27930.41.camel@citrix.com>
On 23/02/15 11:46, Ian Campbell wrote:
> On Tue, 2015-01-13 at 14:25 +0000, Julien Grall wrote:
>> Let the user to pass additional nodes to the guest device tree. For this
>> purpose, everything in the node /passthrough from the partial device tree will
>> be copied into the guest device tree.
>>
>> The node /aliases will be also copied to allow the user to define aliases
>> which can be used by the guest kernel.
>>
>> A simple partial device tree will look like:
>>
>> /dts-v1/;
>>
>> / {
>> #address-cells = <2>;
>> #size-cells = <2>;
>
> Are these mandatory/required as implied below, or only the ones inside
> the passthrough node (which is what I would expect).
It's to make DTC quiet.
>>
>> passthrough {
>> compatible = "simple-bus";
>> ranges;
>> #address-cells = <2>;
>> #size-cells = <2>;
>>
>> /* List of your nodes */
>> }
>> };
>>
>> Note that:
>> * The interrupt-parent proporties will be added by the toolstack in
>
> "properties"
>
>> the root node
>> * The properties compatible, ranges, #address-cells and #size-cells
>> in /passthrough are mandatory.
>
> Does ranges need to be the empty form? I think ranges = <stuff stuff>
> would be illegal?
It's not illegal as long as you correctly use it in the inner "reg".
Also, I admit that the "ranges" is confusing to read.
>>
>> Signed-off-by: Julien Grall <julien.grall@linaro.org>
>> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
>> Cc: Wei Liu <wei.liu2@citrix.com>
>>
>> ---
>> Changes in v3:
>> - Patch added
>> ---
>> docs/man/xl.cfg.pod.5 | 7 ++
>> tools/libxl/libxl_arm.c | 253 ++++++++++++++++++++++++++++++++++++++++++++
>> tools/libxl/libxl_types.idl | 1 +
>> tools/libxl/xl_cmdimpl.c | 1 +
>> 4 files changed, 262 insertions(+)
>>
>> diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5
>> index e2f91fc..225b782 100644
>> --- a/docs/man/xl.cfg.pod.5
>> +++ b/docs/man/xl.cfg.pod.5
>> @@ -398,6 +398,13 @@ not emulated.
>> Specify that this domain is a driver domain. This enables certain
>> features needed in order to run a driver domain.
>>
>> +=item B<device_tree=PATH>
>> +
>> +Specify a partial device tree (compiled via the Device Tree Compiler).
>> +Everything under the node "/passthrough" will be copied into the guest
>> +device tree. For convenience, the node "/aliases" is also copied to allow
>> +the user to defined aliases which can be used by the guest kernel.
>> +
>> =back
>>
>> =head2 Devices
>> diff --git a/tools/libxl/libxl_arm.c b/tools/libxl/libxl_arm.c
>> index 53177eb..619458b 100644
>> --- a/tools/libxl/libxl_arm.c
>> +++ b/tools/libxl/libxl_arm.c
>> @@ -540,6 +540,238 @@ out:
>> }
>> }
>>
>> +static bool check_overrun(uint64_t a, uint64_t b, uint32_t max)
>> +{
>> + return ((a + b) > UINT_MAX || (a + b) > max);
>
> Both halves here will fail if e.g. a == UINT64_MAX-1 and b == 2, so e..g
> a+b <= UINT_MAX and < max.
Oops right.
> To avoid this you should check that a and b are both less than some
> fraction of UINT64_MAX before the other checks, which would ensure the
> overflow can't happen, perhaps even UINT32_MAX would be acceptable for
> this use, depending on the input types involved.
max is an uint32_t so a and b should be inferior to UINT32_MAX.
What about
a < UINT_MAX && b < UINT_MAX && (a + b) < UINT_MAX
>
>> +/*
>> + * Based on fdt_first_subnode and fdt_next_subnode.
>> + * We can't use the one helpers provided by libfdt because:
>> + * - It has been introduced in 2013 => Doesn't work on wheezy
>> + * - The prototypes exist but the functions are not exported. Don't
>> + * ask why...
>> + * - There is no version in the header (might be better to use
>> + * configure for this purpose?)
>> + */
>> +static int _fdt_first_subnode(const void *fdt, int offset)
>
> The _ namespace is for something other than applications (POSIX or the
> compiler, I forget which is _ and which __)
>
> Using configure to conditionally compile our own versions with the usual
> names would be better I think.
I will give a look.
> The copyright and licensing of these functions should be included
> somewhere either just above their definitions, or maybe you want to put
> these into a separate .c file for convenience.
Ok.
>> +{
>> + int depth = 0;
>> +
>> + offset = fdt_next_node(fdt, offset, &depth);
>> + if (offset < 0 || depth != 1)
>> + return -FDT_ERR_NOTFOUND;
>> +
>> + return offset;
>> +}
>> +
>> +static int _fdt_next_subnode(const void *fdt, int offset)
>> +{
>> + int depth = 1;
>> +
>> + /*
>> + * With respect to the parent, the depth of the next subnode will be
>> + * the same as the last.
>> + */
>> + do {
>> + offset = fdt_next_node(fdt, offset, &depth);
>> + if (offset < 0 || depth < 1)
>> + return -FDT_ERR_NOTFOUND;
>> + } while (depth > 1);
>> +
>> + return offset;
>> +}
>> +
>> +/* Limit the maxixum depth of a node because of the recursion */
>
> "maximum".
>
>> +#define MAX_DEPTH 8
>
> This restriction ought to be in the docs I think.
ok.
>> +static int copy_node_by_path(libxl__gc *gc, const char *path,
>> + void *fdt, void *pfdt)
>> +{
>> + int nodeoff, r;
>> + const char *name = strrchr(path, '/');
>> +
>> + if (!name)
>> + return -FDT_ERR_INTERNAL;
>> +
>> + name++;
>> +
>> + /* The FDT function to look at node doesn't take into account the
> ^a
>
>> + * unit (i.e anything after @) when search by name. Check if the
>> + * name exactly match.
>
> "exactly matches" or "names exactly match" (I think the second?)
We check only one name at the time. So "exactly matches" seems better.
>> +/*
>> + * The partial device tree is not copied entirely. Only the relevant bits are
>> + * copied to the guest device tree:
>> + * - /passthrough node
>> + * - /aliases node
>
> Would it be easy to add a check for other top-level nodes and
> error/warn?
That would require to browse the device tree entirely, which is not done
there.
>> diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
>> index 1214d2e..5651110 100644
>> --- a/tools/libxl/libxl_types.idl
>> +++ b/tools/libxl/libxl_types.idl
>> @@ -399,6 +399,7 @@ libxl_domain_build_info = Struct("domain_build_info",[
>> ("kernel", string),
>> ("cmdline", string),
>> ("ramdisk", string),
>> + ("device_tree", string),
>
> Needs a #define LIBXL_HAVE... in libxl.h
Hmmm why? This will be set to empty when libxl_domain_build_info is
initialized.
Regards,
--
Julien Grall
next prev parent reply other threads:[~2015-02-23 17:06 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
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 [this message]
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=54EB5E03.2010800@linaro.org \
--to=julien.grall@linaro.org \
--cc=ian.campbell@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=stefano.stabellini@citrix.com \
--cc=tim@xen.org \
--cc=wei.liu2@citrix.com \
--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.