Commit 322af98c56c70b3ec6f637fb07d41a9591a6ff9a

Authored by Denis Turischev
Committed by Wim Van Sebroeck
1 parent fcf1dd7e68

watchdog: sbc_fitpc2_wdt: fixed "scheduling while atomic" bug.

spinlock need to be replaced by mutex because of sleep functions
inside wdt_send_data.

Signed-off-by: Denis Turischev <denis@compulab.co.il>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>

Showing 1 changed file with 5 additions and 5 deletions Side-by-side Diff

drivers/watchdog/sbc_fitpc2_wdt.c
... ... @@ -30,7 +30,7 @@
30 30 static int nowayout = WATCHDOG_NOWAYOUT;
31 31 static unsigned int margin = 60; /* (secs) Default is 1 minute */
32 32 static unsigned long wdt_status;
33   -static DEFINE_SPINLOCK(wdt_lock);
  33 +static DEFINE_MUTEX(wdt_lock);
34 34  
35 35 #define WDT_IN_USE 0
36 36 #define WDT_OK_TO_CLOSE 1
37 37  
38 38  
39 39  
... ... @@ -53,18 +53,18 @@
53 53  
54 54 static void wdt_enable(void)
55 55 {
56   - spin_lock(&wdt_lock);
  56 + mutex_lock(&wdt_lock);
57 57 wdt_send_data(IFACE_ON_COMMAND, 1);
58 58 wdt_send_data(REBOOT_COMMAND, margin);
59   - spin_unlock(&wdt_lock);
  59 + mutex_unlock(&wdt_lock);
60 60 }
61 61  
62 62 static void wdt_disable(void)
63 63 {
64   - spin_lock(&wdt_lock);
  64 + mutex_lock(&wdt_lock);
65 65 wdt_send_data(IFACE_ON_COMMAND, 0);
66 66 wdt_send_data(REBOOT_COMMAND, 0);
67   - spin_unlock(&wdt_lock);
  67 + mutex_unlock(&wdt_lock);
68 68 }
69 69  
70 70 static int fitpc2_wdt_open(struct inode *inode, struct file *file)