linux/arch/arm/plat-samsung
Tushar Behera d6838a62b4 ARM: SAMSUNG: Use spin_lock_{irqsave,irqrestore} in clk_set_rate
The spinlock clocks_lock can be held during ISR, hence it is not safe to
hold that lock with disabling interrupts.

It fixes following potential deadlock.

=========================================================
[ INFO: possible irq lock inversion dependency detected ]
3.6.0-rc4+ #2 Not tainted
---------------------------------------------------------
swapper/0/1 just changed the state of lock:
 (&(&host->lock)->rlock){-.....}, at: [<c027fb0d>] sdhci_irq+0x15/0x564
but this lock took another, HARDIRQ-unsafe lock in the past:
 (clocks_lock){+.+...}

and interrupts could create inverse lock ordering between them.

other info that might help us debug this:
 Possible interrupt unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(clocks_lock);
                               local_irq_disable();
                               lock(&(&host->lock)->rlock);
                               lock(clocks_lock);
  <Interrupt>
    lock(&(&host->lock)->rlock);

 *** DEADLOCK ***

Signed-off-by: Tushar Behera <tushar.behera@linaro.org>
Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
2012-09-18 10:05:34 +09:00
..
include/plat ARM: SAMSUNG: Add API to set platform data for s5p-tv driver 2012-08-08 15:53:38 +09:00
adc.c ARM: SAMSUNG: fix race in s3c_adc_start for ADC 2012-07-13 15:35:04 +09:00
clock-clksrc.c driver-core: remove sysdev.h usage. 2011-12-21 16:26:03 -08:00
clock.c ARM: SAMSUNG: Use spin_lock_{irqsave,irqrestore} in clk_set_rate 2012-09-18 10:05:34 +09:00
cpu.c Disintegrate asm/system.h for ARM 2012-03-28 18:30:01 +01:00
dev-backlight.c ARM: SAMSUNG: Add __init attribute to samsung_bl_set() 2012-03-09 08:03:13 -08:00
dev-uart.c
devs.c ARM: SAMSUNG: Add API to set platform data for s5p-tv driver 2012-08-08 15:53:38 +09:00
dma-ops.c ARM: SAMSUNG: Fix compiler warning in dma-ops.c file 2012-06-27 11:32:08 +09:00
dma.c ARM: SAMSUNG: DMA Cleanup as per sparse 2011-07-16 15:50:19 +09:00
init.c ARM: SAMSUNG: Add support for handling of cpu revision 2011-08-24 19:25:19 +09:00
irq-vic-timer.c ARM: EXYNOS: add interrupt definitions for EXYNOS5250 2012-03-14 02:35:04 -07:00
Kconfig ARM: s3c24xx: use new PWM driver 2012-08-09 15:16:43 +02:00
Makefile Merge branch 'for-3.6' of git://gitorious.org/linux-pwm/linux-pwm 2012-07-30 09:22:37 -07:00
platformdata.c ARM: SAMSUNG: remove all uses of clk_type member in sdhci platform data 2012-04-21 08:24:56 -07:00
pm-check.c
pm-gpio.c driver-core: remove sysdev.h usage. 2011-12-21 16:26:03 -08:00
pm.c ARM: Samsung: Make uart_save static in pm.c file 2012-08-08 09:04:51 +09:00
pwm-clock.c ARM: SAMSUNG: Consolidate plat/pwm-clock.h 2011-10-04 19:48:41 +09:00
s3c-dma-ops.c ARM: SAMSUNG: Add config() function in DMA common operations 2012-06-20 08:07:35 +09:00
s5p-clock.c ARM: SAMSUNG: Update default rate for xusbxti clock 2012-07-13 15:34:30 +09:00
s5p-dev-mfc.c ARM: SAMSUNG: move setup code for s5p mfc and mipiphy into plat-samsung 2012-05-13 07:01:59 +09:00
s5p-dev-uart.c ARM: SAMSUNG: move platform device for s5p uart into plat-samsung 2012-05-13 07:01:51 +09:00
s5p-irq-eint.c ARM: SAMSUNG: move interrupt part for common s5p into plat-samsung 2012-05-13 07:01:27 +09:00
s5p-irq-gpioint.c ARM: SAMSUNG: move interrupt part for common s5p into plat-samsung 2012-05-13 07:01:27 +09:00
s5p-irq-pm.c ARM: SAMSUNG: move pm part for common s5p into plat-samsung 2012-05-13 07:01:34 +09:00
s5p-irq.c ARM: SAMSUNG: move interrupt part for common s5p into plat-samsung 2012-05-13 07:01:27 +09:00
s5p-pm.c ARM: SAMSUNG: move pm part for common s5p into plat-samsung 2012-05-13 07:01:34 +09:00
s5p-sleep.S ARM: SAMSUNG: move pm part for common s5p into plat-samsung 2012-05-13 07:01:34 +09:00
s5p-time.c ARM: SAMSUNG: move hr timer for common s5p into plat-samsung 2012-05-13 07:01:43 +09:00
setup-mipiphy.c ARM: SAMSUNG: move setup code for s5p mfc and mipiphy into plat-samsung 2012-05-13 07:01:59 +09:00
time.c Disintegrate asm/system.h for ARM 2012-03-28 18:30:01 +01:00
wakeup-mask.c driver-core: remove sysdev.h usage. 2011-12-21 16:26:03 -08:00