Hi 2017-03-03 16:09 GMT+01:00 Alexandre Belloni < alexandre.bell...@free-electrons.com>:
> On 03/03/2017 at 15:46:36 +0100, Michal Simek wrote: > > This is the function which is making the difference. > > > > It was added by John Stultz: > > "timers: Introduce in-kernel alarm-timer interface" > > (sha1: ff3ead96d17f47ee70c294a5cc2cce9b61e82f0f) > > > > Probe function has device_init_wakeup(&pdev->dev, 1); > > That's why reference is taken (get_device() below) > > > > static int alarmtimer_rtc_add_device(struct device *dev, > > struct class_interface *class_intf) > > { > > unsigned long flags; > > struct rtc_device *rtc = to_rtc_device(dev); > > > > if (rtcdev) > > return -EBUSY; > > > > pr_info("%s\n", __func__); > > > > if (!rtc->ops->set_alarm) > > return -1; > > > > pr_info("%s\n", __func__); > > > > if (!device_may_wakeup(rtc->dev.parent)) > > return -1; > > > > spin_lock_irqsave(&rtcdev_lock, flags); > > if (!rtcdev) { > > rtcdev = rtc; > > /* hold a reference so it doesn't go away */ > > get_device(dev); > > } > > spin_unlock_irqrestore(&rtcdev_lock, flags); > > return 0; > > } > > > > And in remove function device_init_wakeup(&pdev->dev, 0); > > But because there is still a reference rtc_device_release() is not > > called and ida is not freed. > > > > Generic question which I think should be asked if in this situation > > driver should be modular or not. > > If driver can be modular then somewhere should be put_device(). > > > > From a quick look, I'd say the issue is coming from > 8bc0dafb5cf38a19484dfb16e2c6d29e85820046 which removed the call to > rtc_class_open so you can actually unload the module. > > This is from 2011 which is kind of surprising. M -- Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91 w: www.monstr.eu p: +42-0-721842854 Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/ Maintainer of Linux kernel - Xilinx Zynq ARM architecture Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform -- You received this message because you are subscribed to "rtc-linux". Membership options at http://groups.google.com/group/rtc-linux . Please read http://groups.google.com/group/rtc-linux/web/checklist before submitting a driver. --- You received this message because you are subscribed to the Google Groups "rtc-linux" group. To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.