arm_gic_kvm: Tell kernel about number of IRQs
Newer kernels support a device attribute on the GIC which allows us to tell it how many IRQs this GIC instance is configured with; use it, if it exists. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org> Message-id: 1417718679-1071-1-git-send-email-peter.maydell@linaro.org
This commit is contained in:
parent
a554ecb49d
commit
72149414e2
@ -92,6 +92,21 @@ static bool kvm_arm_gic_can_save_restore(GICState *s)
|
|||||||
return s->dev_fd >= 0;
|
return s->dev_fd >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool kvm_gic_supports_attr(GICState *s, int group, int attrnum)
|
||||||
|
{
|
||||||
|
struct kvm_device_attr attr = {
|
||||||
|
.group = group,
|
||||||
|
.attr = attrnum,
|
||||||
|
.flags = 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (s->dev_fd == -1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return kvm_device_ioctl(s->dev_fd, KVM_HAS_DEVICE_ATTR, &attr) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void kvm_gic_access(GICState *s, int group, int offset,
|
static void kvm_gic_access(GICState *s, int group, int offset,
|
||||||
int cpu, uint32_t *val, bool write)
|
int cpu, uint32_t *val, bool write)
|
||||||
{
|
{
|
||||||
@ -553,6 +568,11 @@ static void kvm_arm_gic_realize(DeviceState *dev, Error **errp)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (kvm_gic_supports_attr(s, KVM_DEV_ARM_VGIC_GRP_NR_IRQS, 0)) {
|
||||||
|
uint32_t numirqs = s->num_irq;
|
||||||
|
kvm_gic_access(s, KVM_DEV_ARM_VGIC_GRP_NR_IRQS, 0, 0, &numirqs, 1);
|
||||||
|
}
|
||||||
|
|
||||||
/* Distributor */
|
/* Distributor */
|
||||||
memory_region_init_reservation(&s->iomem, OBJECT(s),
|
memory_region_init_reservation(&s->iomem, OBJECT(s),
|
||||||
"kvm-gic_dist", 0x1000);
|
"kvm-gic_dist", 0x1000);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user