* [XEN PATCH v3] xen/arm: introduce dummy iommu node for dom0
@ 2022-01-11 11:26 Sergiy Kibrik
2022-01-13 23:51 ` Stefano Stabellini
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Sergiy Kibrik @ 2022-01-11 11:26 UTC (permalink / raw)
To: xen-devel
Cc: Sergiy Kibrik, Stefano Stabellini, Julien Grall,
Oleksandr Tyshchenko, Andrii Anisov
Currently no IOMMU properties are exposed to dom0, thus kernel by default
assumes no protection and enables swiotlb-xen, which leads to costly and
unnecessary buffers bouncing.
To let kernel know which device is behing IOMMU and hence needs no swiotlb
services we introduce dummy xen-iommu node in FDT and link protected device
nodes to it, using here device tree iommu bindings.
Signed-off-by: Sergiy Kibrik <Sergiy_Kibrik@epam.com>
---
Cc: Stefano Stabellini <sstabellini@kernel.org>
Cc: Julien Grall <julien@xen.org>
Cc: Oleksandr Tyshchenko <olekstysh@gmail.com>
Cc: Andrii Anisov <Andrii_Anisov@epam.com>
Changelog:
v3: rebased over staging & remove redundand phandle_iommu attribute, discussion:
https://lists.xenproject.org/archives/html/xen-devel/2021-12/msg01753.html
v2: re-use common iommu dt bindings to let guests know which devices are protected:
https://lists.xenproject.org/archives/html/xen-devel/2021-10/msg00073.html
xen/arch/arm/domain_build.c | 42 +++++++++++++++++++++++++++
xen/include/public/device_tree_defs.h | 1 +
2 files changed, 43 insertions(+)
diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
index 6931c022a2..b82ba72fac 100644
--- a/xen/arch/arm/domain_build.c
+++ b/xen/arch/arm/domain_build.c
@@ -845,6 +845,12 @@ static int __init write_properties(struct domain *d, struct kernel_info *kinfo,
}
}
+ if ( iommu_node && is_iommu_enabled(d) && dt_device_is_protected(node) )
+ {
+ res = fdt_property_cell(kinfo->fdt, "iommus", GUEST_PHANDLE_IOMMU);
+ if ( res )
+ return res;
+ }
return 0;
}
@@ -1479,6 +1485,38 @@ static int __init make_cpus_node(const struct domain *d, void *fdt)
return res;
}
+static int __init make_iommu_node(const struct domain *d,
+ const struct kernel_info *kinfo)
+{
+ const char compat[] = "xen,iommu-el2-v1";
+ int res;
+
+ if ( !is_iommu_enabled(d) )
+ return 0;
+
+ dt_dprintk("Create iommu node\n");
+
+ res = fdt_begin_node(kinfo->fdt, "xen-iommu");
+ if ( res )
+ return res;
+
+ res = fdt_property(kinfo->fdt, "compatible", compat, sizeof(compat));
+ if ( res )
+ return res;
+
+ res = fdt_property_cell(kinfo->fdt, "#iommu-cells", 0);
+ if ( res )
+ return res;
+
+ res = fdt_property_cell(kinfo->fdt, "phandle", GUEST_PHANDLE_IOMMU);
+
+ res = fdt_end_node(kinfo->fdt);
+ if ( res )
+ return res;
+
+ return res;
+}
+
static int __init make_gic_node(const struct domain *d, void *fdt,
const struct dt_device_node *node)
{
@@ -2127,6 +2165,10 @@ static int __init handle_node(struct domain *d, struct kernel_info *kinfo,
if ( res )
return res;
+ res = make_iommu_node(d, kinfo);
+ if ( res )
+ return res;
+
res = make_memory_node(d, kinfo->fdt, addrcells, sizecells, &kinfo->mem);
if ( res )
return res;
diff --git a/xen/include/public/device_tree_defs.h b/xen/include/public/device_tree_defs.h
index 209d43de3f..df58944bd0 100644
--- a/xen/include/public/device_tree_defs.h
+++ b/xen/include/public/device_tree_defs.h
@@ -7,6 +7,7 @@
* onwards. Reserve a high value for the GIC phandle.
*/
#define GUEST_PHANDLE_GIC (65000)
+#define GUEST_PHANDLE_IOMMU (GUEST_PHANDLE_GIC + 1)
#define GUEST_ROOT_ADDRESS_CELLS 2
#define GUEST_ROOT_SIZE_CELLS 2
--
2.25.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [XEN PATCH v3] xen/arm: introduce dummy iommu node for dom0
2022-01-11 11:26 [XEN PATCH v3] xen/arm: introduce dummy iommu node for dom0 Sergiy Kibrik
@ 2022-01-13 23:51 ` Stefano Stabellini
2022-01-14 8:21 ` Rahul Singh
2022-02-07 16:45 ` Julien Grall
2 siblings, 0 replies; 6+ messages in thread
From: Stefano Stabellini @ 2022-01-13 23:51 UTC (permalink / raw)
To: Sergiy Kibrik
Cc: xen-devel, Stefano Stabellini, Julien Grall,
Oleksandr Tyshchenko, Andrii Anisov
On Tue, 11 Jan 2022, Sergiy Kibrik wrote:
> Currently no IOMMU properties are exposed to dom0, thus kernel by default
> assumes no protection and enables swiotlb-xen, which leads to costly and
> unnecessary buffers bouncing.
>
> To let kernel know which device is behing IOMMU and hence needs no swiotlb
> services we introduce dummy xen-iommu node in FDT and link protected device
> nodes to it, using here device tree iommu bindings.
>
> Signed-off-by: Sergiy Kibrik <Sergiy_Kibrik@epam.com>
I think the patch looks good. I have no further comments on the code:
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Before committing it to the Xen tree, I'd like to wait that the Linux
side, especially the change to
Documentation/devicetree/bindings/arm/xen.txt, is acked.
> ---
> Cc: Stefano Stabellini <sstabellini@kernel.org>
> Cc: Julien Grall <julien@xen.org>
> Cc: Oleksandr Tyshchenko <olekstysh@gmail.com>
> Cc: Andrii Anisov <Andrii_Anisov@epam.com>
>
>
> Changelog:
>
> v3: rebased over staging & remove redundand phandle_iommu attribute, discussion:
> https://lists.xenproject.org/archives/html/xen-devel/2021-12/msg01753.html
>
> v2: re-use common iommu dt bindings to let guests know which devices are protected:
> https://lists.xenproject.org/archives/html/xen-devel/2021-10/msg00073.html
>
> xen/arch/arm/domain_build.c | 42 +++++++++++++++++++++++++++
> xen/include/public/device_tree_defs.h | 1 +
> 2 files changed, 43 insertions(+)
>
> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index 6931c022a2..b82ba72fac 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -845,6 +845,12 @@ static int __init write_properties(struct domain *d, struct kernel_info *kinfo,
> }
> }
>
> + if ( iommu_node && is_iommu_enabled(d) && dt_device_is_protected(node) )
> + {
> + res = fdt_property_cell(kinfo->fdt, "iommus", GUEST_PHANDLE_IOMMU);
> + if ( res )
> + return res;
> + }
> return 0;
> }
>
> @@ -1479,6 +1485,38 @@ static int __init make_cpus_node(const struct domain *d, void *fdt)
> return res;
> }
>
> +static int __init make_iommu_node(const struct domain *d,
> + const struct kernel_info *kinfo)
> +{
> + const char compat[] = "xen,iommu-el2-v1";
> + int res;
> +
> + if ( !is_iommu_enabled(d) )
> + return 0;
> +
> + dt_dprintk("Create iommu node\n");
> +
> + res = fdt_begin_node(kinfo->fdt, "xen-iommu");
> + if ( res )
> + return res;
> +
> + res = fdt_property(kinfo->fdt, "compatible", compat, sizeof(compat));
> + if ( res )
> + return res;
> +
> + res = fdt_property_cell(kinfo->fdt, "#iommu-cells", 0);
> + if ( res )
> + return res;
> +
> + res = fdt_property_cell(kinfo->fdt, "phandle", GUEST_PHANDLE_IOMMU);
> +
> + res = fdt_end_node(kinfo->fdt);
> + if ( res )
> + return res;
> +
> + return res;
> +}
> +
> static int __init make_gic_node(const struct domain *d, void *fdt,
> const struct dt_device_node *node)
> {
> @@ -2127,6 +2165,10 @@ static int __init handle_node(struct domain *d, struct kernel_info *kinfo,
> if ( res )
> return res;
>
> + res = make_iommu_node(d, kinfo);
> + if ( res )
> + return res;
> +
> res = make_memory_node(d, kinfo->fdt, addrcells, sizecells, &kinfo->mem);
> if ( res )
> return res;
> diff --git a/xen/include/public/device_tree_defs.h b/xen/include/public/device_tree_defs.h
> index 209d43de3f..df58944bd0 100644
> --- a/xen/include/public/device_tree_defs.h
> +++ b/xen/include/public/device_tree_defs.h
> @@ -7,6 +7,7 @@
> * onwards. Reserve a high value for the GIC phandle.
> */
> #define GUEST_PHANDLE_GIC (65000)
> +#define GUEST_PHANDLE_IOMMU (GUEST_PHANDLE_GIC + 1)
>
> #define GUEST_ROOT_ADDRESS_CELLS 2
> #define GUEST_ROOT_SIZE_CELLS 2
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [XEN PATCH v3] xen/arm: introduce dummy iommu node for dom0
2022-01-11 11:26 [XEN PATCH v3] xen/arm: introduce dummy iommu node for dom0 Sergiy Kibrik
2022-01-13 23:51 ` Stefano Stabellini
@ 2022-01-14 8:21 ` Rahul Singh
2022-01-14 8:48 ` Jiamei Xie
2022-02-07 16:45 ` Julien Grall
2 siblings, 1 reply; 6+ messages in thread
From: Rahul Singh @ 2022-01-14 8:21 UTC (permalink / raw)
To: Sergiy Kibrik
Cc: xen-devel, Stefano Stabellini, Julien Grall,
Oleksandr Tyshchenko, Andrii Anisov
Hi,
> On 11 Jan 2022, at 11:26 am, Sergiy Kibrik <Sergiy_Kibrik@epam.com> wrote:
>
> Currently no IOMMU properties are exposed to dom0, thus kernel by default
> assumes no protection and enables swiotlb-xen, which leads to costly and
> unnecessary buffers bouncing.
>
> To let kernel know which device is behing IOMMU and hence needs no swiotlb
> services we introduce dummy xen-iommu node in FDT and link protected device
> nodes to it, using here device tree iommu bindings.
>
> Signed-off-by: Sergiy Kibrik <Sergiy_Kibrik@epam.com>
Reviewed-by: Rahul Singh <rahul.singh@arm.com>
Regards,
Rahul
> ---
> Cc: Stefano Stabellini <sstabellini@kernel.org>
> Cc: Julien Grall <julien@xen.org>
> Cc: Oleksandr Tyshchenko <olekstysh@gmail.com>
> Cc: Andrii Anisov <Andrii_Anisov@epam.com>
>
>
> Changelog:
>
> v3: rebased over staging & remove redundand phandle_iommu attribute, discussion:
> https://lists.xenproject.org/archives/html/xen-devel/2021-12/msg01753.html
>
> v2: re-use common iommu dt bindings to let guests know which devices are protected:
> https://lists.xenproject.org/archives/html/xen-devel/2021-10/msg00073.html
>
> xen/arch/arm/domain_build.c | 42 +++++++++++++++++++++++++++
> xen/include/public/device_tree_defs.h | 1 +
> 2 files changed, 43 insertions(+)
>
> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index 6931c022a2..b82ba72fac 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -845,6 +845,12 @@ static int __init write_properties(struct domain *d, struct kernel_info *kinfo,
> }
> }
>
> + if ( iommu_node && is_iommu_enabled(d) && dt_device_is_protected(node) )
> + {
> + res = fdt_property_cell(kinfo->fdt, "iommus", GUEST_PHANDLE_IOMMU);
> + if ( res )
> + return res;
> + }
> return 0;
> }
>
> @@ -1479,6 +1485,38 @@ static int __init make_cpus_node(const struct domain *d, void *fdt)
> return res;
> }
>
> +static int __init make_iommu_node(const struct domain *d,
> + const struct kernel_info *kinfo)
> +{
> + const char compat[] = "xen,iommu-el2-v1";
> + int res;
> +
> + if ( !is_iommu_enabled(d) )
> + return 0;
> +
> + dt_dprintk("Create iommu node\n");
> +
> + res = fdt_begin_node(kinfo->fdt, "xen-iommu");
> + if ( res )
> + return res;
> +
> + res = fdt_property(kinfo->fdt, "compatible", compat, sizeof(compat));
> + if ( res )
> + return res;
> +
> + res = fdt_property_cell(kinfo->fdt, "#iommu-cells", 0);
> + if ( res )
> + return res;
> +
> + res = fdt_property_cell(kinfo->fdt, "phandle", GUEST_PHANDLE_IOMMU);
> +
> + res = fdt_end_node(kinfo->fdt);
> + if ( res )
> + return res;
> +
> + return res;
> +}
> +
> static int __init make_gic_node(const struct domain *d, void *fdt,
> const struct dt_device_node *node)
> {
> @@ -2127,6 +2165,10 @@ static int __init handle_node(struct domain *d, struct kernel_info *kinfo,
> if ( res )
> return res;
>
> + res = make_iommu_node(d, kinfo);
> + if ( res )
> + return res;
> +
> res = make_memory_node(d, kinfo->fdt, addrcells, sizecells, &kinfo->mem);
> if ( res )
> return res;
> diff --git a/xen/include/public/device_tree_defs.h b/xen/include/public/device_tree_defs.h
> index 209d43de3f..df58944bd0 100644
> --- a/xen/include/public/device_tree_defs.h
> +++ b/xen/include/public/device_tree_defs.h
> @@ -7,6 +7,7 @@
> * onwards. Reserve a high value for the GIC phandle.
> */
> #define GUEST_PHANDLE_GIC (65000)
> +#define GUEST_PHANDLE_IOMMU (GUEST_PHANDLE_GIC + 1)
>
> #define GUEST_ROOT_ADDRESS_CELLS 2
> #define GUEST_ROOT_SIZE_CELLS 2
> --
> 2.25.1
>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: [XEN PATCH v3] xen/arm: introduce dummy iommu node for dom0
2022-01-14 8:21 ` Rahul Singh
@ 2022-01-14 8:48 ` Jiamei Xie
2022-01-14 15:14 ` Sergiy Kibrik
0 siblings, 1 reply; 6+ messages in thread
From: Jiamei Xie @ 2022-01-14 8:48 UTC (permalink / raw)
To: Rahul Singh, Sergiy Kibrik
Cc: xen-devel, Stefano Stabellini, Julien Grall,
Oleksandr Tyshchenko, Andrii Anisov
> -----Original Message-----
> From: Xen-devel <xen-devel-bounces@lists.xenproject.org> On Behalf Of
> Rahul Singh
> Sent: 2022年1月14日 16:22
> To: Sergiy Kibrik <Sergiy_Kibrik@epam.com>
> Cc: xen-devel <xen-devel@lists.xenproject.org>; Stefano Stabellini
> <sstabellini@kernel.org>; Julien Grall <julien@xen.org>; Oleksandr
> Tyshchenko <olekstysh@gmail.com>; Andrii Anisov
> <Andrii_Anisov@epam.com>
> Subject: Re: [XEN PATCH v3] xen/arm: introduce dummy iommu node for
> dom0
>
> Hi,
>
> > On 11 Jan 2022, at 11:26 am, Sergiy Kibrik <Sergiy_Kibrik@epam.com>
> wrote:
> >
> > Currently no IOMMU properties are exposed to dom0, thus kernel by
> default
> > assumes no protection and enables swiotlb-xen, which leads to costly and
> > unnecessary buffers bouncing.
> >
> > To let kernel know which device is behing IOMMU and hence needs no
[Jiamei Xie]
behing? Typo
Best wishes
Jiamei Xie
> swiotlb
> > services we introduce dummy xen-iommu node in FDT and link protected
> device
> > nodes to it, using here device tree iommu bindings.
> >
> > Signed-off-by: Sergiy Kibrik <Sergiy_Kibrik@epam.com>
>
> Reviewed-by: Rahul Singh <rahul.singh@arm.com>
>
> Regards,
> Rahul
> > ---
> > Cc: Stefano Stabellini <sstabellini@kernel.org>
> > Cc: Julien Grall <julien@xen.org>
> > Cc: Oleksandr Tyshchenko <olekstysh@gmail.com>
> > Cc: Andrii Anisov <Andrii_Anisov@epam.com>
> >
> >
> > Changelog:
> >
> > v3: rebased over staging & remove redundand phandle_iommu attribute,
> discussion:
> > https://lists.xenproject.org/archives/html/xen-devel/2021-
> 12/msg01753.html
> >
> > v2: re-use common iommu dt bindings to let guests know which devices
> are protected:
> > https://lists.xenproject.org/archives/html/xen-devel/2021-
> 10/msg00073.html
> >
> > xen/arch/arm/domain_build.c | 42
> +++++++++++++++++++++++++++
> > xen/include/public/device_tree_defs.h | 1 +
> > 2 files changed, 43 insertions(+)
> >
> > diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> > index 6931c022a2..b82ba72fac 100644
> > --- a/xen/arch/arm/domain_build.c
> > +++ b/xen/arch/arm/domain_build.c
> > @@ -845,6 +845,12 @@ static int __init write_properties(struct domain *d,
> struct kernel_info *kinfo,
> > }
> > }
> >
> > + if ( iommu_node && is_iommu_enabled(d) &&
> dt_device_is_protected(node) )
> > + {
> > + res = fdt_property_cell(kinfo->fdt, "iommus",
> GUEST_PHANDLE_IOMMU);
> > + if ( res )
> > + return res;
> > + }
> > return 0;
> > }
> >
> > @@ -1479,6 +1485,38 @@ static int __init make_cpus_node(const struct
> domain *d, void *fdt)
> > return res;
> > }
> >
> > +static int __init make_iommu_node(const struct domain *d,
> > + const struct kernel_info *kinfo)
> > +{
> > + const char compat[] = "xen,iommu-el2-v1";
> > + int res;
> > +
> > + if ( !is_iommu_enabled(d) )
> > + return 0;
> > +
> > + dt_dprintk("Create iommu node\n");
> > +
> > + res = fdt_begin_node(kinfo->fdt, "xen-iommu");
> > + if ( res )
> > + return res;
> > +
> > + res = fdt_property(kinfo->fdt, "compatible", compat, sizeof(compat));
> > + if ( res )
> > + return res;
> > +
> > + res = fdt_property_cell(kinfo->fdt, "#iommu-cells", 0);
> > + if ( res )
> > + return res;
> > +
> > + res = fdt_property_cell(kinfo->fdt, "phandle",
> GUEST_PHANDLE_IOMMU);
> > +
> > + res = fdt_end_node(kinfo->fdt);
> > + if ( res )
> > + return res;
> > +
> > + return res;
> > +}
> > +
> > static int __init make_gic_node(const struct domain *d, void *fdt,
> > const struct dt_device_node *node)
> > {
> > @@ -2127,6 +2165,10 @@ static int __init handle_node(struct domain *d,
> struct kernel_info *kinfo,
> > if ( res )
> > return res;
> >
> > + res = make_iommu_node(d, kinfo);
> > + if ( res )
> > + return res;
> > +
> > res = make_memory_node(d, kinfo->fdt, addrcells, sizecells, &kinfo-
> >mem);
> > if ( res )
> > return res;
> > diff --git a/xen/include/public/device_tree_defs.h
> b/xen/include/public/device_tree_defs.h
> > index 209d43de3f..df58944bd0 100644
> > --- a/xen/include/public/device_tree_defs.h
> > +++ b/xen/include/public/device_tree_defs.h
> > @@ -7,6 +7,7 @@
> > * onwards. Reserve a high value for the GIC phandle.
> > */
> > #define GUEST_PHANDLE_GIC (65000)
> > +#define GUEST_PHANDLE_IOMMU (GUEST_PHANDLE_GIC + 1)
> >
> > #define GUEST_ROOT_ADDRESS_CELLS 2
> > #define GUEST_ROOT_SIZE_CELLS 2
> > --
> > 2.25.1
> >
> >
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: [XEN PATCH v3] xen/arm: introduce dummy iommu node for dom0
2022-01-14 8:48 ` Jiamei Xie
@ 2022-01-14 15:14 ` Sergiy Kibrik
0 siblings, 0 replies; 6+ messages in thread
From: Sergiy Kibrik @ 2022-01-14 15:14 UTC (permalink / raw)
To: Jiamei Xie
Cc: xen-devel, Stefano Stabellini, Julien Grall,
Oleksandr Tyshchenko, Andrii Anisov
> > > Currently no IOMMU properties are exposed to dom0, thus kernel by
> > default
> > > assumes no protection and enables swiotlb-xen, which leads to costly
> > > and unnecessary buffers bouncing.
> > >
> > > To let kernel know which device is behing IOMMU and hence needs no
> [Jiamei Xie]
> behing? Typo
>
Oops, typo indeed.
Thank you!
- Sergiy
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [XEN PATCH v3] xen/arm: introduce dummy iommu node for dom0
2022-01-11 11:26 [XEN PATCH v3] xen/arm: introduce dummy iommu node for dom0 Sergiy Kibrik
2022-01-13 23:51 ` Stefano Stabellini
2022-01-14 8:21 ` Rahul Singh
@ 2022-02-07 16:45 ` Julien Grall
2 siblings, 0 replies; 6+ messages in thread
From: Julien Grall @ 2022-02-07 16:45 UTC (permalink / raw)
To: Sergiy Kibrik, xen-devel
Cc: Stefano Stabellini, Oleksandr Tyshchenko, Andrii Anisov
Hi,
On 11/01/2022 11:26, Sergiy Kibrik wrote:
> Currently no IOMMU properties are exposed to dom0, thus kernel by default
> assumes no protection and enables swiotlb-xen, which leads to costly and
> unnecessary buffers bouncing.
>
> To let kernel know which device is behing IOMMU and hence needs no swiotlb
> services we introduce dummy xen-iommu node in FDT and link protected device
> nodes to it, using here device tree iommu bindings.
>
> Signed-off-by: Sergiy Kibrik <Sergiy_Kibrik@epam.com>
> ---
> Cc: Stefano Stabellini <sstabellini@kernel.org>
> Cc: Julien Grall <julien@xen.org>
> Cc: Oleksandr Tyshchenko <olekstysh@gmail.com>
> Cc: Andrii Anisov <Andrii_Anisov@epam.com>
>
>
> Changelog:
>
> v3: rebased over staging & remove redundand phandle_iommu attribute, discussion:
> https://lists.xenproject.org/archives/html/xen-devel/2021-12/msg01753.html
>
> v2: re-use common iommu dt bindings to let guests know which devices are protected:
> https://lists.xenproject.org/archives/html/xen-devel/2021-10/msg00073.html
>
> xen/arch/arm/domain_build.c | 42 +++++++++++++++++++++++++++
> xen/include/public/device_tree_defs.h | 1 +
> 2 files changed, 43 insertions(+)
>
> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index 6931c022a2..b82ba72fac 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -845,6 +845,12 @@ static int __init write_properties(struct domain *d, struct kernel_info *kinfo,
> }
> }
>
> + if ( iommu_node && is_iommu_enabled(d) && dt_device_is_protected(node) )
I think it should be sufficient to check dt_device_is_protected()
because it is set it means that device behind an IOMMU known by Xen. So
iommu_node will always be valid.
Furthermore, you can't assign to dom0 a device that was protected with
enabling the IOMMU for the domain.
> + {
> + res = fdt_property_cell(kinfo->fdt, "iommus", GUEST_PHANDLE_IOMMU);
> + if ( res )
> + return res;
> + }
> return 0;
> }
>
> @@ -1479,6 +1485,38 @@ static int __init make_cpus_node(const struct domain *d, void *fdt)
> return res;
> }
>
> +static int __init make_iommu_node(const struct domain *d,
> + const struct kernel_info *kinfo)
> +{
> + const char compat[] = "xen,iommu-el2-v1";
> + int res;
> +
> + if ( !is_iommu_enabled(d) )
> + return 0;
> +
> + dt_dprintk("Create iommu node\n");
> +
> + res = fdt_begin_node(kinfo->fdt, "xen-iommu");
> + if ( res )
> + return res;
> +
> + res = fdt_property(kinfo->fdt, "compatible", compat, sizeof(compat));
> + if ( res )
> + return res;
> +
> + res = fdt_property_cell(kinfo->fdt, "#iommu-cells", 0);
> + if ( res )
> + return res;
> +
> + res = fdt_property_cell(kinfo->fdt, "phandle", GUEST_PHANDLE_IOMMU);
Please don't hardocode the phandle for the IOMMU. Instead we should use
one for an IOMMU that is used by Xen.
This will reduce the risk to use a phandle that could be possibly used
in the host Device-Tree.
Cheers,
--
Julien Grall
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2022-02-07 16:46 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-11 11:26 [XEN PATCH v3] xen/arm: introduce dummy iommu node for dom0 Sergiy Kibrik
2022-01-13 23:51 ` Stefano Stabellini
2022-01-14 8:21 ` Rahul Singh
2022-01-14 8:48 ` Jiamei Xie
2022-01-14 15:14 ` Sergiy Kibrik
2022-02-07 16:45 ` Julien Grall
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.