cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

uptime.c (1045B)


      1// SPDX-License-Identifier: GPL-2.0
      2#include <linux/fs.h>
      3#include <linux/init.h>
      4#include <linux/proc_fs.h>
      5#include <linux/sched.h>
      6#include <linux/seq_file.h>
      7#include <linux/time.h>
      8#include <linux/time_namespace.h>
      9#include <linux/kernel_stat.h>
     10
     11static int uptime_proc_show(struct seq_file *m, void *v)
     12{
     13	struct timespec64 uptime;
     14	struct timespec64 idle;
     15	u64 idle_nsec;
     16	u32 rem;
     17	int i;
     18
     19	idle_nsec = 0;
     20	for_each_possible_cpu(i) {
     21		struct kernel_cpustat kcs;
     22
     23		kcpustat_cpu_fetch(&kcs, i);
     24		idle_nsec += get_idle_time(&kcs, i);
     25	}
     26
     27	ktime_get_boottime_ts64(&uptime);
     28	timens_add_boottime(&uptime);
     29
     30	idle.tv_sec = div_u64_rem(idle_nsec, NSEC_PER_SEC, &rem);
     31	idle.tv_nsec = rem;
     32	seq_printf(m, "%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 0;
     38}
     39
     40static int __init proc_uptime_init(void)
     41{
     42	proc_create_single("uptime", 0, NULL, uptime_proc_show);
     43	return 0;
     44}
     45fs_initcall(proc_uptime_init);