From 493a67ee4a3fd9420e94fa2cf108e2a27961202b Mon Sep 17 00:00:00 2001 From: Julien Grall Date: Thu, 17 Sep 2015 19:00:03 +0100 Subject: [PATCH] xen/arm: vgic-v2: Map the GIC virtual CPU interface with the correct size On GICv2, the GIC virtual CPU interface is at minimum 8KB. Due some to some necessary quirk for GIC using 64KB stride, we are mapping the region in 2 time. The first mapping is 4KB and the second one is 8KB, i.e 12KB in total. Although the minimum supported size (and widely used) is 8KB. This means that we are mapping 4KB more to any guest using GICv2. While this looks scary at first glance, the GIC virtual CPU interface is most frequently at the end the GIC I/O region. So we will most likely map an an unused I/O region or a mirrored version of GICV for platform using 64KB stride. Nonetheless, fix the second mapping to only map 4KB. Signed-off-by: Julien Grall Acked-by: Ian Campbell --- xen/arch/arm/vgic-v2.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xen/arch/arm/vgic-v2.c b/xen/arch/arm/vgic-v2.c index 524787b0a8..fa7159875a 100644 --- a/xen/arch/arm/vgic-v2.c +++ b/xen/arch/arm/vgic-v2.c @@ -576,10 +576,10 @@ static int vgic_v2_domain_init(struct domain *d) if ( !platform_has_quirk(PLATFORM_QUIRK_GIC_64K_STRIDE) ) ret = map_mmio_regions(d, paddr_to_pfn(d->arch.vgic.cbase + PAGE_SIZE), - 2, paddr_to_pfn(vgic_v2_hw.vbase + PAGE_SIZE)); + 1, paddr_to_pfn(vgic_v2_hw.vbase + PAGE_SIZE)); else ret = map_mmio_regions(d, paddr_to_pfn(d->arch.vgic.cbase + PAGE_SIZE), - 2, paddr_to_pfn(vgic_v2_hw.vbase + SZ_64K)); + 1, paddr_to_pfn(vgic_v2_hw.vbase + SZ_64K)); if ( ret ) return ret; -- 2.30.2