The patch titled rtc/mc13783: protect rtc {,un}registration by mc13783 lock has been added to the -mm tree. Its filename is rtc-mc13783-protect-rtc-unregistration-by-mc13783-lock.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** See http://userweb.kernel.org/~akpm/stuff/added-to-mm.txt to find out what to do about this The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/ ------------------------------------------------------ Subject: rtc/mc13783: protect rtc {,un}registration by mc13783 lock From: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx> This is to protect from interrupt handlers using an unregistered rtc device. To assert that the reset irq is considered now before the rtc is registered the corresponding status is checked before. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx> Cc: Alessandro Zummo <a.zummo@xxxxxxxxxxxx> Cc: Paul Gortmaker <p_gortmaker@xxxxxxxxx> Cc: Valentin Longchamp <valentin.longchamp@xxxxxxx> Cc: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> Cc: Samuel Ortiz <sameo@xxxxxxxxxxxxxxx> Cc: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx> Cc: Luotao Fu <l.fu@xxxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- drivers/rtc/rtc-mc13783.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff -puN drivers/rtc/rtc-mc13783.c~rtc-mc13783-protect-rtc-unregistration-by-mc13783-lock drivers/rtc/rtc-mc13783.c --- a/drivers/rtc/rtc-mc13783.c~rtc-mc13783-protect-rtc-unregistration-by-mc13783-lock +++ a/drivers/rtc/rtc-mc13783.c @@ -169,6 +169,7 @@ static int __devinit mc13783_rtc_probe(s { int ret; struct mc13783_rtc *priv; + int rtcrst_pending; priv = kzalloc(sizeof(*priv), GFP_KERNEL); if (!priv) @@ -177,8 +178,6 @@ static int __devinit mc13783_rtc_probe(s priv->mc13783 = dev_get_drvdata(pdev->dev.parent); platform_set_drvdata(pdev, priv); - priv->valid = 1; - mc13783_lock(priv->mc13783); ret = mc13783_irq_request(priv->mc13783, MC13783_IRQ_RTCRST, @@ -186,33 +185,37 @@ static int __devinit mc13783_rtc_probe(s if (ret) goto err_reset_irq_request; + ret = mc13783_irq_status(priv->mc13783, MC13783_IRQ_RTCRST, + NULL, &rtcrst_pending); + if (ret) + goto err_reset_irq_status; + + priv->valid = !rtcrst_pending; + ret = mc13783_irq_request_nounmask(priv->mc13783, MC13783_IRQ_1HZ, mc13783_rtc_update_handler, DRIVER_NAME, priv); if (ret) goto err_update_irq_request; - mc13783_unlock(priv->mc13783); - priv->rtc = rtc_device_register(pdev->name, &pdev->dev, &mc13783_rtc_ops, THIS_MODULE); - if (IS_ERR(priv->rtc)) { ret = PTR_ERR(priv->rtc); - mc13783_lock(priv->mc13783); - mc13783_irq_free(priv->mc13783, MC13783_IRQ_1HZ, priv); err_update_irq_request: +err_reset_irq_status: + mc13783_irq_free(priv->mc13783, MC13783_IRQ_RTCRST, priv); err_reset_irq_request: - mc13783_unlock(priv->mc13783); - platform_set_drvdata(pdev, NULL); kfree(priv); } + mc13783_unlock(priv->mc13783); + return ret; } @@ -220,10 +223,10 @@ static int __devexit mc13783_rtc_remove( { struct mc13783_rtc *priv = platform_get_drvdata(pdev); - rtc_device_unregister(priv->rtc); - mc13783_lock(priv->mc13783); + rtc_device_unregister(priv->rtc); + mc13783_irq_free(priv->mc13783, MC13783_IRQ_1HZ, priv); mc13783_irq_free(priv->mc13783, MC13783_IRQ_RTCRST, priv); _ Patches currently in -mm which might be from u.kleine-koenig@xxxxxxxxxxxxxx are origin.patch linux-next.patch hrtimer-correct-a-few-numbers-in-comments.patch clockevents-ensure-taht-min_delta_ns-is-increased-in-error-path.patch timer-print-function-name-for-timer-callbacks-modifying-preemption-count.patch genirq-warn-about-irqf_sharedirqf_disabled-at-the-right-place.patch rtc-pcf2123-move-pcf2123_remove-to-devexittext.patch rtc-hctosys-only-claim-the-rtc-provided-the-system-time-if-it-did.patch mc13783-rename-mc13783_unmaskack_irq-to-have-a-mc13783_irq-prefix.patch input-mc13783-ts-dont-use-deprecated-mc13783-api-calls.patch rtc-mc13783-dont-use-deprecated-mc13783-api-calls.patch mfd-mc13783-new-function-reading-irq-mask-and-status-register.patch rtc-mc13783-protect-rtc-unregistration-by-mc13783-lock.patch rtc-mc13783-implement-alarm.patch w1-mxc_w1-move-probe-and-remove-to-the-dev-text-area.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html