Hi Alex, On Wed, Jul 09, 2014 at 05:19:24PM +0100, Alex Williamson wrote: > On Tue, 2014-07-01 at 15:45 +0100, Will Deacon wrote: > > 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) > > kfree(dev); /* alloc by kvm_ioctl_create_device, free by .destroy */ > > } > > > > +static int kvm_vfio_create(struct kvm_device *dev, u32 type); > > + > > +static struct kvm_device_ops kvm_vfio_ops = { > > + .name = "kvm-vfio", > > + .create = kvm_vfio_create, > > + .destroy = kvm_vfio_destroy, > > + .set_attr = kvm_vfio_set_attr, > > + .has_attr = kvm_vfio_has_attr, > > +}; > > + > > Why move the struct? We wouldn't need the prototype if it was left in > place and it seems like the only change we're making to set it static. > Functionally the change is fine, but the ordering was cleaner before > imho. Thanks, The problem is that kvm_vfio_create takes the address of kvm_vfio_ops: /* Only one VFIO "device" per VM */ list_for_each_entry(tmp, &dev->kvm->devices, vm_node) if (tmp->ops == &kvm_vfio_ops) return -EBUSY; so you have a circular dependency, which I just resolved in the most obvious way to me. I'm happy to solve it a better way, if you have a preference? Will --->8 arch/arm64/kvm/../../../virt/kvm/vfio.c: In function ‘kvm_vfio_create’: arch/arm64/kvm/../../../virt/kvm/vfio.c:256:20: error: ‘kvm_vfio_ops’ undeclared (first use in this function) if (tmp->ops == &kvm_vfio_ops) ^ arch/arm64/kvm/../../../virt/kvm/vfio.c:256:20: note: each undeclared identifier is reported only once for each function it appears in -- 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