<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux/drivers/clocksource, branch v3.13</title>
<subtitle>Mirror of https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/
</subtitle>
<id>https://git.shady.money/linux/atom?h=v3.13</id>
<link rel='self' href='https://git.shady.money/linux/atom?h=v3.13'/>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/'/>
<updated>2013-12-30T10:32:24Z</updated>
<entry>
<title>clocksource: cadence_ttc: Fix mutex taken inside interrupt context</title>
<updated>2013-12-30T10:32:24Z</updated>
<author>
<name>Soren Brinkmann</name>
<email>soren.brinkmann@xilinx.com</email>
</author>
<published>2013-11-27T01:04:50Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=c1dcc927dae01dfd4904ee82ce2c00b50eab6dc3'/>
<id>urn:sha1:c1dcc927dae01dfd4904ee82ce2c00b50eab6dc3</id>
<content type='text'>
When the kernel is compiled with:
CONFIG_HIGH_RES_TIMERS=no
CONFIG_HZ_PERIODIC=yes
CONFIG_DEBUG_ATOMIC_SLEEP=yes

The following WARN appears:

WARNING: CPU: 1 PID: 0 at linux/kernel/mutex.c:856 mutex_trylock+0x70/0x1fc()
DEBUG_LOCKS_WARN_ON(in_interrupt())
Modules linked in:
CPU: 1 PID: 0 Comm: swapper/1 Not tainted 3.12.0-xilinx-dirty #93
[&lt;c0014a78&gt;] (unwind_backtrace+0x0/0x11c) from [&lt;c0011b6c&gt;] (show_stack+0x10/0x14)
[&lt;c0011b6c&gt;] (show_stack+0x10/0x14) from [&lt;c039120c&gt;] (dump_stack+0x7c/0xc0)
[&lt;c039120c&gt;] (dump_stack+0x7c/0xc0) from [&lt;c001fda4&gt;] (warn_slowpath_common+0x60/0x84)
[&lt;c001fda4&gt;] (warn_slowpath_common+0x60/0x84) from [&lt;c001fe48&gt;] (warn_slowpath_fmt+0x2c/0x3c)
[&lt;c001fe48&gt;] (warn_slowpath_fmt+0x2c/0x3c) from [&lt;c0392658&gt;] (mutex_trylock+0x70/0x1fc)
[&lt;c0392658&gt;] (mutex_trylock+0x70/0x1fc) from [&lt;c02dfc08&gt;] (clk_prepare_lock+0xc/0xe4)
[&lt;c02dfc08&gt;] (clk_prepare_lock+0xc/0xe4) from [&lt;c02e099c&gt;] (clk_get_rate+0xc/0x44)
[&lt;c02e099c&gt;] (clk_get_rate+0xc/0x44) from [&lt;c02d0394&gt;] (ttc_set_mode+0x34/0x78)
[&lt;c02d0394&gt;] (ttc_set_mode+0x34/0x78) from [&lt;c005f794&gt;] (clockevents_set_mode+0x28/0x5c)
[&lt;c005f794&gt;] (clockevents_set_mode+0x28/0x5c) from [&lt;c00607fc&gt;] (tick_broadcast_on_off+0x190/0x1c0)
[&lt;c00607fc&gt;] (tick_broadcast_on_off+0x190/0x1c0) from [&lt;c005f168&gt;] (clockevents_notify+0x58/0x1ac)
[&lt;c005f168&gt;] (clockevents_notify+0x58/0x1ac) from [&lt;c02b99dc&gt;] (cpuidle_setup_broadcast_timer+0x20/0x24)
[&lt;c02b99dc&gt;] (cpuidle_setup_broadcast_timer+0x20/0x24) from [&lt;c006cd04&gt;] (generic_smp_call_function_single_interrupt+0)
[&lt;c006cd04&gt;] (generic_smp_call_function_single_interrupt+0xe0/0x130) from [&lt;c00138c8&gt;] (handle_IPI+0x88/0x118)
[&lt;c00138c8&gt;] (handle_IPI+0x88/0x118) from [&lt;c0008504&gt;] (gic_handle_irq+0x58/0x60)
[&lt;c0008504&gt;] (gic_handle_irq+0x58/0x60) from [&lt;c0012644&gt;] (__irq_svc+0x44/0x78)
Exception stack(0xef099fa0 to 0xef099fe8)
9fa0: 00000001 ef092100 00000000 ef092100 ef098000 00000015 c0399f2c c0579d74
9fc0: 0000406a 413fc090 00000000 00000000 00000000 ef099fe8 c00666ec c000f46c
9fe0: 20000113 ffffffff
[&lt;c0012644&gt;] (__irq_svc+0x44/0x78) from [&lt;c000f46c&gt;] (arch_cpu_idle+0x34/0x3c)
[&lt;c000f46c&gt;] (arch_cpu_idle+0x34/0x3c) from [&lt;c0053980&gt;] (cpu_startup_entry+0xa8/0x10c)
[&lt;c0053980&gt;] (cpu_startup_entry+0xa8/0x10c) from [&lt;000085a4&gt;] (0x85a4)

We are in an interrupt context (IPI) and we are calling clk_get_rate in the
set_mode function which in turn ends up by getting a mutex... Even if that
does not hang, it is a potential kernel deadlock.

It is not allowed to call clk_get_rate() from interrupt context. To
avoid such calls the timer input frequency is stored in the driver's
data struct which makes it accessible to the driver in any context.

[dlezcano] completed the changelog with the WARN trace and added a more
detailed description. Tested on zync zc702.

Acked-by: Daniel Lezcano &lt;daniel.lezcano@linaro.org&gt;
Tested-by: Daniel Lezcano &lt;daniel.lezcano@linaro.org&gt;
Signed-off-by: Soren Brinkmann &lt;soren.brinkmann@xilinx.com&gt;
Signed-off-by: Daniel Lezcano &lt;daniel.lezcano@linaro.org&gt;
</content>
</entry>
<entry>
<title>clocksource: dw_apb_timer_of: Fix support for dts binding "snps,dw-apb-timer"</title>
<updated>2013-12-10T18:49:18Z</updated>
<author>
<name>Dinh Nguyen</name>
<email>dinguyen@altera.com</email>
</author>
<published>2013-12-10T18:49:18Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=9ab4727c1d41e50b67aecde4bf11879560a3ca78'/>
<id>urn:sha1:9ab4727c1d41e50b67aecde4bf11879560a3ca78</id>
<content type='text'>
In commit 620f5e1cbf (dts: Rename DW APB timer compatible strings), both
"snps,dw-apb-timer-sp" and "snps,dw-apb-timer-osc" were deprecated in place
of "snps,dw-apb-timer". But the driver also needs to be udpated in order to
support this new binding "snps,dw-apb-timer".

Signed-off-by: Dinh Nguyen &lt;dinguyen@altera.com&gt;
Signed-off-by: Daniel Lezcano &lt;daniel.lezcano@linaro.org&gt;
</content>
</entry>
<entry>
<title>clocksource: dw_apb_timer_of: Fix read_sched_clock</title>
<updated>2013-12-10T18:49:18Z</updated>
<author>
<name>Dinh Nguyen</name>
<email>dinguyen@altera.com</email>
</author>
<published>2013-12-10T18:49:18Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=85dc6ee1237c8a4a7742e6abab96a20389b7d682'/>
<id>urn:sha1:85dc6ee1237c8a4a7742e6abab96a20389b7d682</id>
<content type='text'>
The read_sched_clock should return the ~value because the clock is a
countdown implementation. read_sched_clock() should be the same as
 __apbt_read_clocksource().

Signed-off-by: Dinh Nguyen &lt;dinguyen@altera.com&gt;
Signed-off-by: Daniel Lezcano &lt;daniel.lezcano@linaro.org&gt;
</content>
</entry>
<entry>
<title>clocksource: sunxi: Stop timer from ticking before enabling interrupts</title>
<updated>2013-12-10T18:41:28Z</updated>
<author>
<name>Marc Zyngier</name>
<email>marc.zyngier@arm.com</email>
</author>
<published>2013-12-02T09:29:35Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=6db50bb67598668c525f12e2f7191f5d03ca46f2'/>
<id>urn:sha1:6db50bb67598668c525f12e2f7191f5d03ca46f2</id>
<content type='text'>
The sun4i timer can still be ticking when we enable the interrupt.
If another timer is actually used (A7 architected timer, for example),
odds are that the interrupt will eventually fire with the event_handler
pointer being NULL.

The obvious fix it to stop the timer before registering the interrupt.

Observed and tested on sun7i (cubietruck).

Cc: Daniel Lezcano &lt;daniel.lezcano@linaro.org&gt;
Acked-by: Maxime Ripard &lt;maxime.ripard@free-electrons.com&gt;
Signed-off-by: Marc Zyngier &lt;marc.zyngier@arm.com&gt;
Signed-off-by: Daniel Lezcano &lt;daniel.lezcano@linaro.org&gt;
</content>
</entry>
<entry>
<title>clocksource: clksrc-of: Do not drop unheld reference on device node</title>
<updated>2013-12-10T18:41:27Z</updated>
<author>
<name>Thierry Reding</name>
<email>thierry.reding@gmail.com</email>
</author>
<published>2013-10-18T22:49:48Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=4c4b053235fa73db1ea241aa5a6b021afb0ed8db'/>
<id>urn:sha1:4c4b053235fa73db1ea241aa5a6b021afb0ed8db</id>
<content type='text'>
When booting a recent kernel on ARM with OF_DYNAMIC enabled, the kernel
warns about the following:

	[    0.000000] ERROR: Bad of_node_put() on /timer@50004600
	[    0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.12.0-rc5-next-20131017-00077-gedfd827-dirty #406
	[    0.000000] [&lt;c0015b68&gt;] (unwind_backtrace+0x0/0xf4) from [&lt;c00117e4&gt;] (show_stack+0x10/0x14)
	[    0.000000] [&lt;c00117e4&gt;] (show_stack+0x10/0x14) from [&lt;c055f734&gt;] (dump_stack+0x9c/0xc8)
	[    0.000000] [&lt;c055f734&gt;] (dump_stack+0x9c/0xc8) from [&lt;c03b47d4&gt;] (of_node_release+0x90/0x9c)
	[    0.000000] [&lt;c03b47d4&gt;] (of_node_release+0x90/0x9c) from [&lt;c03b5084&gt;] (of_find_matching_node_and_match+0x78/0xb4)
	[    0.000000] [&lt;c03b5084&gt;] (of_find_matching_node_and_match+0x78/0xb4) from [&lt;c07887c8&gt;] (clocksource_of_init+0x60/0x70)
	[    0.000000] [&lt;c07887c8&gt;] (clocksource_of_init+0x60/0x70) from [&lt;c076e99c&gt;] (start_kernel+0x1f4/0x33c)
	[    0.000000] [&lt;c076e99c&gt;] (start_kernel+0x1f4/0x33c) from [&lt;80008074&gt;] (0x80008074)

This is caused by clocksource_of_init() dropping a reference on the
device node that it never took. The reference taken by the loop is
implicitly dropped on subsequent iterations. See the implementation of
and the comment on top of the of_find_matching_node_and_match()
function for reference (no pun intended).

Signed-off-by: Thierry Reding &lt;treding@nvidia.com&gt;
Signed-off-by: Daniel Lezcano &lt;daniel.lezcano@linaro.org&gt;
Cc: Uwe Kleine-König &lt;u.kleine-koenig@pengutronix.de&gt;
</content>
</entry>
<entry>
<title>clocksource: armada-370-xp: Register sched_clock after the counter reset</title>
<updated>2013-12-10T18:41:27Z</updated>
<author>
<name>Ezequiel Garcia</name>
<email>ezequiel.garcia@free-electrons.com</email>
</author>
<published>2013-11-26T21:20:14Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=c813eff078588733a3d1a46c033c2d59d66a263b'/>
<id>urn:sha1:c813eff078588733a3d1a46c033c2d59d66a263b</id>
<content type='text'>
This commit registers the sched_clock _after_ the counter reset
(instead of before). This removes the timestamp 'jump' in kernel
log messages.

Before this change:

[    0.000000] sched_clock: 32 bits at 25MHz, resolution 40ns, wraps every 171798691800ns
[    0.000000] Initializing Coherency fabric
[    0.000000] Aurora cache controller enabled
[    0.000000] l2x0: 16 ways, CACHE_ID 0x00000100, AUX_CTRL 0x1a696b12, Cache size: 1024 kB
[  163.507447] Calibrating delay loop... 1325.05 BogoMIPS (lpj=662528)
[  163.521419] pid_max: default: 32768 minimum: 301
[  163.526185] Mount-cache hash table entries: 512
[  163.531095] CPU: Testing write buffer coherency: ok

After this change:

[    0.000000] sched_clock: 32 bits at 25MHz, resolution 40ns, wraps every 171798691800ns
[    0.000000] Initializing Coherency fabric
[    0.000000] Aurora cache controller enabled
[    0.000000] l2x0: 16 ways, CACHE_ID 0x00000100, AUX_CTRL 0x1a696b12, Cache size: 1024 kB
[    0.016849] Calibrating delay loop... 1325.05 BogoMIPS (lpj=662528)
[    0.030820] pid_max: default: 32768 minimum: 301
[    0.035588] Mount-cache hash table entries: 512
[    0.040500] CPU: Testing write buffer coherency: ok

Signed-off-by: Ezequiel Garcia &lt;ezequiel.garcia@free-electrons.com&gt;
Signed-off-by: Daniel Lezcano &lt;daniel.lezcano@linaro.org&gt;
Acked-by: Jason Cooper &lt;jason@lakedaemon.net&gt;
</content>
</entry>
<entry>
<title>clocksource: time-efm32: Select CLKSRC_MMIO</title>
<updated>2013-12-10T18:41:26Z</updated>
<author>
<name>Axel Lin</name>
<email>axel.lin@ingics.com</email>
</author>
<published>2013-11-20T02:15:11Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=09ca27579ee5a1b6f537b82165080b85c1febac8'/>
<id>urn:sha1:09ca27579ee5a1b6f537b82165080b85c1febac8</id>
<content type='text'>
The time-efm32 driver uses the clocksource MMIO functions.
Thus it needs to select CLKSRC_MMIO in Kconfig.

Signed-off-by: Axel Lin &lt;axel.lin@ingics.com&gt;
Signed-off-by: Daniel Lezcano &lt;daniel.lezcano@linaro.org&gt;
Acked-by: Uwe Kleine-König &lt;u.kleine-koenig@pengutronix.de&gt;
</content>
</entry>
<entry>
<title>clocksource: arm_arch_timer: Hide eventstream Kconfig on non-ARM</title>
<updated>2013-11-20T23:06:52Z</updated>
<author>
<name>Stephen Boyd</name>
<email>sboyd@codeaurora.org</email>
</author>
<published>2013-11-20T20:02:03Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=77f7ce9a9f636daaa65731a833bae1311a7b80e5'/>
<id>urn:sha1:77f7ce9a9f636daaa65731a833bae1311a7b80e5</id>
<content type='text'>
Pavel Machek reports that this config is exposed on x86 where the
ARM architected timers aren't even present. Make it depend on the
ARM architected timers being selected so that non-ARM builds
aren't asked about it.

Reported-by: Pavel Machek &lt;pavel@ucw.cz&gt;
Reviewed-by: Pavel Machek &lt;pavel@ucw.cz&gt;
Signed-off-by: Stephen Boyd &lt;sboyd@codeaurora.org&gt;
Signed-off-by: Daniel Lezcano &lt;daniel.lezcano@linaro.org&gt;
</content>
</entry>
<entry>
<title>clocksource: sh_tmu: Add clk_prepare/unprepare support</title>
<updated>2013-11-20T20:55:24Z</updated>
<author>
<name>Laurent Pinchart</name>
<email>laurent.pinchart+renesas@ideasonboard.com</email>
</author>
<published>2013-11-08T10:08:00Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=1c09eb3e2d761ffd152faa6b9d06caf560e7d445'/>
<id>urn:sha1:1c09eb3e2d761ffd152faa6b9d06caf560e7d445</id>
<content type='text'>
Prepare the clock at probe time, as there is no other appropriate place
in the driver where we're allowed to sleep.

Cc: Daniel Lezcano &lt;daniel.lezcano@linaro.org&gt;
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Laurent Pinchart &lt;laurent.pinchart+renesas@ideasonboard.com&gt;
Acked-by: Simon Horman &lt;horms+renesas@verge.net.au&gt;
Signed-off-by: Daniel Lezcano &lt;daniel.lezcano@linaro.org&gt;
</content>
</entry>
<entry>
<title>clocksource: sh_tmu: Release clock when sh_tmu_register() fails</title>
<updated>2013-11-20T20:55:23Z</updated>
<author>
<name>Laurent Pinchart</name>
<email>laurent.pinchart+renesas@ideasonboard.com</email>
</author>
<published>2013-11-08T10:07:59Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=394a4486f009a184b58fc2f2435d6f5f800870bb'/>
<id>urn:sha1:394a4486f009a184b58fc2f2435d6f5f800870bb</id>
<content type='text'>
Fix the probe error path to release the clock resource when the
sh_tmu_register() call fails.

Cc: Daniel Lezcano &lt;daniel.lezcano@linaro.org&gt;
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Laurent Pinchart &lt;laurent.pinchart+renesas@ideasonboard.com&gt;
Acked-by: Simon Horman &lt;horms+renesas@verge.net.au&gt;
Signed-off-by: Daniel Lezcano &lt;daniel.lezcano@linaro.org&gt;
</content>
</entry>
</feed>
