On Thursday 20 September 2007, Rusty Russell wrote: > + * virtio_driver - operations for a virtio I/O driver > + * @name: the name of the driver (KBUILD_MODNAME). > + * @owner: the module which contains these routines (ie. THIS_MODULE). > + * @id_table: the ids (we re-use PCI ids) serviced by this driver. > + * @probe: the function to call when a device is found. Returns a token for > + * remove, or PTR_ERR(). > + * @remove: the function when a device is removed. > + */ > +struct virtio_driver { > + const char *name; > + struct module *owner; > + struct pci_device_id *id_table; > + void *(*probe)(struct device *device, > + struct virtio_config_space *config, > + struct virtqueue_ops *vqops); > + void (*remove)(void *dev); > +}; > + > +int register_virtio_driver(struct virtio_driver *drv); > +void unregister_virtio_driver(struct virtio_driver *drv); > + > +/* The particular virtio backend supplies these. */ > +struct virtio_backend_ops { > + int (*register_driver)(struct virtio_driver *drv); > + void (*unregister_driver)(struct virtio_driver *drv); > +}; > +extern struct virtio_backend_ops virtio_backend_ops; This still seems a little awkward. From what I understand, you register a virtio_driver, which leads to a pci_driver (or whatever you are based on) to be registered behind the covers, so that the pci_device can be used directly as the virtio device. I think there should instead be a pci_driver that automatically binds to all PCI based virtio imlpementations and creates a child device for the actual virtio_device. Then you can have the virtio_driver itself be based on a device_driver, and you can get rid of the global virtio_backend_ops. That will be useful when a virtual machine has two ways to get at the virtio devices, e.g. a KVM guest that has both hcall based probing for virtio devices and some other virtio devices that are exported through PCI. Arnd <>< _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/virtualization