提交 eed4a2ab 编写于 作者: D Denys Vlasenko 提交者: Linus Torvalds

printk.c: use unsigned ints instead of longs for logbuf index

Stop using unsigned _longs_ for printk buffer indexes.  Log buffer is way
smaller than 2 gigabytes and unsigned ints will work too .  Indeed, they do
work nicely on all 32-bit platforms where longs and ints are the same.

With this patch, we have following size savings on amd64:

   text    data     bss     dec     hex filename
   5997     313   17736   24046    5dee 2.6.23.1.t64/kernel/printk.o
   5858     313   17700   23871    5d3f 2.6.23.1.printk.t64/kernel/printk.o
Signed-off-by: NDenys Vlasenko <vda.linux@googlemail.com>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 b3242151
...@@ -93,16 +93,16 @@ static int console_locked, console_suspended; ...@@ -93,16 +93,16 @@ static int console_locked, console_suspended;
*/ */
static DEFINE_SPINLOCK(logbuf_lock); static DEFINE_SPINLOCK(logbuf_lock);
#define LOG_BUF_MASK (log_buf_len-1) #define LOG_BUF_MASK (log_buf_len-1)
#define LOG_BUF(idx) (log_buf[(idx) & LOG_BUF_MASK]) #define LOG_BUF(idx) (log_buf[(idx) & LOG_BUF_MASK])
/* /*
* The indices into log_buf are not constrained to log_buf_len - they * The indices into log_buf are not constrained to log_buf_len - they
* must be masked before subscripting * must be masked before subscripting
*/ */
static unsigned long log_start; /* Index into log_buf: next char to be read by syslog() */ static unsigned log_start; /* Index into log_buf: next char to be read by syslog() */
static unsigned long con_start; /* Index into log_buf: next char to be sent to consoles */ static unsigned con_start; /* Index into log_buf: next char to be sent to consoles */
static unsigned long log_end; /* Index into log_buf: most-recently-written-char + 1 */ static unsigned log_end; /* Index into log_buf: most-recently-written-char + 1 */
/* /*
* Array of consoles built from command line options (console=) * Array of consoles built from command line options (console=)
...@@ -128,17 +128,17 @@ static int console_may_schedule; ...@@ -128,17 +128,17 @@ static int console_may_schedule;
static char __log_buf[__LOG_BUF_LEN]; static char __log_buf[__LOG_BUF_LEN];
static char *log_buf = __log_buf; static char *log_buf = __log_buf;
static int log_buf_len = __LOG_BUF_LEN; static int log_buf_len = __LOG_BUF_LEN;
static unsigned long logged_chars; /* Number of chars produced since last read+clear operation */ static unsigned logged_chars; /* Number of chars produced since last read+clear operation */
static int __init log_buf_len_setup(char *str) static int __init log_buf_len_setup(char *str)
{ {
unsigned long size = memparse(str, &str); unsigned size = memparse(str, &str);
unsigned long flags; unsigned long flags;
if (size) if (size)
size = roundup_pow_of_two(size); size = roundup_pow_of_two(size);
if (size > log_buf_len) { if (size > log_buf_len) {
unsigned long start, dest_idx, offset; unsigned start, dest_idx, offset;
char *new_log_buf; char *new_log_buf;
new_log_buf = alloc_bootmem(size); new_log_buf = alloc_bootmem(size);
...@@ -295,7 +295,7 @@ int log_buf_read(int idx) ...@@ -295,7 +295,7 @@ int log_buf_read(int idx)
*/ */
int do_syslog(int type, char __user *buf, int len) int do_syslog(int type, char __user *buf, int len)
{ {
unsigned long i, j, limit, count; unsigned i, j, limit, count;
int do_clear = 0; int do_clear = 0;
char c; char c;
int error = 0; int error = 0;
...@@ -436,7 +436,7 @@ asmlinkage long sys_syslog(int type, char __user *buf, int len) ...@@ -436,7 +436,7 @@ asmlinkage long sys_syslog(int type, char __user *buf, int len)
/* /*
* Call the console drivers on a range of log_buf * Call the console drivers on a range of log_buf
*/ */
static void __call_console_drivers(unsigned long start, unsigned long end) static void __call_console_drivers(unsigned start, unsigned end)
{ {
struct console *con; struct console *con;
...@@ -463,8 +463,8 @@ early_param("ignore_loglevel", ignore_loglevel_setup); ...@@ -463,8 +463,8 @@ early_param("ignore_loglevel", ignore_loglevel_setup);
/* /*
* Write out chars from start to end - 1 inclusive * Write out chars from start to end - 1 inclusive
*/ */
static void _call_console_drivers(unsigned long start, static void _call_console_drivers(unsigned start,
unsigned long end, int msg_log_level) unsigned end, int msg_log_level)
{ {
if ((msg_log_level < console_loglevel || ignore_loglevel) && if ((msg_log_level < console_loglevel || ignore_loglevel) &&
console_drivers && start != end) { console_drivers && start != end) {
...@@ -484,12 +484,12 @@ static void _call_console_drivers(unsigned long start, ...@@ -484,12 +484,12 @@ static void _call_console_drivers(unsigned long start,
* log_buf[start] to log_buf[end - 1]. * log_buf[start] to log_buf[end - 1].
* The console_sem must be held. * The console_sem must be held.
*/ */
static void call_console_drivers(unsigned long start, unsigned long end) static void call_console_drivers(unsigned start, unsigned end)
{ {
unsigned long cur_index, start_print; unsigned cur_index, start_print;
static int msg_level = -1; static int msg_level = -1;
BUG_ON(((long)(start - end)) > 0); BUG_ON(((int)(start - end)) > 0);
cur_index = start; cur_index = start;
start_print = start; start_print = start;
...@@ -790,7 +790,7 @@ asmlinkage long sys_syslog(int type, char __user *buf, int len) ...@@ -790,7 +790,7 @@ asmlinkage long sys_syslog(int type, char __user *buf, int len)
return -ENOSYS; return -ENOSYS;
} }
static void call_console_drivers(unsigned long start, unsigned long end) static void call_console_drivers(unsigned start, unsigned end)
{ {
} }
...@@ -983,8 +983,8 @@ void wake_up_klogd(void) ...@@ -983,8 +983,8 @@ void wake_up_klogd(void)
void release_console_sem(void) void release_console_sem(void)
{ {
unsigned long flags; unsigned long flags;
unsigned long _con_start, _log_end; unsigned _con_start, _log_end;
unsigned long wake_klogd = 0; unsigned wake_klogd = 0;
if (console_suspended) { if (console_suspended) {
up(&secondary_console_sem); up(&secondary_console_sem);
...@@ -1275,7 +1275,7 @@ void tty_write_message(struct tty_struct *tty, char *msg) ...@@ -1275,7 +1275,7 @@ void tty_write_message(struct tty_struct *tty, char *msg)
int __printk_ratelimit(int ratelimit_jiffies, int ratelimit_burst) int __printk_ratelimit(int ratelimit_jiffies, int ratelimit_burst)
{ {
static DEFINE_SPINLOCK(ratelimit_lock); static DEFINE_SPINLOCK(ratelimit_lock);
static unsigned long toks = 10 * 5 * HZ; static unsigned toks = 10 * 5 * HZ;
static unsigned long last_msg; static unsigned long last_msg;
static int missed; static int missed;
unsigned long flags; unsigned long flags;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册