Skip to content

Commit f2b44cd

Browse files
weiping zhangmstsirkin
authored andcommitted
virtio: split device_register into device_initialize and device_add
In order to make caller do a simple cleanup, we split device_register into device_initialize and device_add. device_initialize always succeeds, so the caller can always use put_device when register_virtio_device faild. Signed-off-by: weiping zhang <zhangweiping@didichuxing.com> Suggested-by: Cornelia Huck <cohuck@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com>
1 parent f6f93f7 commit f2b44cd

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

drivers/virtio/virtio.c

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -303,11 +303,21 @@ void unregister_virtio_driver(struct virtio_driver *driver)
303303
}
304304
EXPORT_SYMBOL_GPL(unregister_virtio_driver);
305305

306+
/**
307+
* register_virtio_device - register virtio device
308+
* @dev : virtio device to be registered
309+
*
310+
* On error, the caller must call put_device on &@dev->dev (and not kfree),
311+
* as another code path may have obtained a reference to @dev.
312+
*
313+
* Returns: 0 on suceess, -error on failure
314+
*/
306315
int register_virtio_device(struct virtio_device *dev)
307316
{
308317
int err;
309318

310319
dev->dev.bus = &virtio_bus;
320+
device_initialize(&dev->dev);
311321

312322
/* Assign a unique device index and hence name. */
313323
err = ida_simple_get(&virtio_index_ida, 0, 0, GFP_KERNEL);
@@ -330,9 +340,11 @@ int register_virtio_device(struct virtio_device *dev)
330340

331341
INIT_LIST_HEAD(&dev->vqs);
332342

333-
/* device_register() causes the bus infrastructure to look for a
334-
* matching driver. */
335-
err = device_register(&dev->dev);
343+
/*
344+
* device_add() causes the bus infrastructure to look for a matching
345+
* driver.
346+
*/
347+
err = device_add(&dev->dev);
336348
if (err)
337349
ida_simple_remove(&virtio_index_ida, dev->index);
338350
out:

0 commit comments

Comments
 (0)