diff options
author | Will Deacon <will.deacon@arm.com> | 2014-09-02 05:27:36 -0400 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2014-09-17 07:10:10 -0400 |
commit | 80ce1639727e9d38729c34f162378508c307ca25 (patch) | |
tree | c7ffcba90bd9af321c66285174aab7775b7941d9 /virt/kvm/vfio.c | |
parent | 84877d93336de21a6251db00b841468a83c65906 (diff) |
KVM: VFIO: register kvm_device_ops dynamically
Now that we have a dynamic means to register kvm_device_ops, use that
for the VFIO kvm device, instead of relying on the static table.
This is achieved by a module_init call to register the ops with KVM.
Cc: Gleb Natapov <gleb@kernel.org>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Alex Williamson <Alex.Williamson@redhat.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'virt/kvm/vfio.c')
-rw-r--r-- | virt/kvm/vfio.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/virt/kvm/vfio.c b/virt/kvm/vfio.c index ba1a93f935c7..bb11b36ee8a2 100644 --- a/virt/kvm/vfio.c +++ b/virt/kvm/vfio.c | |||
@@ -246,6 +246,16 @@ static void kvm_vfio_destroy(struct kvm_device *dev) | |||
246 | kfree(dev); /* alloc by kvm_ioctl_create_device, free by .destroy */ | 246 | kfree(dev); /* alloc by kvm_ioctl_create_device, free by .destroy */ |
247 | } | 247 | } |
248 | 248 | ||
249 | static int kvm_vfio_create(struct kvm_device *dev, u32 type); | ||
250 | |||
251 | static struct kvm_device_ops kvm_vfio_ops = { | ||
252 | .name = "kvm-vfio", | ||
253 | .create = kvm_vfio_create, | ||
254 | .destroy = kvm_vfio_destroy, | ||
255 | .set_attr = kvm_vfio_set_attr, | ||
256 | .has_attr = kvm_vfio_has_attr, | ||
257 | }; | ||
258 | |||
249 | static int kvm_vfio_create(struct kvm_device *dev, u32 type) | 259 | static int kvm_vfio_create(struct kvm_device *dev, u32 type) |
250 | { | 260 | { |
251 | struct kvm_device *tmp; | 261 | struct kvm_device *tmp; |
@@ -268,10 +278,8 @@ static int kvm_vfio_create(struct kvm_device *dev, u32 type) | |||
268 | return 0; | 278 | return 0; |
269 | } | 279 | } |
270 | 280 | ||
271 | struct kvm_device_ops kvm_vfio_ops = { | 281 | static int __init kvm_vfio_ops_init(void) |
272 | .name = "kvm-vfio", | 282 | { |
273 | .create = kvm_vfio_create, | 283 | return kvm_register_device_ops(&kvm_vfio_ops, KVM_DEV_TYPE_VFIO); |
274 | .destroy = kvm_vfio_destroy, | 284 | } |
275 | .set_attr = kvm_vfio_set_attr, | 285 | module_init(kvm_vfio_ops_init); |
276 | .has_attr = kvm_vfio_has_attr, | ||
277 | }; | ||