This patch introduces with symbolic constants for the various sys_syslog() opcodes, and changes all in-kernel references to those opcodes to use the constants. The header is added to the set of user/kernel interface headers; there is no #ifdef __KERNEL__ block in it yet, but there will be in subsequent patches, so I put it in as an 'unifdef' header. zw Index: linux-2.6/include/linux/Kbuild =================================================================== --- linux-2.6.orig/include/linux/Kbuild 2006-11-10 13:36:58.000000000 -0800 +++ linux-2.6/include/linux/Kbuild 2006-11-10 13:37:13.000000000 -0800 @@ -253,6 +253,7 @@ unifdef-y += kernelcapi.h unifdef-y += kernel.h unifdef-y += keyboard.h +unifdef-y += klog.h unifdef-y += llc.h unifdef-y += loop.h unifdef-y += lp.h Index: linux-2.6/include/linux/klog.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6/include/linux/klog.h 2006-11-10 14:16:35.000000000 -0800 @@ -0,0 +1,26 @@ +#ifndef _LINUX_KLOG_H +#define _LINUX_KLOG_H + +/* + * Constants for the first argument to the syslog() system call + * (aka klogctl()). These numbers are part of the user space ABI! + */ +enum { + KLOG_CLOSE = 0, /* close log */ + KLOG_OPEN = 1, /* open log */ + KLOG_READ = 2, /* read from log (klogd) */ + + KLOG_READ_HIST = 3, /* read history of log messages (dmesg) */ + KLOG_READ_CLEAR_HIST = 4, /* read and clear history */ + KLOG_CLEAR_HIST = 5, /* just clear history */ + + KLOG_DISABLE_CONSOLE = 6, /* disable printk to console */ + KLOG_ENABLE_CONSOLE = 7, /* enable printk to console */ + KLOG_SET_CONSOLE_LVL = 8, /* set minimum severity of messages to be + * printed to console */ + + KLOG_GET_UNREAD = 9, /* return number of unread characters */ + KLOG_GET_SIZE = 10 /* return size of log buffer */ +}; + +#endif /* klog.h */ Index: linux-2.6/kernel/printk.c =================================================================== --- linux-2.6.orig/kernel/printk.c 2006-11-10 13:16:47.000000000 -0800 +++ linux-2.6/kernel/printk.c 2006-11-10 14:16:34.000000000 -0800 @@ -32,6 +32,7 @@ #include #include #include +#include #include @@ -165,21 +166,7 @@ __setup("log_buf_len=", log_buf_len_setup); -/* - * Commands to do_syslog: - * - * 0 -- Close the log. Currently a NOP. - * 1 -- Open the log. Currently a NOP. - * 2 -- Read from the log. - * 3 -- Read all messages remaining in the ring buffer. - * 4 -- Read and clear all messages remaining in the ring buffer - * 5 -- Clear ring buffer. - * 6 -- Disable printk's to console - * 7 -- Enable printk's to console - * 8 -- Set level of messages printed to console - * 9 -- Return number of unread characters in the log buffer - * 10 -- Return size of the log buffer - */ +/* See linux/klog.h for the command numbers passed as the first argument. */ int do_syslog(int type, char __user *buf, int len) { unsigned long i, j, limit, count; @@ -192,11 +179,11 @@ return error; switch (type) { - case 0: /* Close log */ + case KLOG_CLOSE: break; - case 1: /* Open log */ + case KLOG_OPEN: break; - case 2: /* Read from log */ + case KLOG_READ: error = -EINVAL; if (!buf || len < 0) goto out; @@ -227,10 +214,10 @@ if (!error) error = i; break; - case 4: /* Read/clear last kernel messages */ + case KLOG_READ_CLEAR_HIST: do_clear = 1; /* FALL THRU */ - case 3: /* Read last kernel messages */ + case KLOG_READ_HIST: error = -EINVAL; if (!buf || len < 0) goto out; @@ -283,16 +270,16 @@ } } break; - case 5: /* Clear ring buffer */ + case KLOG_CLEAR_HIST: logged_chars = 0; break; - case 6: /* Disable logging to console */ + case KLOG_DISABLE_CONSOLE: console_loglevel = minimum_console_loglevel; break; - case 7: /* Enable logging to console */ + case KLOG_ENABLE_CONSOLE: console_loglevel = default_console_loglevel; break; - case 8: /* Set level of messages printed to console */ + case KLOG_SET_CONSOLE_LVL: error = -EINVAL; if (len < 1 || len > 8) goto out; @@ -301,10 +288,10 @@ console_loglevel = len; error = 0; break; - case 9: /* Number of chars in the log buffer */ + case KLOG_GET_UNREAD: error = log_end - log_start; break; - case 10: /* Size of the log buffer */ + case KLOG_GET_SIZE: error = log_buf_len; break; default: Index: linux-2.6/fs/proc/kmsg.c =================================================================== --- linux-2.6.orig/fs/proc/kmsg.c 2006-11-10 14:16:41.000000000 -0800 +++ linux-2.6/fs/proc/kmsg.c 2006-11-10 14:22:56.000000000 -0800 @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -21,27 +22,28 @@ static int kmsg_open(struct inode * inode, struct file * file) { - return do_syslog(1,NULL,0); + return do_syslog(KLOG_OPEN,NULL,0); } static int kmsg_release(struct inode * inode, struct file * file) { - (void) do_syslog(0,NULL,0); + (void) do_syslog(KLOG_CLOSE,NULL,0); return 0; } static ssize_t kmsg_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) { - if ((file->f_flags & O_NONBLOCK) && !do_syslog(9, NULL, 0)) + if ((file->f_flags & O_NONBLOCK) + && !do_syslog(KLOG_GET_UNREAD, NULL, 0)) return -EAGAIN; - return do_syslog(2, buf, count); + return do_syslog(KLOG_READ, buf, count); } static unsigned int kmsg_poll(struct file *file, poll_table *wait) { poll_wait(file, &log_wait, wait); - if (do_syslog(9, NULL, 0)) + if (do_syslog(KLOG_GET_UNREAD, NULL, 0)) return POLLIN | POLLRDNORM; return 0; } -- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/