On Tue, 1 Jul 2014 15:45:15 +0100 Will Deacon <will.deacon@xxxxxxx> wrote: > kvm_ioctl_create_device currently has knowledge of all the device types > and their associated ops. This is fairly inflexible when adding support > for new in-kernel device emulations, so move what we currently have out > into a table, which can support dynamic registration of ops by new > drivers for virtual hardware. > > I didn't try to port all current drivers over, as it's not always clear > which initialisation hook the ops should be registered from. I think that last paragraph should rather go into a cover letter :) > > Cc: Cornelia Huck <cornelia.huck@xxxxxxxxxx> > Cc: Alex Williamson <Alex.Williamson@xxxxxxxxxx> > Cc: Alex Graf <agraf@xxxxxxx> > Cc: Gleb Natapov <gleb@xxxxxxxxxx> > Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx> > Cc: Marc Zyngier <marc.zyngier@xxxxxxx> > Cc: Christoffer Dall <christoffer.dall@xxxxxxxxxx> > Signed-off-by: Will Deacon <will.deacon@xxxxxxx> > --- > > v1 -> v2: Added enum for KVM_DEV_TYPE* IDs, changed limits to ARRAY_SIZE, > removed stray semicolon, had a crack at porting VFIO, included > Cornelia's s390 FLIC patch. ...and the changelog as well (or keep changelogs for individual patches). > > include/linux/kvm_host.h | 1 + > include/uapi/linux/kvm.h | 22 +++++++++++----- > virt/kvm/kvm_main.c | 65 ++++++++++++++++++++++++++++-------------------- > 3 files changed, 55 insertions(+), 33 deletions(-) > > diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h > index e11d8f170a62..6875cc225dff 100644 > --- a/include/uapi/linux/kvm.h > +++ b/include/uapi/linux/kvm.h > @@ -940,15 +940,25 @@ struct kvm_device_attr { > __u64 addr; /* userspace address of attr data */ > }; > > -#define KVM_DEV_TYPE_FSL_MPIC_20 1 > -#define KVM_DEV_TYPE_FSL_MPIC_42 2 > -#define KVM_DEV_TYPE_XICS 3 > -#define KVM_DEV_TYPE_VFIO 4 > #define KVM_DEV_VFIO_GROUP 1 > #define KVM_DEV_VFIO_GROUP_ADD 1 > #define KVM_DEV_VFIO_GROUP_DEL 2 > -#define KVM_DEV_TYPE_ARM_VGIC_V2 5 > -#define KVM_DEV_TYPE_FLIC 6 > + > +enum kvm_device_type { > + KVM_DEV_TYPE_FSL_MPIC_20 = 1, > +#define KVM_DEV_TYPE_FSL_MPIC_20 KVM_DEV_TYPE_FSL_MPIC_20 > + KVM_DEV_TYPE_FSL_MPIC_42, > +#define KVM_DEV_TYPE_FSL_MPIC_42 KVM_DEV_TYPE_FSL_MPIC_42 > + KVM_DEV_TYPE_XICS, > +#define KVM_DEV_TYPE_XICS KVM_DEV_TYPE_XICS > + KVM_DEV_TYPE_VFIO, > +#define KVM_DEV_TYPE_VFIO KVM_DEV_TYPE_VFIO > + KVM_DEV_TYPE_ARM_VGIC_V2, > +#define KVM_DEV_TYPE_ARM_VGIC_V2 KVM_DEV_TYPE_ARM_VGIC_V2 > + KVM_DEV_TYPE_FLIC, > +#define KVM_DEV_TYPE_FLIC KVM_DEV_TYPE_FLIC > + KVM_DEV_TYPE_MAX, Do you want to add the individual values to the enum? A removal of a type would be an API break (so we should be safe against renumbering), but it's sometimes helpful if one can get the numeric value at a glance. > +}; > > /* > * ioctls for VM fds -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html