mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-04 18:09:57 +00:00
![Logan Gunthorpe](/assets/img/avatar_default.png)
Mostly straightforward, but we had to remove the rtc_dev_add/del_device functions as they split up the cdev_add and the device_add. Doing this also revealed that there was likely another subtle bug: seeing cdev_add was done after device_register, the cdev probably was not ready before device_add when the uevent occurs. This would race with userspace, if it tried to use the device directly after the uevent. This is fixed just by using the new helper function. Another weird thing is this driver would, in some error cases, call cdev_add() without calling cdev_init. This patchset corrects this by avoiding calling cdev_add if the devt is not set. Signed-off-by: Logan Gunthorpe <logang@deltatee.com> Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
47 lines
827 B
C
47 lines
827 B
C
#ifdef CONFIG_RTC_INTF_DEV
|
|
|
|
extern void __init rtc_dev_init(void);
|
|
extern void __exit rtc_dev_exit(void);
|
|
extern void rtc_dev_prepare(struct rtc_device *rtc);
|
|
|
|
#else
|
|
|
|
static inline void rtc_dev_init(void)
|
|
{
|
|
}
|
|
|
|
static inline void rtc_dev_exit(void)
|
|
{
|
|
}
|
|
|
|
static inline void rtc_dev_prepare(struct rtc_device *rtc)
|
|
{
|
|
}
|
|
|
|
#endif
|
|
|
|
#ifdef CONFIG_RTC_INTF_PROC
|
|
|
|
extern void rtc_proc_add_device(struct rtc_device *rtc);
|
|
extern void rtc_proc_del_device(struct rtc_device *rtc);
|
|
|
|
#else
|
|
|
|
static inline void rtc_proc_add_device(struct rtc_device *rtc)
|
|
{
|
|
}
|
|
|
|
static inline void rtc_proc_del_device(struct rtc_device *rtc)
|
|
{
|
|
}
|
|
|
|
#endif
|
|
|
|
#ifdef CONFIG_RTC_INTF_SYSFS
|
|
const struct attribute_group **rtc_get_dev_attribute_groups(void);
|
|
#else
|
|
static inline const struct attribute_group **rtc_get_dev_attribute_groups(void)
|
|
{
|
|
return NULL;
|
|
}
|
|
#endif
|