|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 28/38] arm: map GICV in all domains, not just dom0.
On Fri, 1 Jun 2012, Ian Campbell wrote:
> This requires that we allocate all p2m pages from domheap without a particular
> dom because max pages is not setup yet so there is no allocation available to
> us.
>
> At some point we should create a separate p2m allocation (similar to x86's
> shadow allocation) and use that.
>
> Also we seem to have been calling p2m_alloc_table twice for dom0.
>
> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> xen/arch/arm/domain.c | 10 +++++++---
> xen/arch/arm/domain_build.c | 5 -----
> xen/arch/arm/gic.c | 9 ++++-----
> xen/arch/arm/gic.h | 2 +-
> xen/arch/arm/p2m.c | 3 ++-
> 5 files changed, 14 insertions(+), 15 deletions(-)
>
> diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c
> index a7fb227..e15c1e8 100644
> --- a/xen/arch/arm/domain.c
> +++ b/xen/arch/arm/domain.c
> @@ -329,13 +329,17 @@ int arch_domain_create(struct domain *d, unsigned int
> domcr_flags)
>
> if ( (rc = p2m_alloc_table(d)) != 0 )
> goto fail;
> - }
>
> - if ( (rc = domain_vgic_init(d)) != 0 )
> - goto fail;
> + if ( (rc = gicv_setup(d)) != 0 )
> + goto fail;
> +
> + if ( (rc = domain_vgic_init(d)) != 0 )
> + goto fail;
> + }
>
> rc = 0;
> fail:
> + /*XXX unwind allocations etc */
> return rc;
> }
>
> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index 72e775c..1b19e54 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -270,9 +270,6 @@ int construct_dom0(struct domain *d)
>
> d->max_pages = ~0U;
>
> - if ( (rc = p2m_alloc_table(d)) != 0 )
> - return rc;
> -
> rc = prepare_dtb(d, &kinfo);
> if ( rc < 0 )
> return rc;
> @@ -288,8 +285,6 @@ int construct_dom0(struct domain *d)
> printk("Map VGIC MMIO regions 1:1 in the P2M %#llx->%#llx\n",
> 0x2C008000ULL, 0x2DFFFFFFULL);
> map_mmio_regions(d, 0x2C008000, 0x2DFFFFFF, 0x2C008000);
>
> - gicv_setup(d);
> -
> printk("Routing peripheral interrupts to guest\n");
> /* TODO Get from device tree */
> gic_route_irq_to_guest(d, 34, "timer0");
> diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c
> index 339c327..a398f92 100644
> --- a/xen/arch/arm/gic.c
> +++ b/xen/arch/arm/gic.c
> @@ -541,14 +541,13 @@ void gic_interrupt(struct cpu_user_regs *regs, int
> is_fiq)
> do_IRQ(regs, irq, is_fiq);
> }
>
> -void gicv_setup(struct domain *d)
> +int gicv_setup(struct domain *d)
> {
> + printk("GICV setup for DOM%d\n", d->domain_id);
> +
> /* map the gic virtual cpu interface in the gic cpu interface region of
> * the guest */
> - printk("mapping GICC at %#"PRIx32" to %#"PRIx32"\n",
> - GIC_BASE_ADDRESS + GIC_CR_OFFSET,
> - GIC_BASE_ADDRESS + GIC_VR_OFFSET);
> - map_mmio_regions(d, GIC_BASE_ADDRESS + GIC_CR_OFFSET,
> + return map_mmio_regions(d, GIC_BASE_ADDRESS + GIC_CR_OFFSET,
> GIC_BASE_ADDRESS + GIC_CR_OFFSET + (2 * PAGE_SIZE) -
> 1,
> GIC_BASE_ADDRESS + GIC_VR_OFFSET);
> }
> diff --git a/xen/arch/arm/gic.h b/xen/arch/arm/gic.h
> index ac9cf3a..018d820 100644
> --- a/xen/arch/arm/gic.h
> +++ b/xen/arch/arm/gic.h
> @@ -148,7 +148,7 @@ extern void gic_init_secondary_cpu(void);
> /* Take down a CPU's per-CPU GIC interface */
> extern void gic_disable_cpu(void);
> /* setup the gic virtual interface for a guest */
> -extern void gicv_setup(struct domain *d);
> +extern int gicv_setup(struct domain *d);
>
> /* Context switch */
> extern void gic_save_state(struct vcpu *v);
> diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c
> index c4daf83..0665445 100644
> --- a/xen/arch/arm/p2m.c
> +++ b/xen/arch/arm/p2m.c
> @@ -4,6 +4,7 @@
> #include <xen/errno.h>
> #include <xen/domain_page.h>
> #include <asm/flushtlb.h>
> +#include "gic.h"
>
> void dump_p2m_lookup(struct domain *d, paddr_t addr)
> {
> @@ -138,7 +139,7 @@ static int p2m_create_entry(struct domain *d,
>
> BUG_ON(entry->p2m.valid);
>
> - page = alloc_domheap_page(d, 0);
> + page = alloc_domheap_page(NULL, 0);
> if ( page == NULL )
> return -ENOMEM;
>
> --
> 1.7.9.1
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |