[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen staging] xen/arm: dom0less: Add #redistributor-regions property to GICv3 node



commit 3679ed232e95f5abdeea1f0792d8e4d1e3e53fe6
Author:     Michal Orzel <michal.orzel@xxxxxxx>
AuthorDate: Thu Jul 4 09:54:19 2024 +0200
Commit:     Julien Grall <jgrall@xxxxxxxxxx>
CommitDate: Tue Aug 6 19:08:50 2024 +0100

    xen/arm: dom0less: Add #redistributor-regions property to GICv3 node
    
    Dom0less domain using host memory layout may use more than one
    re-distributor region (d->arch.vgic.nr_regions > 1). In that case Xen
    will add them in a "reg" property of a GICv3 domU node. Guest needs to
    know how many regions to search for, and therefore the GICv3 dt binding
    [1] specifies that "#redistributor-regions" property is required if more
    than one redistributor region is present. However, Xen does not add this
    property which makes guest believe, there is just one such region. This
    can lead to guest boot failure when doing GIC SMP initialization. Fix it
    by adding this property, which matches what we do for hwdom.
    
    [1] Linux: 
Documentation/devicetree/bindings/interrupt-controller/arm,gic-v3.yaml
    
    Fixes: 4809f9ec7d71 ("xen/arm: if direct-map domain use native addresses 
for GICv3")
    Signed-off-by: Michal Orzel <michal.orzel@xxxxxxx>
    Reviewed-by: Luca Fancellu <luca.fancellu@xxxxxxx>
    Acked-by: Julien Grall <jgrall@xxxxxxxxxx>
---
 xen/arch/arm/dom0less-build.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/xen/arch/arm/dom0less-build.c b/xen/arch/arm/dom0less-build.c
index f919d3acf9..09b65e44ae 100644
--- a/xen/arch/arm/dom0less-build.c
+++ b/xen/arch/arm/dom0less-build.c
@@ -176,6 +176,11 @@ static int __init make_gicv3_domU_node(struct kernel_info 
*kinfo)
     if ( res )
         return res;
 
+    res = fdt_property_cell(fdt, "#redistributor-regions",
+                            d->arch.vgic.nr_regions);
+    if ( res )
+        return res;
+
     /* reg specifies all re-distributors and Distributor. */
     len = (GUEST_ROOT_ADDRESS_CELLS + GUEST_ROOT_SIZE_CELLS) *
           (d->arch.vgic.nr_regions + 1) * sizeof(__be32);
--
generated by git-patchbot for /home/xen/git/xen.git#staging



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.