|
@@ -732,6 +732,7 @@ int __must_check __media_device_register(struct media_device *mdev,
|
|
|
if (ret < 0) {
|
|
|
/* devnode free is handled in media_devnode_*() */
|
|
|
mdev->devnode = NULL;
|
|
|
+ media_devnode_unregister_prepare(devnode);
|
|
|
media_devnode_unregister(devnode);
|
|
|
return ret;
|
|
|
}
|
|
@@ -788,6 +789,9 @@ void media_device_unregister(struct media_device *mdev)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ /* Clear the devnode register bit to avoid races with media dev open */
|
|
|
+ media_devnode_unregister_prepare(mdev->devnode);
|
|
|
+
|
|
|
/* Remove all entities from the media device */
|
|
|
list_for_each_entry_safe(entity, next, &mdev->entities, graph_obj.list)
|
|
|
__media_device_unregister_entity(entity);
|
|
@@ -808,13 +812,10 @@ void media_device_unregister(struct media_device *mdev)
|
|
|
|
|
|
dev_dbg(mdev->dev, "Media device unregistered\n");
|
|
|
|
|
|
- /* Check if mdev devnode was registered */
|
|
|
- if (media_devnode_is_registered(mdev->devnode)) {
|
|
|
- device_remove_file(&mdev->devnode->dev, &dev_attr_model);
|
|
|
- media_devnode_unregister(mdev->devnode);
|
|
|
- /* devnode free is handled in media_devnode_*() */
|
|
|
- mdev->devnode = NULL;
|
|
|
- }
|
|
|
+ device_remove_file(&mdev->devnode->dev, &dev_attr_model);
|
|
|
+ media_devnode_unregister(mdev->devnode);
|
|
|
+ /* devnode free is handled in media_devnode_*() */
|
|
|
+ mdev->devnode = NULL;
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(media_device_unregister);
|
|
|
|