spi_fpga_fw: fix access uninitialized spin_lock bug
author黄涛 <huangtao@rock-chips.com>
Tue, 12 Oct 2010 09:39:20 +0000 (17:39 +0800)
committer黄涛 <huangtao@rock-chips.com>
Tue, 12 Oct 2010 09:39:20 +0000 (17:39 +0800)
fix this bug:
BUG: spinlock bad magic on CPU#0, swapper/1
lock: c0c83ffc, .magic: 00000000, .owner: <none>/-1, .owner_cpu: 0
[<c044f108>] (unwind_backtrace+0x0/0xdc) from [<c06f39e0>] (dump_stack+0x18/0x1c)
[<c06f39e0>] (dump_stack+0x18/0x1c) from [<c055aaa8>] (spin_bug+0x90/0xa4)
[<c055aaa8>] (spin_bug+0x90/0xa4) from [<c055abf0>] (_raw_spin_lock+0x2c/0x168)
[<c055abf0>] (_raw_spin_lock+0x2c/0x168) from [<c06f6f84>] (_spin_lock_irqsave+0x5c/0x68)
[<c06f6f84>] (_spin_lock_irqsave+0x5c/0x68) from [<c0418a78>] (fpga_dl_fw+0x98/0x358)
[<c0418a78>] (fpga_dl_fw+0x98/0x358) from [<c040da68>] (machine_rk2818_board_init+0x94/0x124)
[<c040da68>] (machine_rk2818_board_init+0x94/0x124) from [<c040a8c8>] (customize_machine+0x20/0x2c)
[<c040a8c8>] (customize_machine+0x20/0x2c) from [<c0449364>] (do_one_initcall+0x64/0x1c0)
[<c0449364>] (do_one_initcall+0x64/0x1c0) from [<c04085f4>] (kernel_init+0xa4/0x11c)
[<c04085f4>] (kernel_init+0xa4/0x11c) from [<c044a8fc>] (kernel_thread_exit+0x0/0x8)

drivers/fpga/spi_fpga_fw.c

index a526dddfba83c141d59b34dba0f0349e796b2f18..154b9347edb161df9f104494014edec0053394b1 100755 (executable)
@@ -113,10 +113,11 @@ static void __init spi_fpga_wait(unsigned int num)
                i++;\r
     }\r
 }\r
-static spinlock_t              lock_fw;\r
+\r
+static DEFINE_SPINLOCK(lock_fw);\r
 static void __init spi_fpga_dlfw(unsigned char * fpga_fw, unsigned int fpga_fw_len)\r
 {\r
-    int ret;\r
+    //int ret;\r
     unsigned long flags;\r
     unsigned char command1[6] = {0x7e, 0xaa, 0x99, 0x7e, 0x01, 0x0e};\r
     unsigned char command2[5] = {0x83, 0x00, 0x00, 0x26, 0x11};\r
@@ -245,6 +246,7 @@ int __init fpga_dl_fw(void)
        gpio_direction_output(RK2818_PIN_PE0,1);\r
        udelay(2);\r
        gpio_direction_output(RK2818_PIN_PE0,0);\r
-       \r
+\r
+       return 0;\r
 }\r
 \r