| From 3a8d3deb2f4d330d3073aa1b0daf008a41153daf Mon Sep 17 00:00:00 2001 |
| From: Thomas Gleixner <tglx@linutronix.de> |
| Date: Sat, 25 Jul 2009 17:50:36 +0200 |
| Subject: [PATCH] printk: Convert logbuf_lock to raw_spinlock |
| |
| commit 0835f1f82a88e366d8dd20874c94133915dcccdb in tip. |
| |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/kernel/printk.c b/kernel/printk.c |
| index 53011ba..5b4ce9f 100644 |
| --- a/kernel/printk.c |
| +++ b/kernel/printk.c |
| @@ -101,7 +101,7 @@ static int console_locked, console_suspended; |
| * It is also used in interesting ways to provide interlocking in |
| * release_console_sem(). |
| */ |
| -static DEFINE_SPINLOCK(logbuf_lock); |
| +static DEFINE_RAW_SPINLOCK(logbuf_lock); |
| |
| #define LOG_BUF_MASK (log_buf_len-1) |
| #define LOG_BUF(idx) (log_buf[(idx) & LOG_BUF_MASK]) |
| @@ -181,7 +181,7 @@ static int __init log_buf_len_setup(char *str) |
| goto out; |
| } |
| |
| - spin_lock_irqsave(&logbuf_lock, flags); |
| + raw_spin_lock_irqsave(&logbuf_lock, flags); |
| log_buf_len = size; |
| log_buf = new_log_buf; |
| |
| @@ -195,7 +195,7 @@ static int __init log_buf_len_setup(char *str) |
| log_start -= offset; |
| con_start -= offset; |
| log_end -= offset; |
| - spin_unlock_irqrestore(&logbuf_lock, flags); |
| + raw_spin_unlock_irqrestore(&logbuf_lock, flags); |
| |
| printk(KERN_NOTICE "log_buf_len: %d\n", log_buf_len); |
| } |
| @@ -290,18 +290,18 @@ int do_syslog(int type, char __user *buf, int len, bool from_file) |
| if (error) |
| goto out; |
| i = 0; |
| - spin_lock_irq(&logbuf_lock); |
| + raw_spin_lock_irq(&logbuf_lock); |
| while (!error && (log_start != log_end) && i < len) { |
| c = LOG_BUF(log_start); |
| log_start++; |
| - spin_unlock_irq(&logbuf_lock); |
| + raw_spin_unlock_irq(&logbuf_lock); |
| error = __put_user(c,buf); |
| buf++; |
| i++; |
| cond_resched(); |
| - spin_lock_irq(&logbuf_lock); |
| + raw_spin_lock_irq(&logbuf_lock); |
| } |
| - spin_unlock_irq(&logbuf_lock); |
| + raw_spin_unlock_irq(&logbuf_lock); |
| if (!error) |
| error = i; |
| break; |
| @@ -324,7 +324,7 @@ int do_syslog(int type, char __user *buf, int len, bool from_file) |
| count = len; |
| if (count > log_buf_len) |
| count = log_buf_len; |
| - spin_lock_irq(&logbuf_lock); |
| + raw_spin_lock_irq(&logbuf_lock); |
| if (count > logged_chars) |
| count = logged_chars; |
| if (do_clear) |
| @@ -341,12 +341,12 @@ int do_syslog(int type, char __user *buf, int len, bool from_file) |
| if (j + log_buf_len < log_end) |
| break; |
| c = LOG_BUF(j); |
| - spin_unlock_irq(&logbuf_lock); |
| + raw_spin_unlock_irq(&logbuf_lock); |
| error = __put_user(c,&buf[count-1-i]); |
| cond_resched(); |
| - spin_lock_irq(&logbuf_lock); |
| + raw_spin_lock_irq(&logbuf_lock); |
| } |
| - spin_unlock_irq(&logbuf_lock); |
| + raw_spin_unlock_irq(&logbuf_lock); |
| if (error) |
| break; |
| error = i; |
| @@ -535,7 +535,7 @@ static void zap_locks(void) |
| oops_timestamp = jiffies; |
| |
| /* If a crash is occurring, make sure we can't deadlock */ |
| - spin_lock_init(&logbuf_lock); |
| + raw_spin_lock_init(&logbuf_lock); |
| /* And make sure that we print immediately */ |
| semaphore_init(&console_sem); |
| } |
| @@ -639,7 +639,7 @@ static int acquire_console_semaphore_for_printk(unsigned int cpu) |
| } |
| } |
| printk_cpu = UINT_MAX; |
| - spin_unlock(&logbuf_lock); |
| + raw_spin_unlock(&logbuf_lock); |
| return retval; |
| } |
| static const char recursion_bug_msg [] = |
| @@ -697,7 +697,7 @@ asmlinkage int vprintk(const char *fmt, va_list args) |
| } |
| |
| lockdep_off(); |
| - spin_lock(&logbuf_lock); |
| + raw_spin_lock(&logbuf_lock); |
| printk_cpu = this_cpu; |
| |
| if (recursion_bug) { |
| @@ -1046,14 +1046,14 @@ void release_console_sem(void) |
| console_may_schedule = 0; |
| |
| for ( ; ; ) { |
| - spin_lock_irqsave(&logbuf_lock, flags); |
| + raw_spin_lock_irqsave(&logbuf_lock, flags); |
| wake_klogd |= log_start - log_end; |
| if (con_start == log_end) |
| break; /* Nothing to print */ |
| _con_start = con_start; |
| _log_end = log_end; |
| con_start = log_end; /* Flush */ |
| - spin_unlock(&logbuf_lock); |
| + raw_spin_unlock(&logbuf_lock); |
| stop_critical_timings(); /* don't trace print latency */ |
| call_console_drivers(_con_start, _log_end); |
| start_critical_timings(); |
| @@ -1061,7 +1061,7 @@ void release_console_sem(void) |
| } |
| console_locked = 0; |
| up(&console_sem); |
| - spin_unlock_irqrestore(&logbuf_lock, flags); |
| + raw_spin_unlock_irqrestore(&logbuf_lock, flags); |
| if (wake_klogd) |
| wake_up_klogd(); |
| } |
| @@ -1279,9 +1279,9 @@ void register_console(struct console *newcon) |
| * release_console_sem() will print out the buffered messages |
| * for us. |
| */ |
| - spin_lock_irqsave(&logbuf_lock, flags); |
| + raw_spin_lock_irqsave(&logbuf_lock, flags); |
| con_start = log_start; |
| - spin_unlock_irqrestore(&logbuf_lock, flags); |
| + raw_spin_unlock_irqrestore(&logbuf_lock, flags); |
| } |
| release_console_sem(); |
| |
| @@ -1490,10 +1490,10 @@ void kmsg_dump(enum kmsg_dump_reason reason) |
| /* Theoretically, the log could move on after we do this, but |
| there's not a lot we can do about that. The new messages |
| will overwrite the start of what we dump. */ |
| - spin_lock_irqsave(&logbuf_lock, flags); |
| + raw_spin_lock_irqsave(&logbuf_lock, flags); |
| end = log_end & LOG_BUF_MASK; |
| chars = logged_chars; |
| - spin_unlock_irqrestore(&logbuf_lock, flags); |
| + raw_spin_unlock_irqrestore(&logbuf_lock, flags); |
| |
| if (logged_chars > end) { |
| s1 = log_buf + log_buf_len - logged_chars + end; |
| diff --git a/lib/ratelimit.c b/lib/ratelimit.c |
| index 027a03f..c96d500 100644 |
| --- a/lib/ratelimit.c |
| +++ b/lib/ratelimit.c |
| @@ -39,7 +39,7 @@ int ___ratelimit(struct ratelimit_state *rs, const char *func) |
| * in addition to the one that will be printed by |
| * the entity that is holding the lock already: |
| */ |
| - if (!spin_trylock_irqsave(&rs->lock, flags)) |
| + if (!raw_spin_trylock_irqsave(&rs->lock, flags)) |
| return 0; |
| |
| if (!rs->begin) |
| @@ -60,7 +60,7 @@ int ___ratelimit(struct ratelimit_state *rs, const char *func) |
| rs->missed++; |
| ret = 0; |
| } |
| - spin_unlock_irqrestore(&rs->lock, flags); |
| + raw_spin_unlock_irqrestore(&rs->lock, flags); |
| |
| return ret; |
| } |
| -- |
| 1.7.1.1 |
| |