Commit 9617760287eec9091d26e6967bd3e4194de18f97
1 parent
5b3acc8de8
Exists in
master
and in
7 other branches
proc: switch /proc/uptime to seq_file
and move it to fs/proc/uptime.c while I'm at it. Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Showing 3 changed files with 44 additions and 21 deletions Side-by-side Diff
fs/proc/Makefile
fs/proc/proc_misc.c
... | ... | @@ -78,26 +78,6 @@ |
78 | 78 | return len; |
79 | 79 | } |
80 | 80 | |
81 | -static int uptime_read_proc(char *page, char **start, off_t off, | |
82 | - int count, int *eof, void *data) | |
83 | -{ | |
84 | - struct timespec uptime; | |
85 | - struct timespec idle; | |
86 | - int len; | |
87 | - cputime_t idletime = cputime_add(init_task.utime, init_task.stime); | |
88 | - | |
89 | - do_posix_clock_monotonic_gettime(&uptime); | |
90 | - monotonic_to_bootbased(&uptime); | |
91 | - cputime_to_timespec(idletime, &idle); | |
92 | - len = sprintf(page,"%lu.%02lu %lu.%02lu\n", | |
93 | - (unsigned long) uptime.tv_sec, | |
94 | - (uptime.tv_nsec / (NSEC_PER_SEC / 100)), | |
95 | - (unsigned long) idle.tv_sec, | |
96 | - (idle.tv_nsec / (NSEC_PER_SEC / 100))); | |
97 | - | |
98 | - return proc_calc_metrics(page, start, off, count, eof, len); | |
99 | -} | |
100 | - | |
101 | 81 | int __attribute__((weak)) arch_report_meminfo(char *page) |
102 | 82 | { |
103 | 83 | return 0; |
... | ... | @@ -836,7 +816,6 @@ |
836 | 816 | char *name; |
837 | 817 | int (*read_proc)(char*,char**,off_t,int,int*,void*); |
838 | 818 | } *p, simple_ones[] = { |
839 | - {"uptime", uptime_read_proc}, | |
840 | 819 | {"meminfo", meminfo_read_proc}, |
841 | 820 | {"version", version_read_proc}, |
842 | 821 | #ifdef CONFIG_PROC_HARDWARE |
fs/proc/uptime.c
1 | +#include <linux/fs.h> | |
2 | +#include <linux/init.h> | |
3 | +#include <linux/proc_fs.h> | |
4 | +#include <linux/sched.h> | |
5 | +#include <linux/seq_file.h> | |
6 | +#include <linux/time.h> | |
7 | +#include <asm/cputime.h> | |
8 | + | |
9 | +static int uptime_proc_show(struct seq_file *m, void *v) | |
10 | +{ | |
11 | + struct timespec uptime; | |
12 | + struct timespec idle; | |
13 | + cputime_t idletime = cputime_add(init_task.utime, init_task.stime); | |
14 | + | |
15 | + do_posix_clock_monotonic_gettime(&uptime); | |
16 | + monotonic_to_bootbased(&uptime); | |
17 | + cputime_to_timespec(idletime, &idle); | |
18 | + seq_printf(m, "%lu.%02lu %lu.%02lu\n", | |
19 | + (unsigned long) uptime.tv_sec, | |
20 | + (uptime.tv_nsec / (NSEC_PER_SEC / 100)), | |
21 | + (unsigned long) idle.tv_sec, | |
22 | + (idle.tv_nsec / (NSEC_PER_SEC / 100))); | |
23 | + return 0; | |
24 | +} | |
25 | + | |
26 | +static int uptime_proc_open(struct inode *inode, struct file *file) | |
27 | +{ | |
28 | + return single_open(file, uptime_proc_show, NULL); | |
29 | +} | |
30 | + | |
31 | +static const struct file_operations uptime_proc_fops = { | |
32 | + .open = uptime_proc_open, | |
33 | + .read = seq_read, | |
34 | + .llseek = seq_lseek, | |
35 | + .release = single_release, | |
36 | +}; | |
37 | + | |
38 | +static int __init proc_uptime_init(void) | |
39 | +{ | |
40 | + proc_create("uptime", 0, NULL, &uptime_proc_fops); | |
41 | + return 0; | |
42 | +} | |
43 | +module_init(proc_uptime_init); |