@@ -639,6 +639,8 @@ static int virtio_vsock_probe(struct virtio_device *vdev)mutex_unlock(&the_virtio_vsock_mutex);+virtio_device_ready(vdev);+return0;out:
Just notice this:
commit 5b40a7daf51812b35cf05d1601a779a7043f8414
Author: Rusty Russell [off-list ref]
Date: Tue Feb 17 16:12:44 2015 +1030
virtio: don't set VIRTIO_CONFIG_S_DRIVER_OK twice.
I noticed this with the console device. It's not *wrong*, just a bit
weird.
Signed-off-by: Rusty Russell [off-list ref]
@@ -236,7 +236,10 @@ static int virtio_dev_probe(struct device *_d)if(err)gotoerr;-add_status(dev,VIRTIO_CONFIG_S_DRIVER_OK);+/* If probe didn't do it, mark device DRIVER_OK ourselves. */+if(!(dev->config->get_status(dev)&VIRTIO_CONFIG_S_DRIVER_OK))+virtio_device_ready(dev);+if(drv->scan)drv->scan(dev);
So I think we need to be consistent: switch to use virtio_device_ready()
for all the drivers, and then we can remove this step and warn if
(DRIVER_OK) is not set.
Thanks
Just notice this:
commit 5b40a7daf51812b35cf05d1601a779a7043f8414
Author: Rusty Russell [off-list ref]
Date: Tue Feb 17 16:12:44 2015 +1030
virtio: don't set VIRTIO_CONFIG_S_DRIVER_OK twice.
I noticed this with the console device. It's not *wrong*, just a bit
weird.
Signed-off-by: Rusty Russell [off-list ref]
@@ -236,7 +236,10 @@ static int virtio_dev_probe(struct device *_d)
if (err)
goto err;
- add_status(dev, VIRTIO_CONFIG_S_DRIVER_OK);
+ /* If probe didn't do it, mark device DRIVER_OK ourselves. */
+ if (!(dev->config->get_status(dev) & VIRTIO_CONFIG_S_DRIVER_OK))
+ virtio_device_ready(dev);
+
if (drv->scan)
drv->scan(dev);
So I think we need to be consistent: switch to use
virtio_device_ready() for all the drivers, and then we can remove this
step and warn if (DRIVER_OK) is not set.
Thanks
@@ -639,6 +639,8 @@ static int virtio_vsock_probe(struct virtio_device *vdev)mutex_unlock(&the_virtio_vsock_mutex);+virtio_device_ready(vdev);
Why is this patch necessary?
The core virtio_dev_probe() code already calls virtio_device_ready for
us:
static int virtio_dev_probe(struct device *_d)
{
...
err = drv->probe(dev);
if (err)
goto err;
/* If probe didn't do it, mark device DRIVER_OK ourselves. */
if (!(dev->config->get_status(dev) & VIRTIO_CONFIG_S_DRIVER_OK))
virtio_device_ready(dev);
@@ -639,6 +639,8 @@ static int virtio_vsock_probe(struct virtio_device *vdev)mutex_unlock(&the_virtio_vsock_mutex);+virtio_device_ready(vdev);
Why is this patch necessary?
The core virtio_dev_probe() code already calls virtio_device_ready for
us:
static int virtio_dev_probe(struct device *_d)
{
...
err = drv->probe(dev);
if (err)
goto err;
/* If probe didn't do it, mark device DRIVER_OK ourselves. */
if (!(dev->config->get_status(dev) & VIRTIO_CONFIG_S_DRIVER_OK))
virtio_device_ready(dev);
@@ -639,6 +639,8 @@ static int virtio_vsock_probe(struct virtio_device *vdev)mutex_unlock(&the_virtio_vsock_mutex);+virtio_device_ready(vdev);
Why is this patch necessary?
Sorry, I didn't notice the check in virtio_dev_probe(),
As Jason comment, I alsoe think we need to be consistent: switch to use
virtio_device_ready() for all the drivers. What's opinion about this?
The core virtio_dev_probe() code already calls virtio_device_ready for
us:
static int virtio_dev_probe(struct device *_d)
{
...
err = drv->probe(dev);
if (err)
goto err;
/* If probe didn't do it, mark device DRIVER_OK ourselves. */
if (!(dev->config->get_status(dev) & VIRTIO_CONFIG_S_DRIVER_OK))
virtio_device_ready(dev);
@@ -639,6 +639,8 @@ static int virtio_vsock_probe(struct virtio_device *vdev)mutex_unlock(&the_virtio_vsock_mutex);+virtio_device_ready(vdev);
Why is this patch necessary?
Sorry, I didn't notice the check in virtio_dev_probe(),
As Jason comment, I alsoe think we need to be consistent: switch to use
virtio_device_ready() for all the drivers. What's opinion about this?
According to the documentation the virtio_device_read() API is optional:
/**
* virtio_device_ready - enable vq use in probe function
* @vdev: the device
*
* Driver must call this to use vqs in the probe function.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
*
* Note: vqs are enabled automatically after probe returns.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
*/
Many drivers do not use vqs during the ->probe() function. They don't
need to call virtio_device_ready(). That's why the virtio_vsock driver
doesn't call it.
But if a ->probe() function needs to send virtqueue buffers, e.g. to
query the device or activate some device feature, then the driver will
need to call it explicitly.
The documentation is clear and this design is less error-prone than
relying on all drivers to call it manually. I suggest leaving things
unchanged.
Stefan
@@ -639,6 +639,8 @@ static int virtio_vsock_probe(struct virtio_device *vdev)mutex_unlock(&the_virtio_vsock_mutex);+virtio_device_ready(vdev);
Why is this patch necessary?
Sorry, I didn't notice the check in virtio_dev_probe(),
As Jason comment, I alsoe think we need to be consistent: switch to use
virtio_device_ready() for all the drivers. What's opinion about this?
According to the documentation the virtio_device_read() API is optional:
/**
* virtio_device_ready - enable vq use in probe function
* @vdev: the device
*
* Driver must call this to use vqs in the probe function.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
*
* Note: vqs are enabled automatically after probe returns.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
*/
Many drivers do not use vqs during the ->probe() function. They don't
need to call virtio_device_ready(). That's why the virtio_vsock driver
doesn't call it.
But if a ->probe() function needs to send virtqueue buffers, e.g. to
query the device or activate some device feature, then the driver will
need to call it explicitly.
The documentation is clear and this design is less error-prone than
relying on all drivers to call it manually. I suggest leaving things
unchanged.
Stefan