38 lines · c
1// SPDX-License-Identifier: GPL-2.02#include <linux/fs.h>3#include <linux/init.h>4#include <linux/pid_namespace.h>5#include <linux/proc_fs.h>6#include <linux/sched.h>7#include <linux/sched/loadavg.h>8#include <linux/sched/stat.h>9#include <linux/seq_file.h>10#include <linux/seqlock.h>11#include <linux/time.h>12#include "internal.h"13 14static int loadavg_proc_show(struct seq_file *m, void *v)15{16 unsigned long avnrun[3];17 18 get_avenrun(avnrun, FIXED_1/200, 0);19 20 seq_printf(m, "%lu.%02lu %lu.%02lu %lu.%02lu %u/%d %d\n",21 LOAD_INT(avnrun[0]), LOAD_FRAC(avnrun[0]),22 LOAD_INT(avnrun[1]), LOAD_FRAC(avnrun[1]),23 LOAD_INT(avnrun[2]), LOAD_FRAC(avnrun[2]),24 nr_running(), nr_threads,25 idr_get_cursor(&task_active_pid_ns(current)->idr) - 1);26 return 0;27}28 29static int __init proc_loadavg_init(void)30{31 struct proc_dir_entry *pde;32 33 pde = proc_create_single("loadavg", 0, NULL, loadavg_proc_show);34 pde_make_permanent(pde);35 return 0;36}37fs_initcall(proc_loadavg_init);38