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,16 +130,16 @@ static void vhost_defered_probe_work(FAR void *arg)
{ {
if (item->device->id.device == driver->device) if (item->device->id.device == driver->device)
{ {
item->device->priv = driver;
if (driver->probe(item->device) >= 0) if (driver->probe(item->device) >= 0)
{ {
vhosterr("device probe success device=%p\n", item->device); vhosterr("device probe success device=%p\n", item->device);
item->driver = driver; item->driver = driver;
}
break; break;
} }
} }
} }
}
if (!list_is_empty(&g_vhost_bus.defered_device)) if (!list_is_empty(&g_vhost_bus.defered_device))
{ {
@@ -207,6 +207,7 @@ int vhost_register_driver(FAR struct vhost_driver *driver)
* matched. * matched.
*/ */
item->device->priv = driver;
if (driver->probe(item->device) >= 0) if (driver->probe(item->device) >= 0)
{ {
item->driver = driver; 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 = FAR struct virtio_device_item_s *item =
container_of(node, struct virtio_device_item_s, node); container_of(node, struct virtio_device_item_s, node);
FAR struct virtio_device *device = item->device; 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 found the device in the device list, call driver probe,
* if probe success, assign item->driver to indicate the device * if probe success, assign item->driver to indicate the device
* matched. * matched.
*/ */
device->priv = driver;
if (driver->probe(device) >= 0) if (driver->probe(device) >= 0)
{ {
item->driver = driver; item->driver = driver;
@@ -327,14 +328,14 @@ int virtio_register_device(FAR struct virtio_device *device)
* matched. * matched.
*/ */
device->priv = driver;
if (driver->probe(device) >= 0) if (driver->probe(device) >= 0)
{ {
item->driver = driver; item->driver = driver;
}
break; break;
} }
} }
}
nxmutex_unlock(&g_virtio_bus.lock); nxmutex_unlock(&g_virtio_bus.lock);
return ret; return ret;