Hi Andrew,
On 12/11/2018 16:16, Andrew Cooper wrote:
The ARM code has a chicken-and-egg problem. One of the vGIC_v3 emulations
NIT: s/vGIC_v3/vGICv3/
diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c
index 5a4f082..892445e 100644
--- a/xen/arch/arm/vgic.c
+++ b/xen/arch/arm/vgic.c
@@ -667,9 +667,27 @@ void vgic_free_virq(struct domain *d, unsigned int virq)
clear_bit(virq, d->arch.vgic.allocated_irqs);
}
-unsigned int vgic_max_vcpus(const struct domain *d)
+unsigned int vgic_max_vcpus(unsigned int domctl_vgic_version)
{
- return min_t(unsigned int, MAX_VIRT_CPUS, d->arch.vgic.handler->max_vcpus);
+ unsigned int max_vcpus;
+
+ switch ( domctl_vgic_version )
+ {
+ case XEN_DOMCTL_CONFIG_GIC_V2:
+ max_vcpus = 8;
+ break;
+
+#ifdef CONFIG_GICV3
+ case XEN_DOMCTL_CONFIG_GIC_V3:
+ max_vcpus = 4092;
The previous case was using 4096. Also, can you move the comment to keep the
rationale for the number?
+ break;
+#endif
+
+ default:
+ return 0;
+ }
+
+ return min_t(unsigned int, MAX_VIRT_CPUS, max_vcpus);
How about moving this check in the common code?
Cheers,
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel