* [PULL] clockevents: a couple of fixes for tip/timers/urgent @ 2015-08-06 15:29 Daniel Lezcano 2015-08-06 15:32 ` [PATCH 1/2] clockevents/drivers/timer-stm32: Improve dependencies of timer-stm32 Daniel Lezcano 2015-08-07 7:19 ` [PULL] clockevents: a couple of fixes for tip/timers/urgent Ingo Molnar 0 siblings, 2 replies; 6+ messages in thread From: Daniel Lezcano @ 2015-08-06 15:29 UTC (permalink / raw) To: Ingo Molnar, Thomas Gleixner; +Cc: Linux Kernel Mailing List Hi Ingo, this pull request contains the following changes: - Prevented to suspend or resume the sh_cmt clocksource when this one is not enabled (Geert Uytterhoeven) - Improved build coverage with COMPILE_TEST for the stm32 timer (Maxime Coquelin) Thanks ! -- Daniel The following changes since commit 0f44705175347ec96935d60b765b5d14ecc763bb: tick: Move the export of tick_broadcast_oneshot_control to the proper place (2015-07-14 12:01:04 +0200) are available in the git repository at: http://git.linaro.org/people/daniel.lezcano/linux.git clockevents/4.2-fixes for you to fetch changes up to 1822a48be12f7ce2799d3423e49b967896794c4d: clockevents/drivers/sh_cmt: Only perform clocksource suspend/resume if enabled (2015-08-06 17:17:20 +0200) ---------------------------------------------------------------- Geert Uytterhoeven (1): clockevents/drivers/sh_cmt: Only perform clocksource suspend/resume if enabled Maxime Coquelin (1): clockevents/drivers/timer-stm32: Improve dependencies of timer-stm32 drivers/clocksource/Kconfig | 4 ++-- drivers/clocksource/sh_cmt.c | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) -- <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook | <http://twitter.com/#!/linaroorg> Twitter | <http://www.linaro.org/linaro-blog/> Blog ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] clockevents/drivers/timer-stm32: Improve dependencies of timer-stm32 2015-08-06 15:29 [PULL] clockevents: a couple of fixes for tip/timers/urgent Daniel Lezcano @ 2015-08-06 15:32 ` Daniel Lezcano 2015-08-06 15:32 ` [PATCH 2/2] clockevents/drivers/sh_cmt: Only perform clocksource suspend/resume if enabled Daniel Lezcano 2015-08-07 7:19 ` [PULL] clockevents: a couple of fixes for tip/timers/urgent Ingo Molnar 1 sibling, 1 reply; 6+ messages in thread From: Daniel Lezcano @ 2015-08-06 15:32 UTC (permalink / raw) To: mingo, tglx Cc: linux-kernel, Maxime Coquelin, Paul Gortmaker, kbuild test robot From: Maxime Coquelin <mcoquelin.stm32@gmail.com> This patch improves the build coverage with COMPILE_TEST so it is not only limited to ARM builds. The fix consists in making the STM32 timer depend on GENERIC_CLOCKEVENTS. Reported-by: kbuild test robot <fengguang.wu@intel.com> Cc: Paul Gortmaker <paul.gortmaker@windriver.com> Cc: Daniel Lezcano <daniel.lezcano@linaro.org> Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Maxime Coquelin <mcoquelin.stm32@gmail.com> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> --- drivers/clocksource/Kconfig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig index 4e57730..e110ec3 100644 --- a/drivers/clocksource/Kconfig +++ b/drivers/clocksource/Kconfig @@ -112,8 +112,8 @@ config CLKSRC_LPC32XX select CLKSRC_OF config CLKSRC_STM32 - bool "Clocksource for STM32 SoCs" if !ARCH_STM32 - depends on OF && ARM && (ARCH_STM32 || COMPILE_TEST) + bool "Clocksource for STM32 SoCs" if COMPILE_TEST + depends on OF && GENERIC_CLOCKEVENTS select CLKSRC_MMIO config ARM_ARCH_TIMER -- 1.9.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] clockevents/drivers/sh_cmt: Only perform clocksource suspend/resume if enabled 2015-08-06 15:32 ` [PATCH 1/2] clockevents/drivers/timer-stm32: Improve dependencies of timer-stm32 Daniel Lezcano @ 2015-08-06 15:32 ` Daniel Lezcano 2015-08-09 10:25 ` [tip:timers/urgent] " tip-bot for Geert Uytterhoeven 0 siblings, 1 reply; 6+ messages in thread From: Daniel Lezcano @ 2015-08-06 15:32 UTC (permalink / raw) To: mingo, tglx; +Cc: linux-kernel, Geert Uytterhoeven, Laurent Pinchart From: Geert Uytterhoeven <geert+renesas@glider.be> Currently the sh_cmt clocksource timer is disabled or enabled unconditionally on clocksource suspend resp. resume, even if a better clocksource is present (e.g. arch_sys_counter) and the sh_cmt clocksource is not enabled. As sh_cmt is a syscore device when its timer is enabled, this may lead to a genpd.prepared_count imbalance in the presence of PM Domains, which may cause a lock-up during reboot after s2ram. During suspend: - pm_genpd_prepare() is called for all non-syscore devices (incl. sh_cmt), increasing genpd.prepared_count for each device, - clocksource.suspend() is called for all clocksource devices, - sh_cmt_clocksource_suspend() calls sh_cmt_stop(), which is a no-op as the clocksource was not enabled. During resume: - clocksource.resume() is called for all clocksource devices, - sh_cmt_clocksource_resume() calls sh_cmt_start(), which enables the clocksource timer, and turns sh_cmt into a syscore device, - pm_genpd_complete() is called for all non-syscore devices (excl. sh_cmt now!), decreasing genpd.prepared_count for each device but sh_cmt. Now genpd.prepared_count of the PM Domain containing sh_cmt is still 1 instead of zero. On subsequent suspend/resume cycles, sh_cmt is still a syscore device, hence it's skipped for pm_genpd_{prepare,complete}(), keeping the imbalance of genpd.prepared_count at 1. During reboot: - platform_drv_shutdown() is called for any platform device that has a driver with a .shutdown() method (only rcar-dmac on R-Car Gen2), - platform_drv_shutdown() calls dev_pm_domain_detach(), which calls genpd_dev_pm_detach(), - genpd_dev_pm_detach() keeps calling pm_genpd_remove_device() until it doesn't return -EAGAIN[*], - If the device is part of the same PM Domain as sh_cmt, pm_genpd_remove_device() always fails with -EAGAIN due to genpd.prepared_count > 0. - Infinite loop in genpd_dev_pm_detach()[*]. [*] Commit 93af5e9354432828 ("PM / Domains: Avoid infinite loops in attach/detach code") already limited the number of loop iterations, avoiding the lock-up. To fix this, only disable or enable the clocksource timer on clocksource suspend resp. resume if the clocksource was enabled. This was tested on r8a7791/koelsch with the CPG Clock Domain: - using arch_sys_counter as the clocksource, which is the default, and which showed the problem, - using sh_cmt as a clocksource ("echo ffca0000.timer > \ /sys/devices/system/clocksource/clocksource0/current_clocksource"), which behaves the same as before. Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> --- drivers/clocksource/sh_cmt.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/clocksource/sh_cmt.c b/drivers/clocksource/sh_cmt.c index b8ff3c6..c96de14 100644 --- a/drivers/clocksource/sh_cmt.c +++ b/drivers/clocksource/sh_cmt.c @@ -661,6 +661,9 @@ static void sh_cmt_clocksource_suspend(struct clocksource *cs) { struct sh_cmt_channel *ch = cs_to_sh_cmt(cs); + if (!ch->cs_enabled) + return; + sh_cmt_stop(ch, FLAG_CLOCKSOURCE); pm_genpd_syscore_poweroff(&ch->cmt->pdev->dev); } @@ -669,6 +672,9 @@ static void sh_cmt_clocksource_resume(struct clocksource *cs) { struct sh_cmt_channel *ch = cs_to_sh_cmt(cs); + if (!ch->cs_enabled) + return; + pm_genpd_syscore_poweron(&ch->cmt->pdev->dev); sh_cmt_start(ch, FLAG_CLOCKSOURCE); } -- 1.9.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [tip:timers/urgent] clockevents/drivers/sh_cmt: Only perform clocksource suspend/resume if enabled 2015-08-06 15:32 ` [PATCH 2/2] clockevents/drivers/sh_cmt: Only perform clocksource suspend/resume if enabled Daniel Lezcano @ 2015-08-09 10:25 ` tip-bot for Geert Uytterhoeven 0 siblings, 0 replies; 6+ messages in thread From: tip-bot for Geert Uytterhoeven @ 2015-08-09 10:25 UTC (permalink / raw) To: linux-tip-commits Cc: daniel.lezcano, mingo, geert+renesas, tglx, linux-kernel, peterz, hpa, laurent.pinchart Commit-ID: 54d46b7fbcbd00fe4b20a27208e5909facc714e3 Gitweb: http://git.kernel.org/tip/54d46b7fbcbd00fe4b20a27208e5909facc714e3 Author: Geert Uytterhoeven <geert+renesas@glider.be> AuthorDate: Thu, 6 Aug 2015 17:32:06 +0200 Committer: Ingo Molnar <mingo@kernel.org> CommitDate: Sat, 8 Aug 2015 10:50:08 +0200 clockevents/drivers/sh_cmt: Only perform clocksource suspend/resume if enabled Currently the sh_cmt clocksource timer is disabled or enabled unconditionally on clocksource suspend resp. resume, even if a better clocksource is present (e.g. arch_sys_counter) and the sh_cmt clocksource is not enabled. As sh_cmt is a syscore device when its timer is enabled, this may lead to a genpd.prepared_count imbalance in the presence of PM Domains, which may cause a lock-up during reboot after s2ram. During suspend: - pm_genpd_prepare() is called for all non-syscore devices (incl. sh_cmt), increasing genpd.prepared_count for each device, - clocksource.suspend() is called for all clocksource devices, - sh_cmt_clocksource_suspend() calls sh_cmt_stop(), which is a no-op as the clocksource was not enabled. During resume: - clocksource.resume() is called for all clocksource devices, - sh_cmt_clocksource_resume() calls sh_cmt_start(), which enables the clocksource timer, and turns sh_cmt into a syscore device, - pm_genpd_complete() is called for all non-syscore devices (excl. sh_cmt now!), decreasing genpd.prepared_count for each device but sh_cmt. Now genpd.prepared_count of the PM Domain containing sh_cmt is still 1 instead of zero. On subsequent suspend/resume cycles, sh_cmt is still a syscore device, hence it's skipped for pm_genpd_{prepare,complete}(), keeping the imbalance of genpd.prepared_count at 1. During reboot: - platform_drv_shutdown() is called for any platform device that has a driver with a .shutdown() method (only rcar-dmac on R-Car Gen2), - platform_drv_shutdown() calls dev_pm_domain_detach(), which calls genpd_dev_pm_detach(), - genpd_dev_pm_detach() keeps calling pm_genpd_remove_device() until it doesn't return -EAGAIN[*], - If the device is part of the same PM Domain as sh_cmt, pm_genpd_remove_device() always fails with -EAGAIN due to genpd.prepared_count > 0. - Infinite loop in genpd_dev_pm_detach()[*]. [*] Commit 93af5e9354432828 ("PM / Domains: Avoid infinite loops in attach/detach code") already limited the number of loop iterations, avoiding the lock-up. To fix this, only disable or enable the clocksource timer on clocksource suspend resp. resume if the clocksource was enabled. This was tested on r8a7791/koelsch with the CPG Clock Domain: - using arch_sys_counter as the clocksource, which is the default, and which showed the problem, - using sh_cmt as a clocksource ("echo ffca0000.timer > \ /sys/devices/system/clocksource/clocksource0/current_clocksource"), which behaves the same as before. Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/1438875126-12596-2-git-send-email-daniel.lezcano@linaro.org Signed-off-by: Ingo Molnar <mingo@kernel.org> --- drivers/clocksource/sh_cmt.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/clocksource/sh_cmt.c b/drivers/clocksource/sh_cmt.c index b8ff3c6..c96de14 100644 --- a/drivers/clocksource/sh_cmt.c +++ b/drivers/clocksource/sh_cmt.c @@ -661,6 +661,9 @@ static void sh_cmt_clocksource_suspend(struct clocksource *cs) { struct sh_cmt_channel *ch = cs_to_sh_cmt(cs); + if (!ch->cs_enabled) + return; + sh_cmt_stop(ch, FLAG_CLOCKSOURCE); pm_genpd_syscore_poweroff(&ch->cmt->pdev->dev); } @@ -669,6 +672,9 @@ static void sh_cmt_clocksource_resume(struct clocksource *cs) { struct sh_cmt_channel *ch = cs_to_sh_cmt(cs); + if (!ch->cs_enabled) + return; + pm_genpd_syscore_poweron(&ch->cmt->pdev->dev); sh_cmt_start(ch, FLAG_CLOCKSOURCE); } ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PULL] clockevents: a couple of fixes for tip/timers/urgent 2015-08-06 15:29 [PULL] clockevents: a couple of fixes for tip/timers/urgent Daniel Lezcano 2015-08-06 15:32 ` [PATCH 1/2] clockevents/drivers/timer-stm32: Improve dependencies of timer-stm32 Daniel Lezcano @ 2015-08-07 7:19 ` Ingo Molnar 2015-08-07 21:25 ` Geert Uytterhoeven 1 sibling, 1 reply; 6+ messages in thread From: Ingo Molnar @ 2015-08-07 7:19 UTC (permalink / raw) To: Daniel Lezcano; +Cc: Thomas Gleixner, Linux Kernel Mailing List * Daniel Lezcano <daniel.lezcano@linaro.org> wrote: > > Hi Ingo, > > this pull request contains the following changes: > > - Prevented to suspend or resume the sh_cmt clocksource when this one is > not enabled (Geert Uytterhoeven) > - Improved build coverage with COMPILE_TEST for the stm32 timer (Maxime > Coquelin) > > Thanks ! > > -- Daniel > > The following changes since commit 0f44705175347ec96935d60b765b5d14ecc763bb: > > tick: Move the export of tick_broadcast_oneshot_control to the proper > place (2015-07-14 12:01:04 +0200) > > are available in the git repository at: > > http://git.linaro.org/people/daniel.lezcano/linux.git > clockevents/4.2-fixes > > for you to fetch changes up to 1822a48be12f7ce2799d3423e49b967896794c4d: > > clockevents/drivers/sh_cmt: Only perform clocksource suspend/resume if > enabled (2015-08-06 17:17:20 +0200) > > ---------------------------------------------------------------- > Geert Uytterhoeven (1): > clockevents/drivers/sh_cmt: Only perform clocksource suspend/resume if > enabled > > Maxime Coquelin (1): > clockevents/drivers/timer-stm32: Improve dependencies of timer-stm32 > > drivers/clocksource/Kconfig | 4 ++-- Hm, so why is this an urgent fix, i.e. a regression fix? It appears to widen build coverage: config CLKSRC_STM32 - bool "Clocksource for STM32 SoCs" if !ARCH_STM32 - depends on OF && ARM && (ARCH_STM32 || COMPILE_TEST) + bool "Clocksource for STM32 SoCs" if COMPILE_TEST + depends on OF && GENERIC_CLOCKEVENTS that can at most introduce build regressions - not fix anything. If there's any other purpose of this change it's not mentioned in the changelog. Also, I think the change is broken to begin with: + bool "Clocksource for STM32 SoCs" if COMPILE_TEST this will turn off the driver even in its target platform! The right way to increase testing this way is via: depends on ... || COMPILE_TEST Thanks, Ingo ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PULL] clockevents: a couple of fixes for tip/timers/urgent 2015-08-07 7:19 ` [PULL] clockevents: a couple of fixes for tip/timers/urgent Ingo Molnar @ 2015-08-07 21:25 ` Geert Uytterhoeven 0 siblings, 0 replies; 6+ messages in thread From: Geert Uytterhoeven @ 2015-08-07 21:25 UTC (permalink / raw) To: Ingo Molnar; +Cc: Daniel Lezcano, Thomas Gleixner, Linux Kernel Mailing List On Fri, Aug 7, 2015 at 9:19 AM, Ingo Molnar <mingo@kernel.org> wrote: >> Maxime Coquelin (1): >> clockevents/drivers/timer-stm32: Improve dependencies of timer-stm32 >> >> drivers/clocksource/Kconfig | 4 ++-- > > Hm, so why is this an urgent fix, i.e. a regression fix? It appears to widen build > coverage: > > config CLKSRC_STM32 > - bool "Clocksource for STM32 SoCs" if !ARCH_STM32 > - depends on OF && ARM && (ARCH_STM32 || COMPILE_TEST) > + bool "Clocksource for STM32 SoCs" if COMPILE_TEST > + depends on OF && GENERIC_CLOCKEVENTS > > that can at most introduce build regressions - not fix anything. > > If there's any other purpose of this change it's not mentioned in the changelog. > > Also, I think the change is broken to begin with: > > + bool "Clocksource for STM32 SoCs" if COMPILE_TEST > > this will turn off the driver even in its target platform! FWIW, ARCH_STM32 in arch/arm/Kconfig selects CLKSRC_STM32 > The right way to increase testing this way is via: > > depends on ... || COMPILE_TEST Indeed. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2015-08-09 10:26 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2015-08-06 15:29 [PULL] clockevents: a couple of fixes for tip/timers/urgent Daniel Lezcano 2015-08-06 15:32 ` [PATCH 1/2] clockevents/drivers/timer-stm32: Improve dependencies of timer-stm32 Daniel Lezcano 2015-08-06 15:32 ` [PATCH 2/2] clockevents/drivers/sh_cmt: Only perform clocksource suspend/resume if enabled Daniel Lezcano 2015-08-09 10:25 ` [tip:timers/urgent] " tip-bot for Geert Uytterhoeven 2015-08-07 7:19 ` [PULL] clockevents: a couple of fixes for tip/timers/urgent Ingo Molnar 2015-08-07 21:25 ` Geert Uytterhoeven
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).