Commit 9617760287eec9091d26e6967bd3e4194de18f97

Authored by Alexey Dobriyan
1 parent 5b3acc8de8

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

... ... @@ -10,6 +10,7 @@
10 10 proc-y += inode.o root.o base.o generic.o array.o \
11 11 proc_tty.o proc_misc.o
12 12 proc-y += loadavg.o
  13 +proc-y += uptime.o
13 14 proc-$(CONFIG_PROC_SYSCTL) += proc_sysctl.o
14 15 proc-$(CONFIG_NET) += proc_net.o
15 16 proc-$(CONFIG_PROC_KCORE) += kcore.o
... ... @@ -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
  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);