diff mbox

xen/arm: gic-v2: Only create GICv2m node when there are GICv2m frame available

Message ID 1465998048-21682-1-git-send-email-julien.grall@arm.com (mailing list archive)
State New, archived
Headers show

Commit Message

Julien Grall June 15, 2016, 1:40 p.m. UTC
Xen will crash on platform where GICv2m is not available with the
following error:

(XEN) Can't find ranges property for the gic node
(XEN) Device tree generation failed (-15).
(XEN)
(XEN) ****************************************
(XEN) Panic on CPU 0:
(XEN) Could not set up DOM0 guest OS
(XEN) ****************************************

This is because the property "ranges" may not be present in the GIC
when there are no GICv2m frames.

Skip the creation of the GICv2m node when the hardware does not
support it.

This fixes boot after commit "xen/arm: Export GICv2m register frames to
DOM0 by device tree".

Signed-off-by: Julien Grall <julien.grall@arm.com>
---
 xen/arch/arm/gic-v2.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Wei Chen June 16, 2016, 1:54 a.m. UTC | #1
On 15 June 2016 at 21:40, Julien Grall <julien.grall@arm.com> wrote:
> Xen will crash on platform where GICv2m is not available with the
> following error:
>
> (XEN) Can't find ranges property for the gic node
> (XEN) Device tree generation failed (-15).
> (XEN)
> (XEN) ****************************************
> (XEN) Panic on CPU 0:
> (XEN) Could not set up DOM0 guest OS
> (XEN) ****************************************
>
> This is because the property "ranges" may not be present in the GIC
> when there are no GICv2m frames.
>
> Skip the creation of the GICv2m node when the hardware does not
> support it.
>
> This fixes boot after commit "xen/arm: Export GICv2m register frames to
> DOM0 by device tree".
>
> Signed-off-by: Julien Grall <julien.grall@arm.com>
> ---
>  xen/arch/arm/gic-v2.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/xen/arch/arm/gic-v2.c b/xen/arch/arm/gic-v2.c
> index 2c1c0ba..4e2f4c7 100644
> --- a/xen/arch/arm/gic-v2.c
> +++ b/xen/arch/arm/gic-v2.c
> @@ -669,6 +669,10 @@ static int gicv2m_make_dt_node(const struct domain *d,
>      const struct dt_device_node *v2m = NULL;
>      const struct v2m_data *v2m_data;
>
> +    /* It is not necessary to create the node if there are not GICv2m frames */
> +    if ( list_empty(&gicv2m_info) )
> +        return 0;
> +
>      /* The sub-nodes require the ranges property */
>      prop = dt_get_property(gic, "ranges", &len);
>      if ( !prop )
> --
> 1.9.1
>

Looks fine to me.

Acked-by: Wei Chen <wei.chen@linaro.org>
diff mbox

Patch

diff --git a/xen/arch/arm/gic-v2.c b/xen/arch/arm/gic-v2.c
index 2c1c0ba..4e2f4c7 100644
--- a/xen/arch/arm/gic-v2.c
+++ b/xen/arch/arm/gic-v2.c
@@ -669,6 +669,10 @@  static int gicv2m_make_dt_node(const struct domain *d,
     const struct dt_device_node *v2m = NULL;
     const struct v2m_data *v2m_data;
 
+    /* It is not necessary to create the node if there are not GICv2m frames */
+    if ( list_empty(&gicv2m_info) )
+        return 0;
+
     /* The sub-nodes require the ranges property */
     prop = dt_get_property(gic, "ranges", &len);
     if ( !prop )