virtio/vhost: assign the virtio/vhost_drvier to device->priv before probe

So the driver can get the driver pointer by vdev/hdev->priv,
and later vdev/hdev->priv can be used to store other data such as the
virtio/vhost drivers' private data.

Signed-off-by: Bowen Wang <wangbowen6@xiaomi.com>
This commit is contained in:
Bowen Wang
2024-06-13 14:54:28 +08:00
committed by Xiang Xiao
parent c42576e87b
commit 51d6e8f49e
2 changed files with 7 additions and 5 deletions
+3 -2
View File
@@ -130,13 +130,13 @@ static void vhost_defered_probe_work(FAR void *arg)
{
if (item->device->id.device == driver->device)
{
item->device->priv = driver;
if (driver->probe(item->device) >= 0)
{
vhosterr("device probe success device=%p\n", item->device);
item->driver = driver;
break;
}
break;
}
}
}
@@ -207,6 +207,7 @@ int vhost_register_driver(FAR struct vhost_driver *driver)
* matched.
*/
item->device->priv = driver;
if (driver->probe(item->device) >= 0)
{
item->driver = driver;
+4 -3
View File
@@ -225,13 +225,14 @@ int virtio_register_driver(FAR struct virtio_driver *driver)
FAR struct virtio_device_item_s *item =
container_of(node, struct virtio_device_item_s, node);
FAR struct virtio_device *device = item->device;
if (driver->device == device->id.device)
if (item->driver == NULL && driver->device == device->id.device)
{
/* If found the device in the device list, call driver probe,
* if probe success, assign item->driver to indicate the device
* matched.
*/
device->priv = driver;
if (driver->probe(device) >= 0)
{
item->driver = driver;
@@ -327,12 +328,12 @@ int virtio_register_device(FAR struct virtio_device *device)
* matched.
*/
device->priv = driver;
if (driver->probe(device) >= 0)
{
item->driver = driver;
break;
}
break;
}
}