If the user sets the nodrop parameter, print a deprecation warning once.
Hopefully they will come to the mailing list if it is an ABI change.
Now that we have a callback, take this chance to parse the parameter as
a boolean. We still say to userspace that it is a uint to avoid ABI
changes.
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
---
drivers/media/usb/uvc/uvc_driver.c | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
index 10812a841587..d8e8675dd2cd 100644
--- a/drivers/media/usb/uvc/uvc_driver.c
+++ b/drivers/media/usb/uvc/uvc_driver.c
@@ -2424,8 +2424,25 @@ module_param_call(clock, uvc_clock_param_set, uvc_clock_param_get,
MODULE_PARM_DESC(clock, "Video buffers timestamp clock");
module_param_named(hwtimestamps, uvc_hw_timestamps_param, uint, 0644);
MODULE_PARM_DESC(hwtimestamps, "Use hardware timestamps");
-module_param_named(nodrop, uvc_no_drop_param, uint, 0644);
+
+static int param_set_nodrop(const char *val, const struct kernel_param *kp)
+{
+ pr_warn_once("uvcvideo: "
+ DEPRECATED
+ "nodrop parameter will be eventually removed.\n");
+ return param_set_bool(val, kp);
+}
+
+static const struct kernel_param_ops param_ops_nodrop = {
+ .set = param_set_nodrop,
+ .get = param_get_uint,
+};
+
+param_check_uint(nodrop, &uvc_no_drop_param);
+module_param_cb(nodrop, ¶m_ops_nodrop, &uvc_no_drop_param, 0644);
+__MODULE_PARM_TYPE(nodrop, "uint");
MODULE_PARM_DESC(nodrop, "Don't drop incomplete frames");
+
module_param_named(quirks, uvc_quirks_param, uint, 0644);
MODULE_PARM_DESC(quirks, "Forced device quirks");
module_param_named(trace, uvc_dbg_param, uint, 0644);
--
2.47.1.613.gc27f4b7a9f-goog
Hi Ricardo,
Thank you for the patch.
On Wed, Dec 18, 2024 at 09:39:11PM +0000, Ricardo Ribalda wrote:
> If the user sets the nodrop parameter, print a deprecation warning once.
> Hopefully they will come to the mailing list if it is an ABI change.
>
> Now that we have a callback, take this chance to parse the parameter as
> a boolean. We still say to userspace that it is a uint to avoid ABI
> changes.
>
> Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
> drivers/media/usb/uvc/uvc_driver.c | 19 ++++++++++++++++++-
> 1 file changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
> index 10812a841587..d8e8675dd2cd 100644
> --- a/drivers/media/usb/uvc/uvc_driver.c
> +++ b/drivers/media/usb/uvc/uvc_driver.c
> @@ -2424,8 +2424,25 @@ module_param_call(clock, uvc_clock_param_set, uvc_clock_param_get,
> MODULE_PARM_DESC(clock, "Video buffers timestamp clock");
> module_param_named(hwtimestamps, uvc_hw_timestamps_param, uint, 0644);
> MODULE_PARM_DESC(hwtimestamps, "Use hardware timestamps");
> -module_param_named(nodrop, uvc_no_drop_param, uint, 0644);
> +
> +static int param_set_nodrop(const char *val, const struct kernel_param *kp)
> +{
> + pr_warn_once("uvcvideo: "
> + DEPRECATED
> + "nodrop parameter will be eventually removed.\n");
> + return param_set_bool(val, kp);
> +}
> +
> +static const struct kernel_param_ops param_ops_nodrop = {
> + .set = param_set_nodrop,
> + .get = param_get_uint,
> +};
> +
> +param_check_uint(nodrop, &uvc_no_drop_param);
> +module_param_cb(nodrop, ¶m_ops_nodrop, &uvc_no_drop_param, 0644);
> +__MODULE_PARM_TYPE(nodrop, "uint");
> MODULE_PARM_DESC(nodrop, "Don't drop incomplete frames");
> +
> module_param_named(quirks, uvc_quirks_param, uint, 0644);
> MODULE_PARM_DESC(quirks, "Forced device quirks");
> module_param_named(trace, uvc_dbg_param, uint, 0644);
--
Regards,
Laurent Pinchart
© 2016 - 2025 Red Hat, Inc.