LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Michal Schmidt <mschmidt@redhat.com>
To: Ingo Molnar <mingo@elte.hu>
Cc: Alexey Dobriyan <adobriyan@gmail.com>,
"Eric W. Biederman" <ebiederm@xmission.com>,
linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
Adrian Bunk <bunk@stusta.de>,
Alexander Viro <viro@ftp.linux.org.uk>
Subject: Re: [PATCH 58/59] sysctl: Reimplement the sysctl proc support
Date: Wed, 14 Mar 2007 16:44:42 +0100 [thread overview]
Message-ID: <45F8186A.6090408@redhat.com> (raw)
In-Reply-To: <20070314122453.GA5775@elte.hu>
Ingo Molnar wrote:
> * Alexey Dobriyan <adobriyan@gmail.com> wrote:
>
>> Use register_sysctl_table() for sysctls.
>>
>
> yes - i just wanted to point out the incompatibility and subtle breakage
> that this change caused. I'll now have to convert the current code over
> to sysctl_table, which isnt that hard but not trivial either, and i
> certainly could make use that time for other purposes.
>
> Ingo
>
How about this? It works for me.
Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
diff --git a/kernel/latency_trace.c b/kernel/latency_trace.c
index e07bb95..a13d001 100644
--- a/kernel/latency_trace.c
+++ b/kernel/latency_trace.c
@@ -19,7 +19,7 @@
#include <linux/seq_file.h>
#include <linux/interrupt.h>
#include <linux/clocksource.h>
-#include <linux/proc_fs.h>
+#include <linux/sysctl.h>
#include <linux/latency_hist.h>
#include <linux/utsrelease.h>
#include <asm/uaccess.h>
@@ -2661,66 +2661,94 @@ void print_traces(struct task_struct *task)
}
#endif
-static int preempt_read_proc(char *page, char **start, off_t off,
- int count, int *eof, void *data)
+#if defined(CONFIG_WAKEUP_TIMING) || defined(CONFIG_EVENT_TRACE)
+
+static int preempt_proc_handler(ctl_table *table, int write, struct file *filp,
+ void __user *buffer, size_t *lenp, loff_t *ppos)
{
- cycle_t *max = data;
+#define TMPBUFLEN 21
+ char buf[TMPBUFLEN];
+ size_t left = *lenp;
+ cycle_t *max = table->data;
- return sprintf(page, "%ld\n", cycles_to_usecs(*max));
-}
+ if (!table->data || table->maxlen!=sizeof(cycles_t) || !*lenp ||
+ (*ppos && !write)) {
+ *lenp = 0;
+ return 0;
+ }
-static int preempt_write_proc(struct file *file, const char __user *buffer,
- unsigned long count, void *data)
-{
- unsigned int c, done = 0, val, sum = 0;
- cycle_t *max = data;
+ if (!write) {
+ int len;
- while (count) {
- if (get_user(c, buffer))
- return -EFAULT;
- val = c - '0';
- buffer++;
- done++;
- count--;
- if (c == 0 || c == '\n')
- break;
- if (val > 9)
+ len = snprintf(buf, TMPBUFLEN, "%ld\n", cycles_to_usecs(*max));
+ if (len >= TMPBUFLEN)
return -EINVAL;
- sum *= 10;
- sum += val;
+ if (len > left)
+ len = left;
+ if (copy_to_user(buffer, buf, len))
+ return -EFAULT;
+ left -= len;
+ } else {
+ unsigned int c, val, sum = 0;
+
+ while (left) {
+ if (get_user(c, (char __user *)buffer))
+ return -EFAULT;
+ val = c - '0';
+ buffer++;
+ left--;
+ if (c == 0 || c == '\n')
+ break;
+ if (val > 9)
+ return -EINVAL;
+ sum *= 10;
+ sum += val;
+ }
+ *max = usecs_to_cycles(sum);
}
- *max = usecs_to_cycles(sum);
- return done;
+
+ *lenp -= left;
+ *ppos += *lenp;
+ return 0;
}
-#if defined(CONFIG_WAKEUP_TIMING) || defined(CONFIG_EVENT_TRACE)
+static ctl_table preempt_latency_table[] = {
+ {
+ .ctl_name = CTL_UNNUMBERED,
+ .procname = "preempt_max_latency",
+ .data = &preempt_max_latency,
+ .maxlen = sizeof(cycles_t),
+ .mode = 0644,
+ .proc_handler = &preempt_proc_handler,
+ },
+#ifdef CONFIG_EVENT_TRACE
+ {
+ .ctl_name = CTL_UNNUMBERED,
+ .procname = "preempt_thresh",
+ .data = &preempt_thresh,
+ .maxlen = sizeof(cycles_t),
+ .mode = 0644,
+ .proc_handler = &preempt_proc_handler,
+ },
+#endif
+ { .ctl_name = 0 }
+};
-#define PROCNAME_PML "sys/kernel/preempt_max_latency"
-#define PROCNAME_PT "sys/kernel/preempt_thresh"
+static ctl_table kernel_root[] = {
+ {
+ .ctl_name = CTL_KERN,
+ .procname = "kernel",
+ .mode = 0555,
+ .child = preempt_latency_table,
+ },
+ { .ctl_name = 0 }
+};
+
+static struct ctl_table_header *sysctl_header;
static __init int latency_fs_init(void)
{
- struct proc_dir_entry *entry;
-
- if (!(entry = create_proc_entry(PROCNAME_PML, 0644, NULL)))
- printk("latency_fs_init(): can't create %s\n", PROCNAME_PML);
- else {
- entry->nlink = 1;
- entry->data = &preempt_max_latency;
- entry->read_proc = preempt_read_proc;
- entry->write_proc = preempt_write_proc;
- }
-
-#ifdef CONFIG_EVENT_TRACE
- if (!(entry = create_proc_entry(PROCNAME_PT, 0644, NULL)))
- printk("latency_fs_init(): can't create %s\n", PROCNAME_PT);
- else {
- entry->nlink = 1;
- entry->data = &preempt_thresh;
- entry->read_proc = preempt_read_proc;
- entry->write_proc = preempt_write_proc;
- }
-#endif
+ sysctl_header = register_sysctl_table(kernel_root);
return 0;
}
__initcall(latency_fs_init);
--
Michal Schmidt Kernel Developer
mschmidt@redhat.com Red Hat Czech s.r.o.
next prev parent reply other threads:[~2007-03-14 15:47 UTC|newest]
Thread overview: 104+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-16 16:33 [PATCH 0/59] Cleanup sysctl Eric W. Biederman
2007-01-16 16:39 ` [PATCH 1/59] sysctl x25: Remove unnecessary insert_at_head from register_sysctl_table Eric W. Biederman
2007-01-16 16:39 ` [PATCH 2/59] sysctl: Move CTL_SUNRPC to sysctl.h where it belongs Eric W. Biederman
2007-01-16 16:39 ` [PATCH 3/59] sysctl: sunrpc Remove unnecessary insert_at_head flag Eric W. Biederman
2007-01-16 16:39 ` [PATCH 4/59] sysctl: sunrpc Don't unnecessarily set ctl_table->de Eric W. Biederman
2007-01-16 16:39 ` [PATCH 5/59] sysctl: rose remove unnecessary insert_at_head flag Eric W. Biederman
2007-01-16 17:36 ` Ralf Baechle
2007-01-16 16:39 ` [PATCH 6/59] sysctl: netrom " Eric W. Biederman
2007-01-16 16:39 ` [PATCH 7/59] sysctl: llc " Eric W. Biederman
2007-01-16 16:39 ` [PATCH 8/59] sysctl: ipx " Eric W. Biederman
2007-01-16 16:39 ` [PATCH 9/59] sysctl: decnet " Eric W. Biederman
2007-01-16 16:39 ` [PATCH 10/59] sysctl: dccp " Eric W. Biederman
2007-01-16 16:39 ` [PATCH 11/59] sysctl: ax25 " Eric W. Biederman
2007-01-16 16:39 ` [PATCH 12/59] sysctl: atalk " Eric W. Biederman
2007-01-16 16:39 ` [PATCH 13/59] sysctl: xfs " Eric W. Biederman
2007-01-16 16:39 ` [PATCH 14/59] sysctl: C99 convert xfs ctl_tables Eric W. Biederman
2007-01-16 18:16 ` Alexey Dobriyan
2007-01-16 18:37 ` Eric W. Biederman
2007-01-16 18:45 ` [PATCH] sysctl: fixes for my C99 converion " Eric W. Biederman
2007-01-17 17:01 ` [PATCH 14/59] sysctl: C99 convert " Kirill Korotaev
2007-01-17 17:37 ` [xfs-masters] " Eric Sandeen
2007-01-16 16:39 ` [PATCH 15/59] sysctl: scsi remove unnecessary insert_at_head flag Eric W. Biederman
2007-01-16 16:39 ` [PATCH 16/59] sysctl: md Remove " Eric W. Biederman
2007-01-16 16:39 ` [PATCH 17/59] sysctl: mac_hid remove " Eric W. Biederman
2007-01-16 16:39 ` [PATCH 18/59] sysctl: ipmi " Eric W. Biederman
2007-01-17 3:14 ` Benjamin Herrenschmidt
2007-01-16 16:39 ` [PATCH 19/59] sysctl: cdrom " Eric W. Biederman
2007-01-16 16:39 ` [PATCH 20/59] sysctl: cdrom Don't set de->owner Eric W. Biederman
2007-01-16 18:19 ` James Bottomley
2007-01-16 16:39 ` [PATCH 21/59] sysctl: Move CTL_PM into sysctl.h where it belongs Eric W. Biederman
2007-01-16 16:39 ` [PATCH 22/59] sysctl: frv pm remove unnecessary insert_at_head flag Eric W. Biederman
2007-01-16 16:39 ` [PATCH 23/59] sysctl: Move CTL_FRV into sysctl.h where it belongs Eric W. Biederman
2007-01-16 16:39 ` [PATCH 24/59] sysctl: frv remove unnecessary insert_at_head flag Eric W. Biederman
2007-01-16 16:39 ` [PATCH 25/59] sysctl: C99 convert arch/frv/kernel/pm.c Eric W. Biederman
2007-01-17 17:14 ` Kirill Korotaev
2007-01-22 22:21 ` Herbert Poetzl
2007-01-24 9:00 ` David Howells
2007-01-16 16:39 ` [PATCH 26/59] sysctl: C99 convert arch/frv/kernel/sysctl.c Eric W. Biederman
2007-01-16 16:39 ` [PATCH 27/59] sysctl: sn Remove sysctl ABI BREAKAGE Eric W. Biederman
2007-01-16 16:39 ` [PATCH 28/59] sysctl: C99 Convert arch/ia64/sn/kernel/xpc_main.c Eric W. Biederman
2007-01-16 16:39 ` [PATCH 29/59] sysctl: C99 convert arch/ia64/kernel/perfmon and remove ABI breakage Eric W. Biederman
2007-01-16 16:39 ` [PATCH 30/59] sysctl: mips/au1000 Remove sys_sysctl support Eric W. Biederman
2007-01-16 16:39 ` [PATCH 31/59] sysctl: C99 convert the ctl_tables in arch/mips/au1000/common/power.c Eric W. Biederman
2007-01-16 22:20 ` Ingo Oeser
2007-01-16 16:39 ` [PATCH 32/59] sysctl: C99 convert arch/mips/lasat/sysctl.c and remove ABI breakage Eric W. Biederman
2007-01-16 16:39 ` [PATCH 33/59] sysctl: s390 move sysctl definitions to sysctl.h Eric W. Biederman
2007-01-17 17:23 ` Kirill Korotaev
2007-01-16 16:39 ` [PATCH 34/59] sysctl: s390 Remove unnecessary use of insert_at_head Eric W. Biederman
2007-01-16 16:39 ` [PATCH 35/59] sysctl: C99 convert ctl_tables in arch/powerpc/kernel/idle.c Eric W. Biederman
2007-01-17 3:16 ` Benjamin Herrenschmidt
2007-01-16 16:39 ` [PATCH 36/59] sysctl: C99 convert ctl_tables entries in arch/ppc/kernel/ppc_htab.c Eric W. Biederman
2007-01-17 3:16 ` Benjamin Herrenschmidt
2007-01-16 16:39 ` [PATCH 37/59] sysctl: C99 convert arch/sh64/kernel/traps.c and remove ABI breakage Eric W. Biederman
2007-01-16 22:07 ` Paul Mundt
2007-01-16 16:39 ` [PATCH 38/59] sysctl: x86_64 Remove unnecessary use of insert_at_head Eric W. Biederman
2007-01-16 16:39 ` [PATCH 39/59] sysctl: C99 convert ctl_tables in arch/x86_64/ia32/ia32_binfmt.c Eric W. Biederman
2007-01-16 16:39 ` [PATCH 40/59] sysctl: C99 convert ctl_tables in arch/x86_64/kernel/vsyscall.c Eric W. Biederman
2007-01-16 16:39 ` [PATCH 41/59] sysctl: C99 convert ctl_tables in arch/x86_64/mm/init.c Eric W. Biederman
2007-01-16 16:39 ` [PATCH 42/59] sysctl: Remove sys_sysctl support from the hpet timer driver Eric W. Biederman
2007-01-17 7:54 ` Clemens Ladisch
2007-01-16 16:39 ` [PATCH 43/59] sysctl: Remove sys_sysctl support from drivers/char/rtc.c Eric W. Biederman
2007-01-16 16:39 ` [PATCH 44/59] sysctl: Register the sysctl number used by the arlan driver Eric W. Biederman
2007-01-16 16:39 ` [PATCH 45/59] sysctl: C99 convert ctl_tables in drivers/parport/procfs.c Eric W. Biederman
2007-01-16 22:15 ` Ingo Oeser
2007-01-16 23:00 ` Eric W. Biederman
2007-01-16 16:39 ` [PATCH 46/59] sysctl: C99 convert coda ctl_tables and remove binary sysctls Eric W. Biederman
2007-01-16 16:39 ` [PATCH 47/59] sysctl: C99 convert ctl_tables in NTFS and remove sys_sysctl support Eric W. Biederman
2007-01-16 16:39 ` [PATCH 48/59] sysctl: Register the ocfs2 sysctl numbers Eric W. Biederman
2007-01-16 20:37 ` Mark Fasheh
2007-01-16 16:39 ` [PATCH 49/59] sysctl: Move init_irq_proc into init/main where it belongs Eric W. Biederman
2007-01-27 10:51 ` Andrew Morton
2007-01-16 16:39 ` [PATCH 50/59] sysctl: Move utsname sysctls to their own file Eric W. Biederman
2007-01-17 17:41 ` Kirill Korotaev
2007-01-17 19:31 ` Eric W. Biederman
2007-01-22 22:24 ` Herbert Poetzl
2007-01-16 16:39 ` [PATCH 51/59] sysctl: Move SYSV IPC " Eric W. Biederman
2007-01-17 17:44 ` Kirill Korotaev
2007-01-16 16:39 ` [PATCH 52/59] sysctl: Create sys/fs/binfmt_misc as an ordinary sysctl entry Eric W. Biederman
2007-01-16 16:39 ` [PATCH 53/59] sysctl: Remove support for CTL_ANY Eric W. Biederman
2007-01-16 16:39 ` [PATCH 54/59] sysctl: Remove support for directory strategy routines Eric W. Biederman
2007-01-16 16:40 ` [PATCH 55/59] sysctl: Remove insert_at_head from register_sysctl Eric W. Biederman
2007-01-16 16:40 ` [PATCH 56/59] sysctl: factor out sysctl_head_next from do_sysctl Eric W. Biederman
2007-01-16 16:40 ` [PATCH 57/59] sysctl: allow sysctl_perm to be called from outside of sysctl.c Eric W. Biederman
2007-01-16 16:40 ` [PATCH 58/59] sysctl: Reimplement the sysctl proc support Eric W. Biederman
2007-03-14 10:38 ` Ingo Molnar
2007-03-14 10:48 ` Alexey Dobriyan
2007-03-14 12:24 ` Ingo Molnar
2007-03-14 13:34 ` Eric W. Biederman
2007-03-14 13:46 ` Ingo Molnar
2007-03-14 15:44 ` Michal Schmidt [this message]
2007-01-16 16:40 ` [PATCH 59/59] sysctl: Remove the proc_dir_entry member for the sysctl tables Eric W. Biederman
2007-01-16 16:53 ` [PATCH 0/59] Cleanup sysctl H. Peter Anvin
2007-01-16 18:12 ` Eric W. Biederman
2007-01-16 18:35 ` H. Peter Anvin
2007-01-16 18:54 ` Eric W. Biederman
2007-01-16 18:58 ` H. Peter Anvin
2007-01-16 19:03 ` Eric W. Biederman
2007-01-16 19:15 ` H. Peter Anvin
2007-01-16 19:30 ` Eric W. Biederman
2007-01-16 20:02 ` David Howells
2007-01-17 4:21 ` Andi Kleen
2007-01-17 12:10 ` Martin Schwidefsky
2007-01-17 18:10 ` Kirill Korotaev
2007-01-17 19:02 ` Eric W. Biederman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=45F8186A.6090408@redhat.com \
--to=mschmidt@redhat.com \
--cc=adobriyan@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=bunk@stusta.de \
--cc=ebiederm@xmission.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=viro@ftp.linux.org.uk \
--subject='Re: [PATCH 58/59] sysctl: Reimplement the sysctl proc support' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).