[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC 01/22] xen/arm: vGIC: Export vgic_vN ops rather than add an indirection
The function vgic_vN_init only calls register_vgic_ops. As it will never contain anything else, domain initialization code should be in the callback domain_init, remove them and directly use the VGIC ops in the commmon vGIC code. Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx> --- xen/arch/arm/vgic-v2.c | 9 +-------- xen/arch/arm/vgic-v3.c | 9 +-------- xen/arch/arm/vgic.c | 11 ++--------- xen/include/asm-arm/vgic.h | 9 ++++++--- 4 files changed, 10 insertions(+), 28 deletions(-) diff --git a/xen/arch/arm/vgic-v2.c b/xen/arch/arm/vgic-v2.c index b5a8f29..9eecabc 100644 --- a/xen/arch/arm/vgic-v2.c +++ b/xen/arch/arm/vgic-v2.c @@ -539,20 +539,13 @@ static int vgic_v2_domain_init(struct domain *d) return 0; } -static const struct vgic_ops vgic_v2_ops = { +const struct vgic_ops vgic_v2_ops = { .vcpu_init = vgic_v2_vcpu_init, .domain_init = vgic_v2_domain_init, .get_irq_priority = vgic_v2_get_irq_priority, .get_target_vcpu = vgic_v2_get_target_vcpu, }; -int vgic_v2_init(struct domain *d) -{ - register_vgic_ops(d, &vgic_v2_ops); - - return 0; -} - /* * Local variables: * mode: C diff --git a/xen/arch/arm/vgic-v3.c b/xen/arch/arm/vgic-v3.c index 45a46c3..67c7508 100644 --- a/xen/arch/arm/vgic-v3.c +++ b/xen/arch/arm/vgic-v3.c @@ -1172,7 +1172,7 @@ static int vgic_v3_domain_init(struct domain *d) return 0; } -static const struct vgic_ops v3_ops = { +const struct vgic_ops vgic_v3_ops = { .vcpu_init = vgic_v3_vcpu_init, .domain_init = vgic_v3_domain_init, .get_irq_priority = vgic_v3_get_irq_priority, @@ -1180,13 +1180,6 @@ static const struct vgic_ops v3_ops = { .emulate_sysreg = vgic_v3_emulate_sysreg, }; -int vgic_v3_init(struct domain *d) -{ - register_vgic_ops(d, &v3_ops); - - return 0; -} - /* * Local variables: * mode: C diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c index 8f91962..a2320f6 100644 --- a/xen/arch/arm/vgic.c +++ b/xen/arch/arm/vgic.c @@ -83,13 +83,11 @@ int domain_vgic_init(struct domain *d) { #ifdef CONFIG_ARM_64 case GIC_V3: - if ( vgic_v3_init(d) ) - return -ENODEV; + d->arch.vgic.handler = &vgic_v3_ops; break; #endif case GIC_V2: - if ( vgic_v2_init(d) ) - return -ENODEV; + d->arch.vgic.handler = &vgic_v2_ops; break; default: return -ENODEV; @@ -127,11 +125,6 @@ int domain_vgic_init(struct domain *d) return 0; } -void register_vgic_ops(struct domain *d, const struct vgic_ops *ops) -{ - d->arch.vgic.handler = ops; -} - void domain_vgic_free(struct domain *d) { xfree(d->arch.vgic.shared_irqs); diff --git a/xen/include/asm-arm/vgic.h b/xen/include/asm-arm/vgic.h index aba0d80..5cd9ed4 100644 --- a/xen/include/asm-arm/vgic.h +++ b/xen/include/asm-arm/vgic.h @@ -190,9 +190,12 @@ extern struct vgic_irq_rank *vgic_rank_irq(struct vcpu *v, unsigned int irq); extern int vgic_emulate(struct cpu_user_regs *regs, union hsr hsr); extern void vgic_disable_irqs(struct vcpu *v, uint32_t r, int n); extern void vgic_enable_irqs(struct vcpu *v, uint32_t r, int n); -extern void register_vgic_ops(struct domain *d, const struct vgic_ops *ops); -int vgic_v2_init(struct domain *d); -int vgic_v3_init(struct domain *d); + +#define DEFINE_VGIC_OPS(version) \ + extern const struct vgic_ops vgic_v##version##_ops; +DEFINE_VGIC_OPS(2) +DEFINE_VGIC_OPS(3) +#undef DEFINE_VGIC_OPS extern int vcpu_vgic_free(struct vcpu *v); extern int vgic_to_sgi(struct vcpu *v, register_t sgir, -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |