[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-arm] [RFC v2 4/7] hw/intc/arm_gicv3_kvm: Get prepared to handl
From: |
Peter Maydell |
Subject: |
Re: [Qemu-arm] [RFC v2 4/7] hw/intc/arm_gicv3_kvm: Get prepared to handle multiple redist regions |
Date: |
Tue, 22 May 2018 13:34:54 +0100 |
On 13 May 2018 at 15:35, Eric Auger <address@hidden> wrote:
> Let's check if KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION is supported.
> If not, we check the number of redist region is equal to 1 and use the
> legacy KVM_VGIC_V3_ADDR_TYPE_REDIST attribute. Otherwise we use
> the new attribute and allow to register multiple regions to the
> KVM device.
>
> Signed-off-by: Eric Auger <address@hidden>
> ---
> hw/intc/arm_gicv3_kvm.c | 31 ++++++++++++++++++++++++++++---
> 1 file changed, 28 insertions(+), 3 deletions(-)
>
> diff --git a/hw/intc/arm_gicv3_kvm.c b/hw/intc/arm_gicv3_kvm.c
> index 7e76b87..1b32804 100644
> --- a/hw/intc/arm_gicv3_kvm.c
> +++ b/hw/intc/arm_gicv3_kvm.c
> @@ -714,6 +714,7 @@ static void kvm_arm_gicv3_realize(DeviceState *dev, Error
> **errp)
> {
> GICv3State *s = KVM_ARM_GICV3(dev);
> KVMARMGICv3Class *kgc = KVM_ARM_GICV3_GET_CLASS(s);
> + bool multiple_redist_region_allowed;
> Error *local_err = NULL;
> int i;
>
> @@ -750,6 +751,18 @@ static void kvm_arm_gicv3_realize(DeviceState *dev,
> Error **errp)
> return;
> }
>
> + multiple_redist_region_allowed =
> + kvm_device_check_attr(s->dev_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
> + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION);
> +
> + if (!multiple_redist_region_allowed && s->nb_redist_regions > 1) {
> + error_setg(errp, "Multiple VGICv3 redistributor regions are not "
> + "supported by this host kernel");
> + error_append_hint(errp, "A maximum of %d VCPUs can be used",
> + s->redist_region_count[0]);
> + return;
> + }
> +
> kvm_device_access(s->dev_fd, KVM_DEV_ARM_VGIC_GRP_NR_IRQS,
> 0, &s->num_irq, true, &error_abort);
>
> @@ -759,9 +772,21 @@ static void kvm_arm_gicv3_realize(DeviceState *dev,
> Error **errp)
>
> kvm_arm_register_device(&s->iomem_dist, -1, KVM_DEV_ARM_VGIC_GRP_ADDR,
> KVM_VGIC_V3_ADDR_TYPE_DIST, s->dev_fd, 0);
> - kvm_arm_register_device(&s->iomem_redist[0], -1,
> - KVM_DEV_ARM_VGIC_GRP_ADDR,
> - KVM_VGIC_V3_ADDR_TYPE_REDIST, s->dev_fd, 0);
> +
> + if (!multiple_redist_region_allowed) {
> + kvm_arm_register_device(&s->iomem_redist[0], -1,
> + KVM_DEV_ARM_VGIC_GRP_ADDR,
> + KVM_VGIC_V3_ADDR_TYPE_REDIST, s->dev_fd, 0);
> + } else {
> + for (i = s->nb_redist_regions; i >= 0; i--) {
> + uint64_t val = i | ((uint64_t)s->redist_region_count[i] << 52);
A comment here about what this value is would be useful.
> +
> + kvm_arm_register_device(&s->iomem_redist[i], -1,
> + KVM_DEV_ARM_VGIC_GRP_ADDR,
> + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION,
> + s->dev_fd, val);
> + }
> + }
>
> if (kvm_has_gsi_routing()) {
> /* set up irq routing */
Otherwise
Reviewed-by: Peter Maydell <address@hidden>
thanks
-- PMM
- [Qemu-arm] [RFC v2 2/7] target/arm: Allow KVM device address overwriting, (continued)
[Qemu-arm] [RFC v2 1/7] linux-headers: Partial update for KVM/ARM multiple redistributor region registration, Eric Auger, 2018/05/13
[Qemu-arm] [RFC v2 4/7] hw/intc/arm_gicv3_kvm: Get prepared to handle multiple redist regions, Eric Auger, 2018/05/13
- Re: [Qemu-arm] [RFC v2 4/7] hw/intc/arm_gicv3_kvm: Get prepared to handle multiple redist regions,
Peter Maydell <=
[Qemu-arm] [RFC v2 5/7] hw/arm/virt: GICv3 DT node with one or two redistributor regions, Eric Auger, 2018/05/13
[Qemu-arm] [RFC v2 6/7] hw/arm/virt-acpi-build: Advertise one or two GICR structures, Eric Auger, 2018/05/13
[Qemu-arm] [RFC v2 7/7] hw/arm/virt: Register two redistributor regions when necessary, Eric Auger, 2018/05/13