|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 2/3] xen: arm: propagate gic's #interrupt-cells property to dom0.
Hi Ian,
On 12/03/15 17:17, Ian Campbell wrote:
> This is similar to 816f5bb1f074 "xen: arm: propagate gic's
> should propagate (rather than invent our own value) since this value
> is used to size fields within other properties within the tree.
> I'm not sure why I didn't do this as part of 816f5bb1f074. I think
> probably just because #interrupt-cells must always be 3 for a GIC
> whereas #address-cells can legitimately differ. Regardless, I think we
> might as well do this in common code.
Hmmm... We are creating some interrupt ourself assuming the number of
interrupt cells is 3. So it makes sense to hard-code (not really invent)
the value.
> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> ---
> xen/arch/arm/domain_build.c | 18 +++++++++++++-----
> xen/arch/arm/gic-hip04.c | 4 ----
> xen/arch/arm/gic-v2.c | 4 ----
> xen/arch/arm/gic-v3.c | 4 ----
> 4 files changed, 13 insertions(+), 17 deletions(-)
>
> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index ab4ad65..2a2fc2b 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -784,8 +784,8 @@ static int make_gic_node(const struct domain *d, void
> *fdt,
> {
> const struct dt_device_node *gic = dt_interrupt_controller;
> int res = 0;
> - const void *addrcells;
> - u32 addrcells_len;
> + const void *cells;
> + u32 cells_len;
>
> /*
> * Xen currently supports only a single GIC. Discard any secondary
> @@ -815,10 +815,18 @@ static int make_gic_node(const struct domain *d, void
> *fdt,
> return res;
> }
>
> - addrcells = dt_get_property(gic, "#address-cells", &addrcells_len);
> - if ( addrcells )
> + cells = dt_get_property(gic, "#address-cells", &cells_len);
> + if ( cells )
> {
> - res = fdt_property(fdt, "#address-cells", addrcells, addrcells_len);
> + res = fdt_property(fdt, "#address-cells", cells, cells_len);
> + if ( res )
> + return res;
> + }
> +
> + cells = dt_get_property(gic, "#interrupt-cells", &cells_len);
> + if ( cells )
> + {
> + res = fdt_property(fdt, "#interrupt-cells", cells, cells_len);
The #interrupt-cells as to be present at any time for the GIC. So I
don't think it's worth to check if it presents. Maybe an ASSERT would be
enough?
Also, I would check somewhere that the value is effectively 3 otherwise
we are in trouble for the timer/evtchn interrupt creation. Though, it
was there before too.
> if ( res )
> return res;
> }
> diff --git a/xen/arch/arm/gic-hip04.c b/xen/arch/arm/gic-hip04.c
> index 073ad33..42af10b 100644
> --- a/xen/arch/arm/gic-hip04.c
> +++ b/xen/arch/arm/gic-hip04.c
> @@ -636,10 +636,6 @@ static int hip04gic_make_dt_node(const struct domain *d,
> if ( res )
> return res;
>
> - res = fdt_property_cell(fdt, "#interrupt-cells", 3);
> - if ( res )
> - return res;
> -
> res = fdt_property(fdt, "interrupt-controller", NULL, 0);
>
> if ( res )
> diff --git a/xen/arch/arm/gic-v2.c b/xen/arch/arm/gic-v2.c
> index 20cdbc9..8d1a07d 100644
> --- a/xen/arch/arm/gic-v2.c
> +++ b/xen/arch/arm/gic-v2.c
> @@ -622,10 +622,6 @@ static int gicv2_make_dt_node(const struct domain *d,
> if ( res )
> return res;
>
> - res = fdt_property_cell(fdt, "#interrupt-cells", 3);
> - if ( res )
> - return res;
> -
> res = fdt_property(fdt, "interrupt-controller", NULL, 0);
>
> if ( res )
> diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c
> index ab80670..528500a 100644
> --- a/xen/arch/arm/gic-v3.c
> +++ b/xen/arch/arm/gic-v3.c
> @@ -1102,10 +1102,6 @@ static int gicv3_make_dt_node(const struct domain *d,
> if ( res )
> return res;
>
> - res = fdt_property_cell(fdt, "#interrupt-cells", 3);
> - if ( res )
> - return res;
> -
> res = fdt_property(fdt, "interrupt-controller", NULL, 0);
> if ( res )
> return res;
>
While you move #interrupt-cells to common code. Could you move
interrupt-controller too?
Regards,
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |