mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 00:22:00 +02:00
KVM: arm64: gic-v5: Introduce kvm_arm_vgic_v5_ops and register them
Only the KVM_DEV_ARM_VGIC_GRP_CTRL->KVM_DEV_ARM_VGIC_CTRL_INIT op is currently supported. All other ops are stubbed out. Co-authored-by: Timothy Hayes <timothy.hayes@arm.com> Signed-off-by: Timothy Hayes <timothy.hayes@arm.com> Signed-off-by: Sascha Bischoff <sascha.bischoff@arm.com> Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com> Link: https://patch.msgid.link/20260319154937.3619520-36-sascha.bischoff@arm.com Signed-off-by: Marc Zyngier <maz@kernel.org>
This commit is contained in:
parent
61d4ad5183
commit
37a2529468
|
|
@ -336,6 +336,10 @@ int kvm_register_vgic_device(unsigned long type)
|
|||
break;
|
||||
ret = kvm_vgic_register_its_device();
|
||||
break;
|
||||
case KVM_DEV_TYPE_ARM_VGIC_V5:
|
||||
ret = kvm_register_device_ops(&kvm_arm_vgic_v5_ops,
|
||||
KVM_DEV_TYPE_ARM_VGIC_V5);
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
@ -715,3 +719,73 @@ struct kvm_device_ops kvm_arm_vgic_v3_ops = {
|
|||
.get_attr = vgic_v3_get_attr,
|
||||
.has_attr = vgic_v3_has_attr,
|
||||
};
|
||||
|
||||
static int vgic_v5_set_attr(struct kvm_device *dev,
|
||||
struct kvm_device_attr *attr)
|
||||
{
|
||||
switch (attr->group) {
|
||||
case KVM_DEV_ARM_VGIC_GRP_ADDR:
|
||||
case KVM_DEV_ARM_VGIC_GRP_CPU_SYSREGS:
|
||||
case KVM_DEV_ARM_VGIC_GRP_NR_IRQS:
|
||||
return -ENXIO;
|
||||
case KVM_DEV_ARM_VGIC_GRP_CTRL:
|
||||
switch (attr->attr) {
|
||||
case KVM_DEV_ARM_VGIC_CTRL_INIT:
|
||||
return vgic_set_common_attr(dev, attr);
|
||||
default:
|
||||
return -ENXIO;
|
||||
}
|
||||
default:
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static int vgic_v5_get_attr(struct kvm_device *dev,
|
||||
struct kvm_device_attr *attr)
|
||||
{
|
||||
switch (attr->group) {
|
||||
case KVM_DEV_ARM_VGIC_GRP_ADDR:
|
||||
case KVM_DEV_ARM_VGIC_GRP_CPU_SYSREGS:
|
||||
case KVM_DEV_ARM_VGIC_GRP_NR_IRQS:
|
||||
return -ENXIO;
|
||||
case KVM_DEV_ARM_VGIC_GRP_CTRL:
|
||||
switch (attr->attr) {
|
||||
case KVM_DEV_ARM_VGIC_CTRL_INIT:
|
||||
return vgic_get_common_attr(dev, attr);
|
||||
default:
|
||||
return -ENXIO;
|
||||
}
|
||||
default:
|
||||
return -ENXIO;
|
||||
}
|
||||
}
|
||||
|
||||
static int vgic_v5_has_attr(struct kvm_device *dev,
|
||||
struct kvm_device_attr *attr)
|
||||
{
|
||||
switch (attr->group) {
|
||||
case KVM_DEV_ARM_VGIC_GRP_ADDR:
|
||||
case KVM_DEV_ARM_VGIC_GRP_CPU_SYSREGS:
|
||||
case KVM_DEV_ARM_VGIC_GRP_NR_IRQS:
|
||||
return -ENXIO;
|
||||
case KVM_DEV_ARM_VGIC_GRP_CTRL:
|
||||
switch (attr->attr) {
|
||||
case KVM_DEV_ARM_VGIC_CTRL_INIT:
|
||||
return 0;
|
||||
default:
|
||||
return -ENXIO;
|
||||
}
|
||||
default:
|
||||
return -ENXIO;
|
||||
}
|
||||
}
|
||||
|
||||
struct kvm_device_ops kvm_arm_vgic_v5_ops = {
|
||||
.name = "kvm-arm-vgic-v5",
|
||||
.create = vgic_create,
|
||||
.destroy = vgic_destroy,
|
||||
.set_attr = vgic_v5_set_attr,
|
||||
.get_attr = vgic_v5_get_attr,
|
||||
.has_attr = vgic_v5_has_attr,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -2366,6 +2366,7 @@ void kvm_unregister_device_ops(u32 type);
|
|||
extern struct kvm_device_ops kvm_mpic_ops;
|
||||
extern struct kvm_device_ops kvm_arm_vgic_v2_ops;
|
||||
extern struct kvm_device_ops kvm_arm_vgic_v3_ops;
|
||||
extern struct kvm_device_ops kvm_arm_vgic_v5_ops;
|
||||
|
||||
#ifdef CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user