]> pilppa.com Git - linux-2.6-omap-h63xx.git/commit
ARM: OMAP: Fix McBSP spin_lock deadlock
authorStanley.Miao <stanley.miao@windriver.com>
Thu, 29 Jan 2009 16:57:12 +0000 (08:57 -0800)
committerTony Lindgren <tony@atomide.com>
Thu, 29 Jan 2009 16:57:12 +0000 (08:57 -0800)
commit06151158f2da4764479b4ec01688dc4bade6ce9d
treeb78b3f2ccde6e3d49e9f35bad3352fbfd9a3eca2
parent18e352e4a73465349711a9324767e1b2453383e2
ARM: OMAP: Fix McBSP spin_lock deadlock

A spin_lock deadlock will occur when omap_mcbsp_request() is invoked.

omap_mcbsp_request()
\- clk_enable(mcbsp->clk)         [takes and holds clockfw_lock]
    \- omap2_clk_enable()
       \- _omap2_clk_enable()
           \- omap_mcbsp_clk_enable()
              \- clk_enable(child clock)   [tries for clockfw_lock again]

mcbsp_clk is a virtual clock and it comprises several child clocks. when
enable mcbsp_clk in omap_mcbsp_request(), the enable function of mcbsp_clk
will enable its child clocks, then the deadlock occurs.

The solution is to remove the virtual clock and enable these child clocks in
omap_mcbsp_request() directly.

Signed-off-by: Stanley.Miao <stanley.miao@windriver.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap1/mcbsp.c
arch/arm/mach-omap2/mcbsp.c
arch/arm/plat-omap/include/mach/mcbsp.h
arch/arm/plat-omap/mcbsp.c