disable_irq() after request_irq() still has a time gap in which interrupts can come. request_irq() with IRQF_NO_AUTOEN flag will disable IRQ auto-enable because of requesting. this patch is made base on "add IRQF_NO_AUTOEN for request_irq" which is being merged: https://lore.kernel.org/patchwork/patch/1388765/ Signed-off-by: Tian Tao <tiantao6@xxxxxxxxxxxxx> --- drivers/rtc/rtc-vr41xx.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/drivers/rtc/rtc-vr41xx.c b/drivers/rtc/rtc-vr41xx.c index 5a9f9ad..1a02b52 100644 --- a/drivers/rtc/rtc-vr41xx.c +++ b/drivers/rtc/rtc-vr41xx.c @@ -312,8 +312,8 @@ static int rtc_probe(struct platform_device *pdev) goto err_iounmap_all; } - retval = devm_request_irq(&pdev->dev, aie_irq, elapsedtime_interrupt, 0, - "elapsed_time", pdev); + retval = devm_request_irq(&pdev->dev, aie_irq, elapsedtime_interrupt, + IRQF_NO_AUTOEN, "elapsed_time", pdev); if (retval < 0) goto err_iounmap_all; @@ -323,16 +323,13 @@ static int rtc_probe(struct platform_device *pdev) goto err_iounmap_all; } - retval = devm_request_irq(&pdev->dev, pie_irq, rtclong1_interrupt, 0, - "rtclong1", pdev); + retval = devm_request_irq(&pdev->dev, pie_irq, rtclong1_interrupt, + IRQF_NO_AUTOEN, "rtclong1", pdev); if (retval < 0) goto err_iounmap_all; platform_set_drvdata(pdev, rtc); - disable_irq(aie_irq); - disable_irq(pie_irq); - dev_info(&pdev->dev, "Real Time Clock of NEC VR4100 series\n"); retval = devm_rtc_register_device(rtc); -- 2.7.4