mirror of https://github.com/xemu-project/xemu.git
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;
|
||||
}
|
||||
|
||||
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,
|
||||
int cpu, uint32_t *val, bool write)
|
||||
{
|
||||
|
@ -553,6 +568,11 @@ static void kvm_arm_gic_realize(DeviceState *dev, Error **errp)
|
|||
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 */
|
||||
memory_region_init_reservation(&s->iomem, OBJECT(s),
|
||||
"kvm-gic_dist", 0x1000);
|
||||
|
|
Loading…
Reference in New Issue