Merge branch 'linus' into core/printk
[pandora-kernel.git] / kernel / printk.c
1 /*
2  *  linux/kernel/printk.c
3  *
4  *  Copyright (C) 1991, 1992  Linus Torvalds
5  *
6  * Modified to make sys_syslog() more flexible: added commands to
7  * return the last 4k of kernel messages, regardless of whether
8  * they've been read or not.  Added option to suppress kernel printk's
9  * to the console.  Added hook for sending the console messages
10  * elsewhere, in preparation for a serial line console (someday).
11  * Ted Ts'o, 2/11/93.
12  * Modified for sysctl support, 1/8/97, Chris Horn.
13  * Fixed SMP synchronization, 08/08/99, Manfred Spraul
14  *     manfred@colorfullife.com
15  * Rewrote bits to get rid of console_lock
16  *      01Mar01 Andrew Morton <andrewm@uow.edu.au>
17  */
18
19 #include <linux/kernel.h>
20 #include <linux/mm.h>
21 #include <linux/tty.h>
22 #include <linux/tty_driver.h>
23 #include <linux/console.h>
24 #include <linux/init.h>
25 #include <linux/jiffies.h>
26 #include <linux/nmi.h>
27 #include <linux/module.h>
28 #include <linux/moduleparam.h>
29 #include <linux/interrupt.h>                    /* For in_interrupt() */
30 #include <linux/delay.h>
31 #include <linux/smp.h>
32 #include <linux/security.h>
33 #include <linux/bootmem.h>
34 #include <linux/syscalls.h>
35
36 #include <asm/uaccess.h>
37
38 /*
39  * Architectures can override it:
40  */
41 void asmlinkage __attribute__((weak)) early_printk(const char *fmt, ...)
42 {
43 }
44
45 #define __LOG_BUF_LEN   (1 << CONFIG_LOG_BUF_SHIFT)
46
47 /* printk's without a loglevel use this.. */
48 #define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING */
49
50 /* We show everything that is MORE important than this.. */
51 #define MINIMUM_CONSOLE_LOGLEVEL 1 /* Minimum loglevel we let people use */
52 #define DEFAULT_CONSOLE_LOGLEVEL 7 /* anything MORE serious than KERN_DEBUG */
53
54 DECLARE_WAIT_QUEUE_HEAD(log_wait);
55
56 int console_printk[4] = {
57         DEFAULT_CONSOLE_LOGLEVEL,       /* console_loglevel */
58         DEFAULT_MESSAGE_LOGLEVEL,       /* default_message_loglevel */
59         MINIMUM_CONSOLE_LOGLEVEL,       /* minimum_console_loglevel */
60         DEFAULT_CONSOLE_LOGLEVEL,       /* default_console_loglevel */
61 };
62
63 /*
64  * Low level drivers may need that to know if they can schedule in
65  * their unblank() callback or not. So let's export it.
66  */
67 int oops_in_progress;
68 EXPORT_SYMBOL(oops_in_progress);
69
70 /*
71  * console_sem protects the console_drivers list, and also
72  * provides serialisation for access to the entire console
73  * driver system.
74  */
75 static DECLARE_MUTEX(console_sem);
76 static DECLARE_MUTEX(secondary_console_sem);
77 struct console *console_drivers;
78 EXPORT_SYMBOL_GPL(console_drivers);
79
80 /*
81  * This is used for debugging the mess that is the VT code by
82  * keeping track if we have the console semaphore held. It's
83  * definitely not the perfect debug tool (we don't know if _WE_
84  * hold it are racing, but it helps tracking those weird code
85  * path in the console code where we end up in places I want
86  * locked without the console sempahore held
87  */
88 static int console_locked, console_suspended;
89
90 /*
91  * logbuf_lock protects log_buf, log_start, log_end, con_start and logged_chars
92  * It is also used in interesting ways to provide interlocking in
93  * release_console_sem().
94  */
95 static DEFINE_SPINLOCK(logbuf_lock);
96
97 #define LOG_BUF_MASK (log_buf_len-1)
98 #define LOG_BUF(idx) (log_buf[(idx) & LOG_BUF_MASK])
99
100 /*
101  * The indices into log_buf are not constrained to log_buf_len - they
102  * must be masked before subscripting
103  */
104 static unsigned log_start;      /* Index into log_buf: next char to be read by syslog() */
105 static unsigned con_start;      /* Index into log_buf: next char to be sent to consoles */
106 static unsigned log_end;        /* Index into log_buf: most-recently-written-char + 1 */
107
108 /*
109  *      Array of consoles built from command line options (console=)
110  */
111 struct console_cmdline
112 {
113         char    name[8];                        /* Name of the driver       */
114         int     index;                          /* Minor dev. to use        */
115         char    *options;                       /* Options for the driver   */
116 #ifdef CONFIG_A11Y_BRAILLE_CONSOLE
117         char    *brl_options;                   /* Options for braille driver */
118 #endif
119 };
120
121 #define MAX_CMDLINECONSOLES 8
122
123 static struct console_cmdline console_cmdline[MAX_CMDLINECONSOLES];
124 static int selected_console = -1;
125 static int preferred_console = -1;
126
127 /* Flag: console code may call schedule() */
128 static int console_may_schedule;
129
130 #ifdef CONFIG_PRINTK
131
132 static char __log_buf[__LOG_BUF_LEN];
133 static char *log_buf = __log_buf;
134 static int log_buf_len = __LOG_BUF_LEN;
135 static unsigned logged_chars; /* Number of chars produced since last read+clear operation */
136
137 static int __init log_buf_len_setup(char *str)
138 {
139         unsigned size = memparse(str, &str);
140         unsigned long flags;
141
142         if (size)
143                 size = roundup_pow_of_two(size);
144         if (size > log_buf_len) {
145                 unsigned start, dest_idx, offset;
146                 char *new_log_buf;
147
148                 new_log_buf = alloc_bootmem(size);
149                 if (!new_log_buf) {
150                         printk(KERN_WARNING "log_buf_len: allocation failed\n");
151                         goto out;
152                 }
153
154                 spin_lock_irqsave(&logbuf_lock, flags);
155                 log_buf_len = size;
156                 log_buf = new_log_buf;
157
158                 offset = start = min(con_start, log_start);
159                 dest_idx = 0;
160                 while (start != log_end) {
161                         log_buf[dest_idx] = __log_buf[start & (__LOG_BUF_LEN - 1)];
162                         start++;
163                         dest_idx++;
164                 }
165                 log_start -= offset;
166                 con_start -= offset;
167                 log_end -= offset;
168                 spin_unlock_irqrestore(&logbuf_lock, flags);
169
170                 printk(KERN_NOTICE "log_buf_len: %d\n", log_buf_len);
171         }
172 out:
173         return 1;
174 }
175
176 __setup("log_buf_len=", log_buf_len_setup);
177
178 #ifdef CONFIG_BOOT_PRINTK_DELAY
179
180 static unsigned int boot_delay; /* msecs delay after each printk during bootup */
181 static unsigned long long printk_delay_msec; /* per msec, based on boot_delay */
182
183 static int __init boot_delay_setup(char *str)
184 {
185         unsigned long lpj;
186         unsigned long long loops_per_msec;
187
188         lpj = preset_lpj ? preset_lpj : 1000000;        /* some guess */
189         loops_per_msec = (unsigned long long)lpj / 1000 * HZ;
190
191         get_option(&str, &boot_delay);
192         if (boot_delay > 10 * 1000)
193                 boot_delay = 0;
194
195         printk_delay_msec = loops_per_msec;
196         printk(KERN_DEBUG "boot_delay: %u, preset_lpj: %ld, lpj: %lu, "
197                 "HZ: %d, printk_delay_msec: %llu\n",
198                 boot_delay, preset_lpj, lpj, HZ, printk_delay_msec);
199         return 1;
200 }
201 __setup("boot_delay=", boot_delay_setup);
202
203 static void boot_delay_msec(void)
204 {
205         unsigned long long k;
206         unsigned long timeout;
207
208         if (boot_delay == 0 || system_state != SYSTEM_BOOTING)
209                 return;
210
211         k = (unsigned long long)printk_delay_msec * boot_delay;
212
213         timeout = jiffies + msecs_to_jiffies(boot_delay);
214         while (k) {
215                 k--;
216                 cpu_relax();
217                 /*
218                  * use (volatile) jiffies to prevent
219                  * compiler reduction; loop termination via jiffies
220                  * is secondary and may or may not happen.
221                  */
222                 if (time_after(jiffies, timeout))
223                         break;
224                 touch_nmi_watchdog();
225         }
226 }
227 #else
228 static inline void boot_delay_msec(void)
229 {
230 }
231 #endif
232
233 /*
234  * Return the number of unread characters in the log buffer.
235  */
236 static int log_buf_get_len(void)
237 {
238         return logged_chars;
239 }
240
241 /*
242  * Copy a range of characters from the log buffer.
243  */
244 int log_buf_copy(char *dest, int idx, int len)
245 {
246         int ret, max;
247         bool took_lock = false;
248
249         if (!oops_in_progress) {
250                 spin_lock_irq(&logbuf_lock);
251                 took_lock = true;
252         }
253
254         max = log_buf_get_len();
255         if (idx < 0 || idx >= max) {
256                 ret = -1;
257         } else {
258                 if (len > max)
259                         len = max;
260                 ret = len;
261                 idx += (log_end - max);
262                 while (len-- > 0)
263                         dest[len] = LOG_BUF(idx + len);
264         }
265
266         if (took_lock)
267                 spin_unlock_irq(&logbuf_lock);
268
269         return ret;
270 }
271
272 /*
273  * Commands to do_syslog:
274  *
275  *      0 -- Close the log.  Currently a NOP.
276  *      1 -- Open the log. Currently a NOP.
277  *      2 -- Read from the log.
278  *      3 -- Read all messages remaining in the ring buffer.
279  *      4 -- Read and clear all messages remaining in the ring buffer
280  *      5 -- Clear ring buffer.
281  *      6 -- Disable printk's to console
282  *      7 -- Enable printk's to console
283  *      8 -- Set level of messages printed to console
284  *      9 -- Return number of unread characters in the log buffer
285  *     10 -- Return size of the log buffer
286  */
287 int do_syslog(int type, char __user *buf, int len)
288 {
289         unsigned i, j, limit, count;
290         int do_clear = 0;
291         char c;
292         int error = 0;
293
294         error = security_syslog(type);
295         if (error)
296                 return error;
297
298         switch (type) {
299         case 0:         /* Close log */
300                 break;
301         case 1:         /* Open log */
302                 break;
303         case 2:         /* Read from log */
304                 error = -EINVAL;
305                 if (!buf || len < 0)
306                         goto out;
307                 error = 0;
308                 if (!len)
309                         goto out;
310                 if (!access_ok(VERIFY_WRITE, buf, len)) {
311                         error = -EFAULT;
312                         goto out;
313                 }
314                 error = wait_event_interruptible(log_wait,
315                                                         (log_start - log_end));
316                 if (error)
317                         goto out;
318                 i = 0;
319                 spin_lock_irq(&logbuf_lock);
320                 while (!error && (log_start != log_end) && i < len) {
321                         c = LOG_BUF(log_start);
322                         log_start++;
323                         spin_unlock_irq(&logbuf_lock);
324                         error = __put_user(c,buf);
325                         buf++;
326                         i++;
327                         cond_resched();
328                         spin_lock_irq(&logbuf_lock);
329                 }
330                 spin_unlock_irq(&logbuf_lock);
331                 if (!error)
332                         error = i;
333                 break;
334         case 4:         /* Read/clear last kernel messages */
335                 do_clear = 1;
336                 /* FALL THRU */
337         case 3:         /* Read last kernel messages */
338                 error = -EINVAL;
339                 if (!buf || len < 0)
340                         goto out;
341                 error = 0;
342                 if (!len)
343                         goto out;
344                 if (!access_ok(VERIFY_WRITE, buf, len)) {
345                         error = -EFAULT;
346                         goto out;
347                 }
348                 count = len;
349                 if (count > log_buf_len)
350                         count = log_buf_len;
351                 spin_lock_irq(&logbuf_lock);
352                 if (count > logged_chars)
353                         count = logged_chars;
354                 if (do_clear)
355                         logged_chars = 0;
356                 limit = log_end;
357                 /*
358                  * __put_user() could sleep, and while we sleep
359                  * printk() could overwrite the messages
360                  * we try to copy to user space. Therefore
361                  * the messages are copied in reverse. <manfreds>
362                  */
363                 for (i = 0; i < count && !error; i++) {
364                         j = limit-1-i;
365                         if (j + log_buf_len < log_end)
366                                 break;
367                         c = LOG_BUF(j);
368                         spin_unlock_irq(&logbuf_lock);
369                         error = __put_user(c,&buf[count-1-i]);
370                         cond_resched();
371                         spin_lock_irq(&logbuf_lock);
372                 }
373                 spin_unlock_irq(&logbuf_lock);
374                 if (error)
375                         break;
376                 error = i;
377                 if (i != count) {
378                         int offset = count-error;
379                         /* buffer overflow during copy, correct user buffer. */
380                         for (i = 0; i < error; i++) {
381                                 if (__get_user(c,&buf[i+offset]) ||
382                                     __put_user(c,&buf[i])) {
383                                         error = -EFAULT;
384                                         break;
385                                 }
386                                 cond_resched();
387                         }
388                 }
389                 break;
390         case 5:         /* Clear ring buffer */
391                 logged_chars = 0;
392                 break;
393         case 6:         /* Disable logging to console */
394                 console_loglevel = minimum_console_loglevel;
395                 break;
396         case 7:         /* Enable logging to console */
397                 console_loglevel = default_console_loglevel;
398                 break;
399         case 8:         /* Set level of messages printed to console */
400                 error = -EINVAL;
401                 if (len < 1 || len > 8)
402                         goto out;
403                 if (len < minimum_console_loglevel)
404                         len = minimum_console_loglevel;
405                 console_loglevel = len;
406                 error = 0;
407                 break;
408         case 9:         /* Number of chars in the log buffer */
409                 error = log_end - log_start;
410                 break;
411         case 10:        /* Size of the log buffer */
412                 error = log_buf_len;
413                 break;
414         default:
415                 error = -EINVAL;
416                 break;
417         }
418 out:
419         return error;
420 }
421
422 asmlinkage long sys_syslog(int type, char __user *buf, int len)
423 {
424         return do_syslog(type, buf, len);
425 }
426
427 /*
428  * Call the console drivers on a range of log_buf
429  */
430 static void __call_console_drivers(unsigned start, unsigned end)
431 {
432         struct console *con;
433
434         for (con = console_drivers; con; con = con->next) {
435                 if ((con->flags & CON_ENABLED) && con->write &&
436                                 (cpu_online(smp_processor_id()) ||
437                                 (con->flags & CON_ANYTIME)))
438                         con->write(con, &LOG_BUF(start), end - start);
439         }
440 }
441
442 static int __read_mostly ignore_loglevel;
443
444 static int __init ignore_loglevel_setup(char *str)
445 {
446         ignore_loglevel = 1;
447         printk(KERN_INFO "debug: ignoring loglevel setting.\n");
448
449         return 0;
450 }
451
452 early_param("ignore_loglevel", ignore_loglevel_setup);
453
454 /*
455  * Write out chars from start to end - 1 inclusive
456  */
457 static void _call_console_drivers(unsigned start,
458                                 unsigned end, int msg_log_level)
459 {
460         if ((msg_log_level < console_loglevel || ignore_loglevel) &&
461                         console_drivers && start != end) {
462                 if ((start & LOG_BUF_MASK) > (end & LOG_BUF_MASK)) {
463                         /* wrapped write */
464                         __call_console_drivers(start & LOG_BUF_MASK,
465                                                 log_buf_len);
466                         __call_console_drivers(0, end & LOG_BUF_MASK);
467                 } else {
468                         __call_console_drivers(start, end);
469                 }
470         }
471 }
472
473 /*
474  * Call the console drivers, asking them to write out
475  * log_buf[start] to log_buf[end - 1].
476  * The console_sem must be held.
477  */
478 static void call_console_drivers(unsigned start, unsigned end)
479 {
480         unsigned cur_index, start_print;
481         static int msg_level = -1;
482
483         BUG_ON(((int)(start - end)) > 0);
484
485         cur_index = start;
486         start_print = start;
487         while (cur_index != end) {
488                 if (msg_level < 0 && ((end - cur_index) > 2) &&
489                                 LOG_BUF(cur_index + 0) == '<' &&
490                                 LOG_BUF(cur_index + 1) >= '0' &&
491                                 LOG_BUF(cur_index + 1) <= '7' &&
492                                 LOG_BUF(cur_index + 2) == '>') {
493                         msg_level = LOG_BUF(cur_index + 1) - '0';
494                         cur_index += 3;
495                         start_print = cur_index;
496                 }
497                 while (cur_index != end) {
498                         char c = LOG_BUF(cur_index);
499
500                         cur_index++;
501                         if (c == '\n') {
502                                 if (msg_level < 0) {
503                                         /*
504                                          * printk() has already given us loglevel tags in
505                                          * the buffer.  This code is here in case the
506                                          * log buffer has wrapped right round and scribbled
507                                          * on those tags
508                                          */
509                                         msg_level = default_message_loglevel;
510                                 }
511                                 _call_console_drivers(start_print, cur_index, msg_level);
512                                 msg_level = -1;
513                                 start_print = cur_index;
514                                 break;
515                         }
516                 }
517         }
518         _call_console_drivers(start_print, end, msg_level);
519 }
520
521 static void emit_log_char(char c)
522 {
523         LOG_BUF(log_end) = c;
524         log_end++;
525         if (log_end - log_start > log_buf_len)
526                 log_start = log_end - log_buf_len;
527         if (log_end - con_start > log_buf_len)
528                 con_start = log_end - log_buf_len;
529         if (logged_chars < log_buf_len)
530                 logged_chars++;
531 }
532
533 /*
534  * Zap console related locks when oopsing. Only zap at most once
535  * every 10 seconds, to leave time for slow consoles to print a
536  * full oops.
537  */
538 static void zap_locks(void)
539 {
540         static unsigned long oops_timestamp;
541
542         if (time_after_eq(jiffies, oops_timestamp) &&
543                         !time_after(jiffies, oops_timestamp + 30 * HZ))
544                 return;
545
546         oops_timestamp = jiffies;
547
548         /* If a crash is occurring, make sure we can't deadlock */
549         spin_lock_init(&logbuf_lock);
550         /* And make sure that we print immediately */
551         init_MUTEX(&console_sem);
552 }
553
554 #if defined(CONFIG_PRINTK_TIME)
555 static int printk_time = 1;
556 #else
557 static int printk_time = 0;
558 #endif
559 module_param_named(time, printk_time, bool, S_IRUGO | S_IWUSR);
560
561 /* Check if we have any console registered that can be called early in boot. */
562 static int have_callable_console(void)
563 {
564         struct console *con;
565
566         for (con = console_drivers; con; con = con->next)
567                 if (con->flags & CON_ANYTIME)
568                         return 1;
569
570         return 0;
571 }
572
573 /**
574  * printk - print a kernel message
575  * @fmt: format string
576  *
577  * This is printk().  It can be called from any context.  We want it to work.
578  * Be aware of the fact that if oops_in_progress is not set, we might try to
579  * wake klogd up which could deadlock on runqueue lock if printk() is called
580  * from scheduler code.
581  *
582  * We try to grab the console_sem.  If we succeed, it's easy - we log the output and
583  * call the console drivers.  If we fail to get the semaphore we place the output
584  * into the log buffer and return.  The current holder of the console_sem will
585  * notice the new output in release_console_sem() and will send it to the
586  * consoles before releasing the semaphore.
587  *
588  * One effect of this deferred printing is that code which calls printk() and
589  * then changes console_loglevel may break. This is because console_loglevel
590  * is inspected when the actual printing occurs.
591  *
592  * See also:
593  * printf(3)
594  */
595
596 asmlinkage int printk(const char *fmt, ...)
597 {
598         va_list args;
599         int r;
600
601         va_start(args, fmt);
602         r = vprintk(fmt, args);
603         va_end(args);
604
605         return r;
606 }
607
608 /* cpu currently holding logbuf_lock */
609 static volatile unsigned int printk_cpu = UINT_MAX;
610
611 /*
612  * Can we actually use the console at this time on this cpu?
613  *
614  * Console drivers may assume that per-cpu resources have
615  * been allocated. So unless they're explicitly marked as
616  * being able to cope (CON_ANYTIME) don't call them until
617  * this CPU is officially up.
618  */
619 static inline int can_use_console(unsigned int cpu)
620 {
621         return cpu_online(cpu) || have_callable_console();
622 }
623
624 /*
625  * Try to get console ownership to actually show the kernel
626  * messages from a 'printk'. Return true (and with the
627  * console_semaphore held, and 'console_locked' set) if it
628  * is successful, false otherwise.
629  *
630  * This gets called with the 'logbuf_lock' spinlock held and
631  * interrupts disabled. It should return with 'lockbuf_lock'
632  * released but interrupts still disabled.
633  */
634 static int acquire_console_semaphore_for_printk(unsigned int cpu)
635 {
636         int retval = 0;
637
638         if (!try_acquire_console_sem()) {
639                 retval = 1;
640
641                 /*
642                  * If we can't use the console, we need to release
643                  * the console semaphore by hand to avoid flushing
644                  * the buffer. We need to hold the console semaphore
645                  * in order to do this test safely.
646                  */
647                 if (!can_use_console(cpu)) {
648                         console_locked = 0;
649                         up(&console_sem);
650                         retval = 0;
651                 }
652         }
653         printk_cpu = UINT_MAX;
654         spin_unlock(&logbuf_lock);
655         return retval;
656 }
657 static const char recursion_bug_msg [] =
658                 KERN_CRIT "BUG: recent printk recursion!\n";
659 static int recursion_bug;
660         static int new_text_line = 1;
661 static char printk_buf[1024];
662
663 asmlinkage int vprintk(const char *fmt, va_list args)
664 {
665         int printed_len = 0;
666         int current_log_level = default_message_loglevel;
667         unsigned long flags;
668         int this_cpu;
669         char *p;
670
671         boot_delay_msec();
672
673         preempt_disable();
674         /* This stops the holder of console_sem just where we want him */
675         raw_local_irq_save(flags);
676         this_cpu = smp_processor_id();
677
678         /*
679          * Ouch, printk recursed into itself!
680          */
681         if (unlikely(printk_cpu == this_cpu)) {
682                 /*
683                  * If a crash is occurring during printk() on this CPU,
684                  * then try to get the crash message out but make sure
685                  * we can't deadlock. Otherwise just return to avoid the
686                  * recursion and return - but flag the recursion so that
687                  * it can be printed at the next appropriate moment:
688                  */
689                 if (!oops_in_progress) {
690                         recursion_bug = 1;
691                         goto out_restore_irqs;
692                 }
693                 zap_locks();
694         }
695
696         lockdep_off();
697         spin_lock(&logbuf_lock);
698         printk_cpu = this_cpu;
699
700         if (recursion_bug) {
701                 recursion_bug = 0;
702                 strcpy(printk_buf, recursion_bug_msg);
703                 printed_len = sizeof(recursion_bug_msg);
704         }
705         /* Emit the output into the temporary buffer */
706         printed_len += vscnprintf(printk_buf + printed_len,
707                                   sizeof(printk_buf) - printed_len, fmt, args);
708
709
710         /*
711          * Copy the output into log_buf.  If the caller didn't provide
712          * appropriate log level tags, we insert them here
713          */
714         for (p = printk_buf; *p; p++) {
715                 if (new_text_line) {
716                         /* If a token, set current_log_level and skip over */
717                         if (p[0] == '<' && p[1] >= '0' && p[1] <= '7' &&
718                             p[2] == '>') {
719                                 current_log_level = p[1] - '0';
720                                 p += 3;
721                                 printed_len -= 3;
722                         }
723
724                         /* Always output the token */
725                         emit_log_char('<');
726                         emit_log_char(current_log_level + '0');
727                         emit_log_char('>');
728                         printed_len += 3;
729                         new_text_line = 0;
730
731                         if (printk_time) {
732                                 /* Follow the token with the time */
733                                 char tbuf[50], *tp;
734                                 unsigned tlen;
735                                 unsigned long long t;
736                                 unsigned long nanosec_rem;
737
738                                 t = cpu_clock(printk_cpu);
739                                 nanosec_rem = do_div(t, 1000000000);
740                                 tlen = sprintf(tbuf, "[%5lu.%06lu] ",
741                                                 (unsigned long) t,
742                                                 nanosec_rem / 1000);
743
744                                 for (tp = tbuf; tp < tbuf + tlen; tp++)
745                                         emit_log_char(*tp);
746                                 printed_len += tlen;
747                         }
748
749                         if (!*p)
750                                 break;
751                 }
752
753                 emit_log_char(*p);
754                 if (*p == '\n')
755                         new_text_line = 1;
756         }
757
758         /*
759          * Try to acquire and then immediately release the
760          * console semaphore. The release will do all the
761          * actual magic (print out buffers, wake up klogd,
762          * etc). 
763          *
764          * The acquire_console_semaphore_for_printk() function
765          * will release 'logbuf_lock' regardless of whether it
766          * actually gets the semaphore or not.
767          */
768         if (acquire_console_semaphore_for_printk(this_cpu))
769                 release_console_sem();
770
771         lockdep_on();
772 out_restore_irqs:
773         raw_local_irq_restore(flags);
774
775         preempt_enable();
776         return printed_len;
777 }
778 EXPORT_SYMBOL(printk);
779 EXPORT_SYMBOL(vprintk);
780
781 #else
782
783 asmlinkage long sys_syslog(int type, char __user *buf, int len)
784 {
785         return -ENOSYS;
786 }
787
788 static void call_console_drivers(unsigned start, unsigned end)
789 {
790 }
791
792 #endif
793
794 static int __add_preferred_console(char *name, int idx, char *options,
795                                    char *brl_options)
796 {
797         struct console_cmdline *c;
798         int i;
799
800         /*
801          *      See if this tty is not yet registered, and
802          *      if we have a slot free.
803          */
804         for (i = 0; i < MAX_CMDLINECONSOLES && console_cmdline[i].name[0]; i++)
805                 if (strcmp(console_cmdline[i].name, name) == 0 &&
806                           console_cmdline[i].index == idx) {
807                                 if (!brl_options)
808                                         selected_console = i;
809                                 return 0;
810                 }
811         if (i == MAX_CMDLINECONSOLES)
812                 return -E2BIG;
813         if (!brl_options)
814                 selected_console = i;
815         c = &console_cmdline[i];
816         strlcpy(c->name, name, sizeof(c->name));
817         c->options = options;
818 #ifdef CONFIG_A11Y_BRAILLE_CONSOLE
819         c->brl_options = brl_options;
820 #endif
821         c->index = idx;
822         return 0;
823 }
824 /*
825  * Set up a list of consoles.  Called from init/main.c
826  */
827 static int __init console_setup(char *str)
828 {
829         char buf[sizeof(console_cmdline[0].name) + 4]; /* 4 for index */
830         char *s, *options, *brl_options = NULL;
831         int idx;
832
833 #ifdef CONFIG_A11Y_BRAILLE_CONSOLE
834         if (!memcmp(str, "brl,", 4)) {
835                 brl_options = "";
836                 str += 4;
837         } else if (!memcmp(str, "brl=", 4)) {
838                 brl_options = str + 4;
839                 str = strchr(brl_options, ',');
840                 if (!str) {
841                         printk(KERN_ERR "need port name after brl=\n");
842                         return 1;
843                 }
844                 *(str++) = 0;
845         }
846 #endif
847
848         /*
849          * Decode str into name, index, options.
850          */
851         if (str[0] >= '0' && str[0] <= '9') {
852                 strcpy(buf, "ttyS");
853                 strncpy(buf + 4, str, sizeof(buf) - 5);
854         } else {
855                 strncpy(buf, str, sizeof(buf) - 1);
856         }
857         buf[sizeof(buf) - 1] = 0;
858         if ((options = strchr(str, ',')) != NULL)
859                 *(options++) = 0;
860 #ifdef __sparc__
861         if (!strcmp(str, "ttya"))
862                 strcpy(buf, "ttyS0");
863         if (!strcmp(str, "ttyb"))
864                 strcpy(buf, "ttyS1");
865 #endif
866         for (s = buf; *s; s++)
867                 if ((*s >= '0' && *s <= '9') || *s == ',')
868                         break;
869         idx = simple_strtoul(s, NULL, 10);
870         *s = 0;
871
872         __add_preferred_console(buf, idx, options, brl_options);
873         return 1;
874 }
875 __setup("console=", console_setup);
876
877 /**
878  * add_preferred_console - add a device to the list of preferred consoles.
879  * @name: device name
880  * @idx: device index
881  * @options: options for this console
882  *
883  * The last preferred console added will be used for kernel messages
884  * and stdin/out/err for init.  Normally this is used by console_setup
885  * above to handle user-supplied console arguments; however it can also
886  * be used by arch-specific code either to override the user or more
887  * commonly to provide a default console (ie from PROM variables) when
888  * the user has not supplied one.
889  */
890 int add_preferred_console(char *name, int idx, char *options)
891 {
892         return __add_preferred_console(name, idx, options, NULL);
893 }
894
895 int update_console_cmdline(char *name, int idx, char *name_new, int idx_new, char *options)
896 {
897         struct console_cmdline *c;
898         int i;
899
900         for (i = 0; i < MAX_CMDLINECONSOLES && console_cmdline[i].name[0]; i++)
901                 if (strcmp(console_cmdline[i].name, name) == 0 &&
902                           console_cmdline[i].index == idx) {
903                                 c = &console_cmdline[i];
904                                 strlcpy(c->name, name_new, sizeof(c->name));
905                                 c->name[sizeof(c->name) - 1] = 0;
906                                 c->options = options;
907                                 c->index = idx_new;
908                                 return i;
909                 }
910         /* not found */
911         return -1;
912 }
913
914 int console_suspend_enabled = 1;
915 EXPORT_SYMBOL(console_suspend_enabled);
916
917 static int __init console_suspend_disable(char *str)
918 {
919         console_suspend_enabled = 0;
920         return 1;
921 }
922 __setup("no_console_suspend", console_suspend_disable);
923
924 /**
925  * suspend_console - suspend the console subsystem
926  *
927  * This disables printk() while we go into suspend states
928  */
929 void suspend_console(void)
930 {
931         if (!console_suspend_enabled)
932                 return;
933         printk("Suspending console(s)\n");
934         acquire_console_sem();
935         console_suspended = 1;
936 }
937
938 void resume_console(void)
939 {
940         if (!console_suspend_enabled)
941                 return;
942         console_suspended = 0;
943         release_console_sem();
944 }
945
946 /**
947  * acquire_console_sem - lock the console system for exclusive use.
948  *
949  * Acquires a semaphore which guarantees that the caller has
950  * exclusive access to the console system and the console_drivers list.
951  *
952  * Can sleep, returns nothing.
953  */
954 void acquire_console_sem(void)
955 {
956         BUG_ON(in_interrupt());
957         if (console_suspended) {
958                 down(&secondary_console_sem);
959                 return;
960         }
961         down(&console_sem);
962         console_locked = 1;
963         console_may_schedule = 1;
964 }
965 EXPORT_SYMBOL(acquire_console_sem);
966
967 int try_acquire_console_sem(void)
968 {
969         if (down_trylock(&console_sem))
970                 return -1;
971         console_locked = 1;
972         console_may_schedule = 0;
973         return 0;
974 }
975 EXPORT_SYMBOL(try_acquire_console_sem);
976
977 int is_console_locked(void)
978 {
979         return console_locked;
980 }
981
982 void wake_up_klogd(void)
983 {
984         if (!oops_in_progress && waitqueue_active(&log_wait))
985                 wake_up_interruptible(&log_wait);
986 }
987
988 /**
989  * release_console_sem - unlock the console system
990  *
991  * Releases the semaphore which the caller holds on the console system
992  * and the console driver list.
993  *
994  * While the semaphore was held, console output may have been buffered
995  * by printk().  If this is the case, release_console_sem() emits
996  * the output prior to releasing the semaphore.
997  *
998  * If there is output waiting for klogd, we wake it up.
999  *
1000  * release_console_sem() may be called from any context.
1001  */
1002 void release_console_sem(void)
1003 {
1004         unsigned long flags;
1005         unsigned _con_start, _log_end;
1006         unsigned wake_klogd = 0;
1007
1008         if (console_suspended) {
1009                 up(&secondary_console_sem);
1010                 return;
1011         }
1012
1013         console_may_schedule = 0;
1014
1015         for ( ; ; ) {
1016                 spin_lock_irqsave(&logbuf_lock, flags);
1017                 wake_klogd |= log_start - log_end;
1018                 if (con_start == log_end)
1019                         break;                  /* Nothing to print */
1020                 _con_start = con_start;
1021                 _log_end = log_end;
1022                 con_start = log_end;            /* Flush */
1023                 spin_unlock(&logbuf_lock);
1024                 call_console_drivers(_con_start, _log_end);
1025                 local_irq_restore(flags);
1026         }
1027         console_locked = 0;
1028         up(&console_sem);
1029         spin_unlock_irqrestore(&logbuf_lock, flags);
1030         if (wake_klogd)
1031                 wake_up_klogd();
1032 }
1033 EXPORT_SYMBOL(release_console_sem);
1034
1035 /**
1036  * console_conditional_schedule - yield the CPU if required
1037  *
1038  * If the console code is currently allowed to sleep, and
1039  * if this CPU should yield the CPU to another task, do
1040  * so here.
1041  *
1042  * Must be called within acquire_console_sem().
1043  */
1044 void __sched console_conditional_schedule(void)
1045 {
1046         if (console_may_schedule)
1047                 cond_resched();
1048 }
1049 EXPORT_SYMBOL(console_conditional_schedule);
1050
1051 void console_print(const char *s)
1052 {
1053         printk(KERN_EMERG "%s", s);
1054 }
1055 EXPORT_SYMBOL(console_print);
1056
1057 void console_unblank(void)
1058 {
1059         struct console *c;
1060
1061         /*
1062          * console_unblank can no longer be called in interrupt context unless
1063          * oops_in_progress is set to 1..
1064          */
1065         if (oops_in_progress) {
1066                 if (down_trylock(&console_sem) != 0)
1067                         return;
1068         } else
1069                 acquire_console_sem();
1070
1071         console_locked = 1;
1072         console_may_schedule = 0;
1073         for (c = console_drivers; c != NULL; c = c->next)
1074                 if ((c->flags & CON_ENABLED) && c->unblank)
1075                         c->unblank();
1076         release_console_sem();
1077 }
1078
1079 /*
1080  * Return the console tty driver structure and its associated index
1081  */
1082 struct tty_driver *console_device(int *index)
1083 {
1084         struct console *c;
1085         struct tty_driver *driver = NULL;
1086
1087         acquire_console_sem();
1088         for (c = console_drivers; c != NULL; c = c->next) {
1089                 if (!c->device)
1090                         continue;
1091                 driver = c->device(c, index);
1092                 if (driver)
1093                         break;
1094         }
1095         release_console_sem();
1096         return driver;
1097 }
1098
1099 /*
1100  * Prevent further output on the passed console device so that (for example)
1101  * serial drivers can disable console output before suspending a port, and can
1102  * re-enable output afterwards.
1103  */
1104 void console_stop(struct console *console)
1105 {
1106         acquire_console_sem();
1107         console->flags &= ~CON_ENABLED;
1108         release_console_sem();
1109 }
1110 EXPORT_SYMBOL(console_stop);
1111
1112 void console_start(struct console *console)
1113 {
1114         acquire_console_sem();
1115         console->flags |= CON_ENABLED;
1116         release_console_sem();
1117 }
1118 EXPORT_SYMBOL(console_start);
1119
1120 /*
1121  * The console driver calls this routine during kernel initialization
1122  * to register the console printing procedure with printk() and to
1123  * print any messages that were printed by the kernel before the
1124  * console driver was initialized.
1125  */
1126 void register_console(struct console *console)
1127 {
1128         int i;
1129         unsigned long flags;
1130         struct console *bootconsole = NULL;
1131
1132         if (console_drivers) {
1133                 if (console->flags & CON_BOOT)
1134                         return;
1135                 if (console_drivers->flags & CON_BOOT)
1136                         bootconsole = console_drivers;
1137         }
1138
1139         if (preferred_console < 0 || bootconsole || !console_drivers)
1140                 preferred_console = selected_console;
1141
1142         if (console->early_setup)
1143                 console->early_setup();
1144
1145         /*
1146          *      See if we want to use this console driver. If we
1147          *      didn't select a console we take the first one
1148          *      that registers here.
1149          */
1150         if (preferred_console < 0) {
1151                 if (console->index < 0)
1152                         console->index = 0;
1153                 if (console->setup == NULL ||
1154                     console->setup(console, NULL) == 0) {
1155                         console->flags |= CON_ENABLED;
1156                         if (console->device) {
1157                                 console->flags |= CON_CONSDEV;
1158                                 preferred_console = 0;
1159                         }
1160                 }
1161         }
1162
1163         /*
1164          *      See if this console matches one we selected on
1165          *      the command line.
1166          */
1167         for (i = 0; i < MAX_CMDLINECONSOLES && console_cmdline[i].name[0];
1168                         i++) {
1169                 if (strcmp(console_cmdline[i].name, console->name) != 0)
1170                         continue;
1171                 if (console->index >= 0 &&
1172                     console->index != console_cmdline[i].index)
1173                         continue;
1174                 if (console->index < 0)
1175                         console->index = console_cmdline[i].index;
1176 #ifdef CONFIG_A11Y_BRAILLE_CONSOLE
1177                 if (console_cmdline[i].brl_options) {
1178                         console->flags |= CON_BRL;
1179                         braille_register_console(console,
1180                                         console_cmdline[i].index,
1181                                         console_cmdline[i].options,
1182                                         console_cmdline[i].brl_options);
1183                         return;
1184                 }
1185 #endif
1186                 if (console->setup &&
1187                     console->setup(console, console_cmdline[i].options) != 0)
1188                         break;
1189                 console->flags |= CON_ENABLED;
1190                 console->index = console_cmdline[i].index;
1191                 if (i == selected_console) {
1192                         console->flags |= CON_CONSDEV;
1193                         preferred_console = selected_console;
1194                 }
1195                 break;
1196         }
1197
1198         if (!(console->flags & CON_ENABLED))
1199                 return;
1200
1201         if (bootconsole && (console->flags & CON_CONSDEV)) {
1202                 printk(KERN_INFO "console handover: boot [%s%d] -> real [%s%d]\n",
1203                        bootconsole->name, bootconsole->index,
1204                        console->name, console->index);
1205                 unregister_console(bootconsole);
1206                 console->flags &= ~CON_PRINTBUFFER;
1207         } else {
1208                 printk(KERN_INFO "console [%s%d] enabled\n",
1209                        console->name, console->index);
1210         }
1211
1212         /*
1213          *      Put this console in the list - keep the
1214          *      preferred driver at the head of the list.
1215          */
1216         acquire_console_sem();
1217         if ((console->flags & CON_CONSDEV) || console_drivers == NULL) {
1218                 console->next = console_drivers;
1219                 console_drivers = console;
1220                 if (console->next)
1221                         console->next->flags &= ~CON_CONSDEV;
1222         } else {
1223                 console->next = console_drivers->next;
1224                 console_drivers->next = console;
1225         }
1226         if (console->flags & CON_PRINTBUFFER) {
1227                 /*
1228                  * release_console_sem() will print out the buffered messages
1229                  * for us.
1230                  */
1231                 spin_lock_irqsave(&logbuf_lock, flags);
1232                 con_start = log_start;
1233                 spin_unlock_irqrestore(&logbuf_lock, flags);
1234         }
1235         release_console_sem();
1236 }
1237 EXPORT_SYMBOL(register_console);
1238
1239 int unregister_console(struct console *console)
1240 {
1241         struct console *a, *b;
1242         int res = 1;
1243
1244 #ifdef CONFIG_A11Y_BRAILLE_CONSOLE
1245         if (console->flags & CON_BRL)
1246                 return braille_unregister_console(console);
1247 #endif
1248
1249         acquire_console_sem();
1250         if (console_drivers == console) {
1251                 console_drivers=console->next;
1252                 res = 0;
1253         } else if (console_drivers) {
1254                 for (a=console_drivers->next, b=console_drivers ;
1255                      a; b=a, a=b->next) {
1256                         if (a == console) {
1257                                 b->next = a->next;
1258                                 res = 0;
1259                                 break;
1260                         }
1261                 }
1262         }
1263
1264         /*
1265          * If this isn't the last console and it has CON_CONSDEV set, we
1266          * need to set it on the next preferred console.
1267          */
1268         if (console_drivers != NULL && console->flags & CON_CONSDEV)
1269                 console_drivers->flags |= CON_CONSDEV;
1270
1271         release_console_sem();
1272         return res;
1273 }
1274 EXPORT_SYMBOL(unregister_console);
1275
1276 static int __init disable_boot_consoles(void)
1277 {
1278         if (console_drivers != NULL) {
1279                 if (console_drivers->flags & CON_BOOT) {
1280                         printk(KERN_INFO "turn off boot console %s%d\n",
1281                                 console_drivers->name, console_drivers->index);
1282                         return unregister_console(console_drivers);
1283                 }
1284         }
1285         return 0;
1286 }
1287 late_initcall(disable_boot_consoles);
1288
1289 /**
1290  * tty_write_message - write a message to a certain tty, not just the console.
1291  * @tty: the destination tty_struct
1292  * @msg: the message to write
1293  *
1294  * This is used for messages that need to be redirected to a specific tty.
1295  * We don't put it into the syslog queue right now maybe in the future if
1296  * really needed.
1297  */
1298 void tty_write_message(struct tty_struct *tty, char *msg)
1299 {
1300         if (tty && tty->ops->write)
1301                 tty->ops->write(tty, msg, strlen(msg));
1302         return;
1303 }
1304
1305 #if defined CONFIG_PRINTK
1306 /*
1307  * printk rate limiting, lifted from the networking subsystem.
1308  *
1309  * This enforces a rate limit: not more than one kernel message
1310  * every printk_ratelimit_jiffies to make a denial-of-service
1311  * attack impossible.
1312  */
1313 int __printk_ratelimit(int ratelimit_jiffies, int ratelimit_burst)
1314 {
1315         return __ratelimit(ratelimit_jiffies, ratelimit_burst);
1316 }
1317 EXPORT_SYMBOL(__printk_ratelimit);
1318
1319 /* minimum time in jiffies between messages */
1320 int printk_ratelimit_jiffies = 5 * HZ;
1321
1322 /* number of messages we send before ratelimiting */
1323 int printk_ratelimit_burst = 10;
1324
1325 int printk_ratelimit(void)
1326 {
1327         return __printk_ratelimit(printk_ratelimit_jiffies,
1328                                 printk_ratelimit_burst);
1329 }
1330 EXPORT_SYMBOL(printk_ratelimit);
1331
1332 /**
1333  * printk_timed_ratelimit - caller-controlled printk ratelimiting
1334  * @caller_jiffies: pointer to caller's state
1335  * @interval_msecs: minimum interval between prints
1336  *
1337  * printk_timed_ratelimit() returns true if more than @interval_msecs
1338  * milliseconds have elapsed since the last time printk_timed_ratelimit()
1339  * returned true.
1340  */
1341 bool printk_timed_ratelimit(unsigned long *caller_jiffies,
1342                         unsigned int interval_msecs)
1343 {
1344         if (*caller_jiffies == 0 || time_after(jiffies, *caller_jiffies)) {
1345                 *caller_jiffies = jiffies + msecs_to_jiffies(interval_msecs);
1346                 return true;
1347         }
1348         return false;
1349 }
1350 EXPORT_SYMBOL(printk_timed_ratelimit);
1351 #endif