aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael S. Tsirkin <mst@redhat.com>2015-01-13 09:34:58 -0500
committerRusty Russell <rusty@rustcorp.com.au>2015-01-21 00:58:55 -0500
commitd3f5f065603705cd4275d57324c49e391f786b5e (patch)
tree8bf7e4230355ec31f9d96d727a4a0b4a42e8acf9
parent3909213cfd9224cb1827d557fb6eb5ebdb8ddcbe (diff)
virtio_pci_modern: support devices with no config
Virtio 1.0 spec lists device config as optional. Set get/set callbacks to NULL. Drivers can check that and fail gracefully. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-rw-r--r--drivers/virtio/virtio_pci_modern.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/drivers/virtio/virtio_pci_modern.c b/drivers/virtio/virtio_pci_modern.c
index 0e54cc88fdf5..68ebc204e3ea 100644
--- a/drivers/virtio/virtio_pci_modern.c
+++ b/drivers/virtio/virtio_pci_modern.c
@@ -422,6 +422,21 @@ static void del_vq(struct virtio_pci_vq_info *info)
422 free_pages_exact(info->queue, vring_pci_size(info->num)); 422 free_pages_exact(info->queue, vring_pci_size(info->num));
423} 423}
424 424
425static const struct virtio_config_ops virtio_pci_config_nodev_ops = {
426 .get = NULL,
427 .set = NULL,
428 .generation = vp_generation,
429 .get_status = vp_get_status,
430 .set_status = vp_set_status,
431 .reset = vp_reset,
432 .find_vqs = vp_modern_find_vqs,
433 .del_vqs = vp_del_vqs,
434 .get_features = vp_get_features,
435 .finalize_features = vp_finalize_features,
436 .bus_name = vp_bus_name,
437 .set_vq_affinity = vp_set_vq_affinity,
438};
439
425static const struct virtio_config_ops virtio_pci_config_ops = { 440static const struct virtio_config_ops virtio_pci_config_ops = {
426 .get = vp_get, 441 .get = vp_get,
427 .set = vp_set, 442 .set = vp_set,
@@ -652,9 +667,11 @@ int virtio_pci_modern_probe(struct virtio_pci_device *vp_dev)
652 &vp_dev->device_len); 667 &vp_dev->device_len);
653 if (!vp_dev->device) 668 if (!vp_dev->device)
654 goto err_map_device; 669 goto err_map_device;
655 }
656 670
657 vp_dev->vdev.config = &virtio_pci_config_ops; 671 vp_dev->vdev.config = &virtio_pci_config_ops;
672 } else {
673 vp_dev->vdev.config = &virtio_pci_config_nodev_ops;
674 }
658 675
659 vp_dev->config_vector = vp_config_vector; 676 vp_dev->config_vector = vp_config_vector;
660 vp_dev->setup_vq = setup_vq; 677 vp_dev->setup_vq = setup_vq;