1 #include <linux/init.h>
2 #include <linux/proc_fs.h>
3 #include <linux/sched.h>
4 #include <linux/time.h>
5 #include <asm/cputime.h>
7 static int proc_calc_metrics(char *page
, char **start
, off_t off
,
8 int count
, int *eof
, int len
)
10 if (len
<= off
+ count
)
21 static int uptime_read_proc(char *page
, char **start
, off_t off
, int count
,
24 struct timespec uptime
;
27 cputime_t idletime
= cputime_add(init_task
.utime
, init_task
.stime
);
29 do_posix_clock_monotonic_gettime(&uptime
);
30 monotonic_to_bootbased(&uptime
);
31 cputime_to_timespec(idletime
, &idle
);
32 len
= sprintf(page
, "%lu.%02lu %lu.%02lu\n",
33 (unsigned long) uptime
.tv_sec
,
34 (uptime
.tv_nsec
/ (NSEC_PER_SEC
/ 100)),
35 (unsigned long) idle
.tv_sec
,
36 (idle
.tv_nsec
/ (NSEC_PER_SEC
/ 100)));
37 return proc_calc_metrics(page
, start
, off
, count
, eof
, len
);
40 static int __init
proc_uptime_init(void)
42 create_proc_read_entry("uptime", 0, NULL
, uptime_read_proc
, NULL
);
45 module_init(proc_uptime_init
);