Re: [PATCH 3/4] rtc: Introduce devm_rtc_allocate_device_priv

Dan Carpenter
2025-01-20T10:57:11Z

On Mon, Jan 20, 2025 at 10:25:35AM +0800, Peng Fan (OSS) wrote:
> int __devm_rtc_register_device(struct module *owner, struct rtc_device *rtc)
> diff --git a/drivers/rtc/dev.c b/drivers/rtc/dev.c
> index c4a3ab53dcd4b7280a3a2981fe842729603a1feb..e0e1a488b795645d7c9453490d6cdba510cc5db5 100644
> --- a/drivers/rtc/dev.c
> +++ b/drivers/rtc/dev.c
> @@ -410,7 +410,8 @@ static long rtc_dev_ioctl(struct file *file,
> }
> default:
> if (rtc->ops->param_get)
> - err = rtc->ops->param_get(rtc->dev.parent, &param);
> + err = rtc->ops->param_get(rtc->priv ?
> + &rtc->dev : rtc->dev.parent, &param);

This seems kind of horrible... I can't think of anywhere else which
does something like this.

It would almost be better to do something like:

err = rtc->ops->param_get(rtc->priv ? (void *)rtc : rtc->dev.parent, &param);

The advatange of this is that it looks totally horrible from the get go
instead of only subtly wrong. And it would immediately crash if you got
it wrong implementing the ->param_get() function pointer.

regards,
dan carpenter