printk
Prev | Kernel utility functions | Next

## Name

printk — print a kernel message

## Synopsis

`int printk (` | const char * | fmt,
|  | ...`)`;

## Arguments

`fmt`

  format string

`...`

  variable arguments

## Description

This is `printk`. It can be called from any context. We want it to work. Be aware of the fact that if oops_in_progress is not set, we might try to wake klogd up which could deadlock on runqueue lock if `printk` is called from scheduler code.

We try to grab the console_sem. If we succeed, it's easy - we log the output and call the console drivers. If we fail to get the semaphore we place the output into the log buffer and return. The current holder of the console_sem will notice the new output in `release_console_sem` and will send it to the consoles before releasing the semaphore.

One effect of this deferred printing is that code which calls `printk` and then changes console_loglevel may break. This is because console_loglevel is inspected when the actual printing occurs.

## See also

printf(3)

Prev | Up | Next
container_of | Home | acquire_console_sem