Merge tag 'staging-3.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
[firefly-linux-kernel-4.4.55.git] / drivers / staging / speakup / speakup_dectlk.c
index 0dd2eb96cb28680dd042ee7301a46e530320b732..15fdec323a70f28b666125847c07ca5ad6683f03 100644 (file)
@@ -216,9 +216,9 @@ static void do_catch_up(struct spk_synth *synth)
 
        jiffy_delta = spk_get_var(JIFFY);
        delay_time = spk_get_var(DELAY);
-       spk_lock(flags);
+       spin_lock_irqsave(&speakup_info.spinlock, flags);
        jiffy_delta_val = jiffy_delta->u.n.value;
-       spk_unlock(flags);
+       spin_unlock_irqrestore(&speakup_info.spinlock, flags);
        jiff_max = jiffies + jiffy_delta_val;
 
        while (!kthread_should_stop()) {
@@ -234,22 +234,22 @@ static void do_catch_up(struct spk_synth *synth)
                is_flushing = 0;
                spin_unlock_irqrestore(&flush_lock, flags);
 
-               spk_lock(flags);
+               spin_lock_irqsave(&speakup_info.spinlock, flags);
                if (speakup_info.flushing) {
                        speakup_info.flushing = 0;
-                       spk_unlock(flags);
+                       spin_unlock_irqrestore(&speakup_info.spinlock, flags);
                        synth->flush(synth);
                        continue;
                }
                if (synth_buffer_empty()) {
-                       spk_unlock(flags);
+                       spin_unlock_irqrestore(&speakup_info.spinlock, flags);
                        break;
                }
                ch = synth_buffer_peek();
                set_current_state(TASK_INTERRUPTIBLE);
                delay_time_val = delay_time->u.n.value;
                synth_full_val = synth_full();
-               spk_unlock(flags);
+               spin_unlock_irqrestore(&speakup_info.spinlock, flags);
                if (ch == '\n')
                        ch = 0x0D;
                if (synth_full_val || !spk_serial_out(ch)) {
@@ -257,9 +257,9 @@ static void do_catch_up(struct spk_synth *synth)
                        continue;
                }
                set_current_state(TASK_RUNNING);
-               spk_lock(flags);
+               spin_lock_irqsave(&speakup_info.spinlock, flags);
                synth_buffer_getc();
-               spk_unlock(flags);
+               spin_unlock_irqrestore(&speakup_info.spinlock, flags);
                if (ch == '[')
                        in_escape = 1;
                else if (ch == ']')
@@ -270,10 +270,10 @@ static void do_catch_up(struct spk_synth *synth)
                        if (jiffies >= jiff_max) {
                                if (!in_escape)
                                        spk_serial_out(PROCSPEECH);
-                               spk_lock(flags);
+                               spin_lock_irqsave(&speakup_info.spinlock, flags);
                                jiffy_delta_val = jiffy_delta->u.n.value;
                                delay_time_val = delay_time->u.n.value;
-                               spk_unlock(flags);
+                               spin_unlock_irqrestore(&speakup_info.spinlock, flags);
                                schedule_timeout(msecs_to_jiffies
                                                 (delay_time_val));
                                jiff_max = jiffies + jiffy_delta_val;