[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v6 22/31] xen/arm: ITS: Add virtual ITS availability check helper
From: Vijaya Kumar K <Vijaya.Kumar@xxxxxxxxxxxxxxxxxx> Introduce vgic_is_lpi_supported() helper function to know virtual ITS availability for a domain Signed-off-by: Vijaya Kumar K <Vijaya.Kumar@xxxxxxxxxxxxxxxxxx> --- xen/arch/arm/vgic-v2.c | 5 +++++ xen/arch/arm/vgic-v3.c | 6 ++++++ xen/arch/arm/vgic.c | 5 +++++ xen/include/asm-arm/vgic.h | 7 +++++++ 4 files changed, 23 insertions(+) diff --git a/xen/arch/arm/vgic-v2.c b/xen/arch/arm/vgic-v2.c index 600d27e..15ec809 100644 --- a/xen/arch/arm/vgic-v2.c +++ b/xen/arch/arm/vgic-v2.c @@ -32,6 +32,8 @@ #include <asm/platform.h> #include <asm/vgic.h> +static struct vgic_info vgic_v2_info; + static struct { bool_t enabled; /* Distributor interface address */ @@ -594,10 +596,13 @@ static int vgic_v2_domain_init(struct domain *d) register_mmio_handler(d, &vgic_v2_distr_mmio_handler, d->arch.vgic.dbase, PAGE_SIZE); + vgic_v2_info.its_enabled = 0; + return 0; } static const struct vgic_ops vgic_v2_ops = { + .info = &vgic_v2_info, .vcpu_init = vgic_v2_vcpu_init, .domain_init = vgic_v2_domain_init, .get_irq_priority = vgic_v2_get_irq_priority, diff --git a/xen/arch/arm/vgic-v3.c b/xen/arch/arm/vgic-v3.c index 863648c..771bfd1 100644 --- a/xen/arch/arm/vgic-v3.c +++ b/xen/arch/arm/vgic-v3.c @@ -49,6 +49,8 @@ */ #define VGICD_CTLR_DEFAULT (GICD_CTLR_ARE_NS) +static struct vgic_info vgic_v3_info; + static struct { bool_t enabled; /* Distributor interface address */ @@ -1247,10 +1249,14 @@ static int vgic_v3_domain_init(struct domain *d) d->arch.vgic.ctlr = VGICD_CTLR_DEFAULT; + if ( is_hardware_domain(d) && gic_lpi_supported() ) + vgic_v3_info.its_enabled = 1; + return 0; } static const struct vgic_ops v3_ops = { + .info = &vgic_v3_info, .vcpu_init = vgic_v3_vcpu_init, .domain_init = vgic_v3_domain_init, .get_irq_priority = vgic_v3_get_irq_priority, diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c index 6b6bbce..d5e9251 100644 --- a/xen/arch/arm/vgic.c +++ b/xen/arch/arm/vgic.c @@ -61,6 +61,11 @@ struct vgic_irq_rank *vgic_rank_irq(struct vcpu *v, unsigned int irq) return vgic_get_rank(v, rank); } +bool_t vgic_is_lpi_supported(struct domain *d) +{ + return d->arch.vgic.handler->info->its_enabled; +} + static void vgic_init_pending_irq(struct pending_irq *p, unsigned int virq) { INIT_LIST_HEAD(&p->inflight); diff --git a/xen/include/asm-arm/vgic.h b/xen/include/asm-arm/vgic.h index 659d919..1c88300 100644 --- a/xen/include/asm-arm/vgic.h +++ b/xen/include/asm-arm/vgic.h @@ -110,7 +110,13 @@ static inline void sgi_target_init(struct sgi_target *sgi_target) sgi_target->list = 0; } +struct vgic_info { + bool_t its_enabled; +}; + struct vgic_ops { + /* Hold vGIC information */ + const struct vgic_info *info; /* Initialize vGIC */ int (*vcpu_init)(struct vcpu *v); /* Domain specific initialization of vGIC */ @@ -309,6 +315,7 @@ enum gic_sgi_mode; #define vgic_num_line_irqs(d) ((d)->arch.vgic.nr_spis + 32) +extern bool_t vgic_is_lpi_supported(struct domain *d); extern int domain_vgic_init(struct domain *d, unsigned int nr_spis); extern void domain_vgic_free(struct domain *d); extern int vcpu_vgic_init(struct vcpu *v); -- 1.7.9.5 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |