<feed xmlns='http://www.w3.org/2005/Atom'>
<title>lwn.git/drivers/clk/clk.c, branch v3.14.35</title>
<subtitle>Linux kernel documentation tree maintained by Jonathan Corbet</subtitle>
<id>http://mirrors.hust.edu.cn/git/lwn.git/atom?h=v3.14.35</id>
<link rel='self' href='http://mirrors.hust.edu.cn/git/lwn.git/atom?h=v3.14.35'/>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/'/>
<updated>2015-01-27T16:18:55+00:00</updated>
<entry>
<title>clk: Don't try to use a struct clk* after it could have been freed</title>
<updated>2015-01-27T16:18:55+00:00</updated>
<author>
<name>Tomeu Vizoso</name>
<email>tomeu.vizoso@collabora.com</email>
</author>
<published>2014-12-02T07:54:19+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=d3bc0f5b485af25d9d314ec072ca0297cf58f6c0'/>
<id>urn:sha1:d3bc0f5b485af25d9d314ec072ca0297cf58f6c0</id>
<content type='text'>
commit 10cdfe54dab034311c8e2fad9ba2dffbe616caa9 upstream.

As __clk_release could call kfree on clk and then we wouldn't have a safe way
of getting the module that owns the clock.

Signed-off-by: Tomeu Vizoso &lt;tomeu.vizoso@collabora.com&gt;
Fixes: fcb0ee6a3d33 ("clk: Implement clk_unregister")
Reviewed-by: Stephen Boyd &lt;sboyd@codeaurora.org&gt;
Signed-off-by: Michael Turquette &lt;mturquette@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>clk: prevent erronous parsing of children during rate change</title>
<updated>2014-10-05T21:52:24+00:00</updated>
<author>
<name>Tero Kristo</name>
<email>t-kristo@ti.com</email>
</author>
<published>2014-08-21T13:47:45+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=ed7150a026415687de272a8c58e13af0dd269b35'/>
<id>urn:sha1:ed7150a026415687de272a8c58e13af0dd269b35</id>
<content type='text'>
commit 067bb1741c27c8d3b74ac98c0b8fc12b31e67005 upstream.

In some cases, clocks can switch their parent with clk_set_rate, for
example clk_mux can do this in some cases. Current implementation of
clk_change_rate uses un-safe list iteration on the clock children, which
will cause wrong clocks to be parsed in case any of the clock children
change their parents during the change rate operation. Fixed by using
the safe list iterator instead.

The problem was detected due to some divide by zero errors generated
by clock init on dra7-evm board, see discussion under
http://article.gmane.org/gmane.linux.ports.arm.kernel/349180 for details.

Fixes: 71472c0c06cf ("clk: add support for clock reparent on set_rate")
Signed-off-by: Tero Kristo &lt;t-kristo@ti.com&gt;
Reported-by: Nishanth Menon &lt;nm@ti.com&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>clk: Fix slab corruption in clk_unregister()</title>
<updated>2014-06-07T17:28:27+00:00</updated>
<author>
<name>Stephen Boyd</name>
<email>sboyd@codeaurora.org</email>
</author>
<published>2014-04-18T23:29:43+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=2bf0e785c5c78bcdf1eaa7b6516240ab58cad25c'/>
<id>urn:sha1:2bf0e785c5c78bcdf1eaa7b6516240ab58cad25c</id>
<content type='text'>
commit 874f224cc52d64c912087e68e3724be95ad80ee7 upstream.

When a clock is unregsitered, we iterate over the list of
children and reparent them to NULL (i.e. orphan list). While
iterating the list, we should use the safe iterators because the
children list for this clock is changing when we reparent the
children to NULL. Failure to iterate safely can lead to slab
corruption like this:

=============================================================================
BUG kmalloc-128 (Not tainted): Poison overwritten
-----------------------------------------------------------------------------

Disabling lock debugging due to kernel taint
INFO: 0xed0c4900-0xed0c4903. First byte 0x0 instead of 0x6b
INFO: Allocated in clk_register+0x20/0x1bc age=297 cpu=2 pid=70
 __slab_alloc.isra.39.constprop.42+0x410/0x454
 kmem_cache_alloc_trace+0x200/0x24c
 clk_register+0x20/0x1bc
 devm_clk_register+0x34/0x68
 0xbf0000f0
 platform_drv_probe+0x18/0x48
 driver_probe_device+0x94/0x360
 __driver_attach+0x94/0x98
 bus_for_each_dev+0x54/0x88
 bus_add_driver+0xe8/0x204
 driver_register+0x78/0xf4
 do_one_initcall+0xc4/0x17c
 load_module+0x19ac/0x2294
 SyS_init_module+0xa4/0x110
 ret_fast_syscall+0x0/0x48
INFO: Freed in clk_unregister+0xd4/0x140 age=23 cpu=2 pid=73
 __slab_free+0x38/0x41c
 clk_unregister+0xd4/0x140
 release_nodes+0x164/0x1d8
 __device_release_driver+0x60/0xb0
 driver_detach+0xb4/0xb8
 bus_remove_driver+0x5c/0xc4
 SyS_delete_module+0x148/0x1d8
 ret_fast_syscall+0x0/0x48
INFO: Slab 0xeec50b90 objects=25 used=0 fp=0xed0c5400 flags=0x4080
INFO: Object 0xed0c48c0 @offset=2240 fp=0xed0c4a00

Bytes b4 ed0c48b0: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a  ZZZZZZZZZZZZZZZZ
Object ed0c48c0: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
Object ed0c48d0: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
Object ed0c48e0: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
Object ed0c48f0: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
Object ed0c4900: 00 00 00 00 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  ....kkkkkkkkkkkk
Object ed0c4910: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
Object ed0c4920: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
Object ed0c4930: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b a5  kkkkkkkkkkkkkkk.
Redzone ed0c4940: bb bb bb bb                                      ....
Padding ed0c49e8: 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a  ZZZZZZZZZZZZZZZZ
Padding ed0c49f8: 5a 5a 5a 5a 5a 5a 5a 5a                          ZZZZZZZZ
CPU: 3 PID: 75 Comm: mdev Tainted: G    B         3.14.0-11033-g2054ba5ca781 #35
[&lt;c0014be0&gt;] (unwind_backtrace) from [&lt;c0012240&gt;] (show_stack+0x10/0x14)
[&lt;c0012240&gt;] (show_stack) from [&lt;c04b74a0&gt;] (dump_stack+0x70/0xbc)
[&lt;c04b74a0&gt;] (dump_stack) from [&lt;c00f7a78&gt;] (check_bytes_and_report+0xbc/0x100)
[&lt;c00f7a78&gt;] (check_bytes_and_report) from [&lt;c00f7c48&gt;] (check_object+0x18c/0x218)
[&lt;c00f7c48&gt;] (check_object) from [&lt;c00f7efc&gt;] (__free_slab+0x104/0x144)
[&lt;c00f7efc&gt;] (__free_slab) from [&lt;c04b6668&gt;] (__slab_free+0x3dc/0x41c)
[&lt;c04b6668&gt;] (__slab_free) from [&lt;c014c008&gt;] (load_elf_binary+0x88/0x12b4)
[&lt;c014c008&gt;] (load_elf_binary) from [&lt;c0105a44&gt;] (search_binary_handler+0x78/0x18c)
[&lt;c0105a44&gt;] (search_binary_handler) from [&lt;c0106fc0&gt;] (do_execve+0x490/0x5dc)
[&lt;c0106fc0&gt;] (do_execve) from [&lt;c0036b8c&gt;] (____call_usermodehelper+0x134/0x168)
[&lt;c0036b8c&gt;] (____call_usermodehelper) from [&lt;c000f048&gt;] (ret_from_fork+0x14/0x2c)
FIX kmalloc-128: Restoring 0xed0c4900-0xed0c4903=0x6b

Fixes: fcb0ee6a3d33 (clk: Implement clk_unregister)
Cc: Jiada Wang &lt;jiada_wang@mentor.com&gt;
Cc: Sylwester Nawrocki &lt;s.nawrocki@samsung.com&gt;
Cc: Kyungmin Park &lt;kyungmin.park@samsung.com&gt;
Signed-off-by: Stephen Boyd &lt;sboyd@codeaurora.org&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>clk: Fix double free due to devm_clk_register()</title>
<updated>2014-06-07T17:28:27+00:00</updated>
<author>
<name>Stephen Boyd</name>
<email>sboyd@codeaurora.org</email>
</author>
<published>2014-04-18T23:29:42+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=798ad2abc1b05842b7bd5292ff43055e4a767a64'/>
<id>urn:sha1:798ad2abc1b05842b7bd5292ff43055e4a767a64</id>
<content type='text'>
commit 293ba3b4a4fd54891b900f2911d1a57e1ed4a843 upstream.

Now that clk_unregister() frees the struct clk we're
unregistering we'll free memory twice: first we'll call kfree()
in __clk_release() with an address kmalloc doesn't know about and
second we'll call kfree() in the devres layer. Remove the
allocation of struct clk in devm_clk_register() and let
clk_release() handle it. This fixes slab errors like:

=============================================================================
BUG kmalloc-128 (Not tainted): Invalid object pointer 0xed08e8d0
-----------------------------------------------------------------------------

Disabling lock debugging due to kernel taint
INFO: Slab 0xeec503f8 objects=25 used=15 fp=0xed08ea00 flags=0x4081
CPU: 2 PID: 73 Comm: rmmod Tainted: G    B         3.14.0-11032-g526e9c764381 #34
[&lt;c0014be0&gt;] (unwind_backtrace) from [&lt;c0012240&gt;] (show_stack+0x10/0x14)
[&lt;c0012240&gt;] (show_stack) from [&lt;c04b74dc&gt;] (dump_stack+0x70/0xbc)
[&lt;c04b74dc&gt;] (dump_stack) from [&lt;c00f6778&gt;] (slab_err+0x74/0x84)
[&lt;c00f6778&gt;] (slab_err) from [&lt;c04b6278&gt;] (free_debug_processing+0x2cc/0x31c)
[&lt;c04b6278&gt;] (free_debug_processing) from [&lt;c04b6300&gt;] (__slab_free+0x38/0x41c)
[&lt;c04b6300&gt;] (__slab_free) from [&lt;c03931bc&gt;] (clk_unregister+0xd4/0x140)
[&lt;c03931bc&gt;] (clk_unregister) from [&lt;c02fb774&gt;] (release_nodes+0x164/0x1d8)
[&lt;c02fb774&gt;] (release_nodes) from [&lt;c02f8698&gt;] (__device_release_driver+0x60/0xb0)
[&lt;c02f8698&gt;] (__device_release_driver) from [&lt;c02f9080&gt;] (driver_detach+0xb4/0xb8)
[&lt;c02f9080&gt;] (driver_detach) from [&lt;c02f8480&gt;] (bus_remove_driver+0x5c/0xc4)
[&lt;c02f8480&gt;] (bus_remove_driver) from [&lt;c008c9b8&gt;] (SyS_delete_module+0x148/0x1d8)
[&lt;c008c9b8&gt;] (SyS_delete_module) from [&lt;c000ef80&gt;] (ret_fast_syscall+0x0/0x48)
FIX kmalloc-128: Object at 0xed08e8d0 not freed

Fixes: fcb0ee6a3d33 (clk: Implement clk_unregister)
Cc: Jiada Wang &lt;jiada_wang@mentor.com&gt;
Cc: Sylwester Nawrocki &lt;s.nawrocki@samsung.com&gt;
Cc: Kyungmin Park &lt;kyungmin.park@samsung.com&gt;
Signed-off-by: Stephen Boyd &lt;sboyd@codeaurora.org&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>clk: Correct handling of NULL clk in __clk_{get, put}</title>
<updated>2014-02-25T05:58:38+00:00</updated>
<author>
<name>Sylwester Nawrocki</name>
<email>s.nawrocki@samsung.com</email>
</author>
<published>2014-01-07T12:03:43+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=00efcb1c8e1c3c5e5d3ce6f0682d66402911a84f'/>
<id>urn:sha1:00efcb1c8e1c3c5e5d3ce6f0682d66402911a84f</id>
<content type='text'>
Ensure clk-&gt;kref is dereferenced only when clk is not NULL.

Signed-off-by: Sylwester Nawrocki &lt;s.nawrocki@samsung.com&gt;
Tested-by: Sachin Kamat &lt;sachin.kamat@linaro.org&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
</content>
</entry>
<entry>
<title>clk: Export more clk-provider functions</title>
<updated>2014-01-27T19:43:19+00:00</updated>
<author>
<name>Stephen Boyd</name>
<email>sboyd@codeaurora.org</email>
</author>
<published>2014-01-18T03:47:17+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=0b7f04b868ec1230cf2dd698697dbc32a509ea4d'/>
<id>urn:sha1:0b7f04b868ec1230cf2dd698697dbc32a509ea4d</id>
<content type='text'>
Allow drivers to be compiled as modules by exporting more clock
provider functions.

Reported-by: kbuild test robot &lt;fengguang.wu@intel.com&gt;
Signed-off-by: Stephen Boyd &lt;sboyd@codeaurora.org&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
</content>
</entry>
<entry>
<title>CLK: ti: add init support for clock IP blocks</title>
<updated>2014-01-17T20:34:52+00:00</updated>
<author>
<name>Tero Kristo</name>
<email>t-kristo@ti.com</email>
</author>
<published>2013-10-22T08:39:36+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=819b4861c18d602463cfe815041d11fd81002654'/>
<id>urn:sha1:819b4861c18d602463cfe815041d11fd81002654</id>
<content type='text'>
ti_dt_clk_init_provider() can now be used to initialize the contents of
a single clock IP block. This parses all the clocks under the IP block
and calls the corresponding init function for them.

This patch also introduces a helper function for the TI clock drivers
to get register info from DT and append the master IP info to this.

Signed-off-by: Tero Kristo &lt;t-kristo@ti.com&gt;
Acked-by: Tony Lindgren &lt;tony@atomide.com&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
</content>
</entry>
<entry>
<title>clk: Add set_rate_and_parent() op</title>
<updated>2014-01-16T20:00:57+00:00</updated>
<author>
<name>Stephen Boyd</name>
<email>sboyd@codeaurora.org</email>
</author>
<published>2014-01-15T18:47:22+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=3fa2252b7a78a8057017471a28f47b306e95ee26'/>
<id>urn:sha1:3fa2252b7a78a8057017471a28f47b306e95ee26</id>
<content type='text'>
Some of Qualcomm's clocks can change their parent and rate at the
same time with a single register write. Add support for this
hardware to the common clock framework by adding a new
set_rate_and_parent() op. When the clock framework determines
that both the parent and the rate are going to change during
clk_set_rate() it will call the .set_rate_and_parent() op if
available and fall back to calling .set_parent() followed by
.set_rate() otherwise.

Reviewed-by: James Hogan &lt;james.hogan@imgtec.com&gt;
Signed-off-by: Stephen Boyd &lt;sboyd@codeaurora.org&gt;
Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
</content>
</entry>
<entry>
<title>Merge branch 'clk-next-unregister' into clk-next</title>
<updated>2013-12-31T19:35:12+00:00</updated>
<author>
<name>Mike Turquette</name>
<email>mturquette@linaro.org</email>
</author>
<published>2013-12-31T19:35:12+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=dbdf6ff51e3ce13ade5834b0d7d451522fcdb478'/>
<id>urn:sha1:dbdf6ff51e3ce13ade5834b0d7d451522fcdb478</id>
<content type='text'>
Conflicts:
	drivers/clk/clk.c
</content>
</entry>
<entry>
<title>clk: remove CONFIG_COMMON_CLK_DEBUG</title>
<updated>2013-12-28T01:45:08+00:00</updated>
<author>
<name>Mike Turquette</name>
<email>mturquette@linaro.org</email>
</author>
<published>2013-12-19T05:38:52+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=ea72dc2cf9552631e43327ce593bdbb0b9fdf058'/>
<id>urn:sha1:ea72dc2cf9552631e43327ce593bdbb0b9fdf058</id>
<content type='text'>
Populate ${DEBUGS_MOUNT_POINT}/clk if CONFIG_DEBUG_FS is set. This
eliminates the extra (annoying) step of enabling the config option
manually.

Signed-off-by: Mike Turquette &lt;mturquette@linaro.org&gt;
</content>
</entry>
</feed>
