|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 03/15] 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>
---
Changes in v2:
- Gate the vgic v3 ops with HAS_GICV3
- Didn't retain Ian's ack for this change
---
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 | 11 ++++++++---
4 files changed, 12 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 4af5a84..2b9501c 100644
--- a/xen/arch/arm/vgic-v3.c
+++ b/xen/arch/arm/vgic-v3.c
@@ -1144,7 +1144,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,
@@ -1152,13 +1152,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 dfd959a..c9676e0 100644
--- a/xen/arch/arm/vgic.c
+++ b/xen/arch/arm/vgic.c
@@ -84,13 +84,11 @@ int domain_vgic_init(struct domain *d, unsigned int nr_spis)
{
#ifdef HAS_GICV3
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;
@@ -128,11 +126,6 @@ int domain_vgic_init(struct domain *d, unsigned int
nr_spis)
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)
{
int i;
diff --git a/xen/include/asm-arm/vgic.h b/xen/include/asm-arm/vgic.h
index 8d22532..4422a24 100644
--- a/xen/include/asm-arm/vgic.h
+++ b/xen/include/asm-arm/vgic.h
@@ -191,9 +191,14 @@ 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)
+#ifdef HAS_GICV3
+DEFINE_VGIC_OPS(3)
+#endif
+#undef DEFINE_VGIC_OPS
extern int vcpu_vgic_free(struct vcpu *v);
extern int vgic_to_sgi(struct vcpu *v, register_t sgir,
--
2.4.3
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |