linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] media: v4l2-core: expose the device after it was registered.
@ 2019-01-22  8:34 Liu, Xinwu
  2019-01-22 10:03 ` Sakari Ailus
  0 siblings, 1 reply; 5+ messages in thread
From: Liu, Xinwu @ 2019-01-22  8:34 UTC (permalink / raw)
  To: mchehab
  Cc: hans.verkuil, sakari.ailus, niklas.soderlund+renesas, ezequiel,
	sque, linux-media, linux-kernel, xinwu.liu

device_register exposes the device to userspace.

Therefore, while the register process is ongoing, the userspace program
will fail to open the device (ENODEV will be set to errno currently).
The program in userspace must re-open the device to cover this case.

It is more reasonable to expose the device after everythings ready.

Signed-off-by: Liu, Xinwu <xinwu.liu@intel.com>
---
 drivers/media/v4l2-core/v4l2-dev.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c
index d7528f8..01e5cc9 100644
--- a/drivers/media/v4l2-core/v4l2-dev.c
+++ b/drivers/media/v4l2-core/v4l2-dev.c
@@ -993,16 +993,11 @@ int __video_register_device(struct video_device *vdev,
 		goto cleanup;
 	}
 
-	/* Part 4: register the device with sysfs */
+	/* Part 4: Prepare to register the device */
 	vdev->dev.class = &video_class;
 	vdev->dev.devt = MKDEV(VIDEO_MAJOR, vdev->minor);
 	vdev->dev.parent = vdev->dev_parent;
 	dev_set_name(&vdev->dev, "%s%d", name_base, vdev->num);
-	ret = device_register(&vdev->dev);
-	if (ret < 0) {
-		pr_err("%s: device_register failed\n", __func__);
-		goto cleanup;
-	}
 	/* Register the release callback that will be called when the last
 	   reference to the device goes away. */
 	vdev->dev.release = v4l2_device_release;
@@ -1020,6 +1015,13 @@ int __video_register_device(struct video_device *vdev,
 	/* Part 6: Activate this minor. The char device can now be used. */
 	set_bit(V4L2_FL_REGISTERED, &vdev->flags);
 
+	/* Part 7: Register the device with sysfs */
+	ret = device_register(&vdev->dev);
+	if (ret < 0) {
+		pr_err("%s: device_register failed\n", __func__);
+		goto cleanup;
+	}
+
 	return 0;
 
 cleanup:
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2019-05-10 10:27 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-22  8:34 [PATCH] media: v4l2-core: expose the device after it was registered Liu, Xinwu
2019-01-22 10:03 ` Sakari Ailus
2019-01-24  7:11   ` xinwu
2019-01-24  7:48     ` Sakari Ailus
2019-05-10 10:27     ` Hans Verkuil

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).