--- /dev/null
+#include <linux/fs.h>
+#include <linux/init.h>
+#include <linux/proc_fs.h>
+#include <linux/seq_file.h>
+
+static int cmdline_proc_show(struct seq_file *m, void *v)
+{
+       seq_printf(m, "%s\n", saved_command_line);
+       return 0;
+}
+
+static int cmdline_proc_open(struct inode *inode, struct file *file)
+{
+       return single_open(file, cmdline_proc_show, NULL);
+}
+
+static const struct file_operations cmdline_proc_fops = {
+       .open           = cmdline_proc_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+};
+
+static int __init proc_cmdline_init(void)
+{
+       proc_create("cmdline", 0, NULL, &cmdline_proc_fops);
+       return 0;
+}
+module_init(proc_cmdline_init);
 
        .release        = seq_release,
 };
 
-static int cmdline_read_proc(char *page, char **start, off_t off,
-                                int count, int *eof, void *data)
-{
-       int len;
-
-       len = sprintf(page, "%s\n", saved_command_line);
-       return proc_calc_metrics(page, start, off, count, eof, len);
-}
-
 #ifdef CONFIG_FILE_LOCKING
 static int locks_open(struct inode *inode, struct file *filp)
 {
                char *name;
                int (*read_proc)(char*,char**,off_t,int,int*,void*);
        } *p, simple_ones[] = {
-               {"cmdline",     cmdline_read_proc},
                {"execdomains", execdomains_read_proc},
                {NULL,}
        };