static void ram_console_write(struct console *console, const char *s, unsigned int count) { int rem; struct ram_console_buffer *buffer = ram_console_buffer; if (count > ram_console_buffer_size) { s += count - ram_console_buffer_size; count = ram_console_buffer_size; } rem = ram_console_buffer_size - buffer->start; if (rem < count) { ram_console_update(s, rem); s += rem; count -= rem; buffer->start = 0; buffer->size = ram_console_buffer_size; } ram_console_update(s, count); buffer->start += count; if (buffer->size < ram_console_buffer_size) buffer->size += count; ram_console_update_header(); }
void ram_console_write(struct console *console, const char *s, unsigned int count) { unsigned long flags; int rem; struct ram_console_buffer *buffer = ram_console_buffer; spin_lock_irqsave(&ram_console_lock, flags); if (count > ram_console_buffer_size) { s += count - ram_console_buffer_size; count = ram_console_buffer_size; } rem = ram_console_buffer_size - buffer->start; if (rem < count) { ram_console_update(s, rem); s += rem; count -= rem; buffer->start = 0; buffer->size = ram_console_buffer_size; } ram_console_update(s, count); buffer->start += count; if (buffer->size < ram_console_buffer_size) buffer->size += count; ram_console_update_header(); spin_unlock_irqrestore(&ram_console_lock, flags); }