Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

proc: move /proc/stat to fs/proc/stat.c

Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>

+154 -134
+1
fs/proc/Makefile
··· 14 14 proc-y += devices.o 15 15 proc-y += loadavg.o 16 16 proc-y += meminfo.o 17 + proc-y += stat.o 17 18 proc-y += uptime.o 18 19 proc-y += version.o 19 20 proc-$(CONFIG_PROC_SYSCTL) += proc_sysctl.o
-134
fs/proc/proc_misc.c
··· 198 198 }; 199 199 #endif 200 200 201 - #ifndef arch_irq_stat_cpu 202 - #define arch_irq_stat_cpu(cpu) 0 203 - #endif 204 - #ifndef arch_irq_stat 205 - #define arch_irq_stat() 0 206 - #endif 207 - 208 - static int show_stat(struct seq_file *p, void *v) 209 - { 210 - int i, j; 211 - unsigned long jif; 212 - cputime64_t user, nice, system, idle, iowait, irq, softirq, steal; 213 - cputime64_t guest; 214 - u64 sum = 0; 215 - struct timespec boottime; 216 - unsigned int per_irq_sum; 217 - 218 - user = nice = system = idle = iowait = 219 - irq = softirq = steal = cputime64_zero; 220 - guest = cputime64_zero; 221 - getboottime(&boottime); 222 - jif = boottime.tv_sec; 223 - 224 - for_each_possible_cpu(i) { 225 - user = cputime64_add(user, kstat_cpu(i).cpustat.user); 226 - nice = cputime64_add(nice, kstat_cpu(i).cpustat.nice); 227 - system = cputime64_add(system, kstat_cpu(i).cpustat.system); 228 - idle = cputime64_add(idle, kstat_cpu(i).cpustat.idle); 229 - iowait = cputime64_add(iowait, kstat_cpu(i).cpustat.iowait); 230 - irq = cputime64_add(irq, kstat_cpu(i).cpustat.irq); 231 - softirq = cputime64_add(softirq, kstat_cpu(i).cpustat.softirq); 232 - steal = cputime64_add(steal, kstat_cpu(i).cpustat.steal); 233 - guest = cputime64_add(guest, kstat_cpu(i).cpustat.guest); 234 - 235 - for_each_irq_nr(j) 236 - sum += kstat_irqs_cpu(j, i); 237 - 238 - sum += arch_irq_stat_cpu(i); 239 - } 240 - sum += arch_irq_stat(); 241 - 242 - seq_printf(p, "cpu %llu %llu %llu %llu %llu %llu %llu %llu %llu\n", 243 - (unsigned long long)cputime64_to_clock_t(user), 244 - (unsigned long long)cputime64_to_clock_t(nice), 245 - (unsigned long long)cputime64_to_clock_t(system), 246 - (unsigned long long)cputime64_to_clock_t(idle), 247 - (unsigned long long)cputime64_to_clock_t(iowait), 248 - (unsigned long long)cputime64_to_clock_t(irq), 249 - (unsigned long long)cputime64_to_clock_t(softirq), 250 - (unsigned long long)cputime64_to_clock_t(steal), 251 - (unsigned long long)cputime64_to_clock_t(guest)); 252 - for_each_online_cpu(i) { 253 - 254 - /* Copy values here to work around gcc-2.95.3, gcc-2.96 */ 255 - user = kstat_cpu(i).cpustat.user; 256 - nice = kstat_cpu(i).cpustat.nice; 257 - system = kstat_cpu(i).cpustat.system; 258 - idle = kstat_cpu(i).cpustat.idle; 259 - iowait = kstat_cpu(i).cpustat.iowait; 260 - irq = kstat_cpu(i).cpustat.irq; 261 - softirq = kstat_cpu(i).cpustat.softirq; 262 - steal = kstat_cpu(i).cpustat.steal; 263 - guest = kstat_cpu(i).cpustat.guest; 264 - seq_printf(p, 265 - "cpu%d %llu %llu %llu %llu %llu %llu %llu %llu %llu\n", 266 - i, 267 - (unsigned long long)cputime64_to_clock_t(user), 268 - (unsigned long long)cputime64_to_clock_t(nice), 269 - (unsigned long long)cputime64_to_clock_t(system), 270 - (unsigned long long)cputime64_to_clock_t(idle), 271 - (unsigned long long)cputime64_to_clock_t(iowait), 272 - (unsigned long long)cputime64_to_clock_t(irq), 273 - (unsigned long long)cputime64_to_clock_t(softirq), 274 - (unsigned long long)cputime64_to_clock_t(steal), 275 - (unsigned long long)cputime64_to_clock_t(guest)); 276 - } 277 - seq_printf(p, "intr %llu", (unsigned long long)sum); 278 - 279 - /* sum again ? it could be updated? */ 280 - for_each_irq_nr(j) { 281 - per_irq_sum = 0; 282 - 283 - for_each_possible_cpu(i) 284 - per_irq_sum += kstat_irqs_cpu(j, i); 285 - 286 - seq_printf(p, " %u", per_irq_sum); 287 - } 288 - 289 - seq_printf(p, 290 - "\nctxt %llu\n" 291 - "btime %lu\n" 292 - "processes %lu\n" 293 - "procs_running %lu\n" 294 - "procs_blocked %lu\n", 295 - nr_context_switches(), 296 - (unsigned long)jif, 297 - total_forks, 298 - nr_running(), 299 - nr_iowait()); 300 - 301 - return 0; 302 - } 303 - 304 - static int stat_open(struct inode *inode, struct file *file) 305 - { 306 - unsigned size = 4096 * (1 + num_possible_cpus() / 32); 307 - char *buf; 308 - struct seq_file *m; 309 - int res; 310 - 311 - /* don't ask for more than the kmalloc() max size, currently 128 KB */ 312 - if (size > 128 * 1024) 313 - size = 128 * 1024; 314 - buf = kmalloc(size, GFP_KERNEL); 315 - if (!buf) 316 - return -ENOMEM; 317 - 318 - res = single_open(file, show_stat, NULL); 319 - if (!res) { 320 - m = file->private_data; 321 - m->buf = buf; 322 - m->size = size; 323 - } else 324 - kfree(buf); 325 - return res; 326 - } 327 - static const struct file_operations proc_stat_operations = { 328 - .open = stat_open, 329 - .read = seq_read, 330 - .llseek = seq_lseek, 331 - .release = single_release, 332 - }; 333 - 334 201 /* 335 202 * /proc/interrupts 336 203 */ ··· 375 508 proc_symlink("mounts", NULL, "self/mounts"); 376 509 377 510 /* And now for trickier ones */ 378 - proc_create("stat", 0, NULL, &proc_stat_operations); 379 511 proc_create("interrupts", 0, NULL, &proc_interrupts_operations); 380 512 #ifdef CONFIG_SLABINFO 381 513 proc_create("slabinfo",S_IWUSR|S_IRUGO,NULL,&proc_slabinfo_operations);
+153
fs/proc/stat.c
··· 1 + #include <linux/cpumask.h> 2 + #include <linux/fs.h> 3 + #include <linux/gfp.h> 4 + #include <linux/init.h> 5 + #include <linux/interrupt.h> 6 + #include <linux/kernel_stat.h> 7 + #include <linux/proc_fs.h> 8 + #include <linux/sched.h> 9 + #include <linux/seq_file.h> 10 + #include <linux/slab.h> 11 + #include <linux/time.h> 12 + #include <asm/cputime.h> 13 + 14 + #ifndef arch_irq_stat_cpu 15 + #define arch_irq_stat_cpu(cpu) 0 16 + #endif 17 + #ifndef arch_irq_stat 18 + #define arch_irq_stat() 0 19 + #endif 20 + 21 + static int show_stat(struct seq_file *p, void *v) 22 + { 23 + int i, j; 24 + unsigned long jif; 25 + cputime64_t user, nice, system, idle, iowait, irq, softirq, steal; 26 + cputime64_t guest; 27 + u64 sum = 0; 28 + struct timespec boottime; 29 + unsigned int per_irq_sum; 30 + 31 + user = nice = system = idle = iowait = 32 + irq = softirq = steal = cputime64_zero; 33 + guest = cputime64_zero; 34 + getboottime(&boottime); 35 + jif = boottime.tv_sec; 36 + 37 + for_each_possible_cpu(i) { 38 + user = cputime64_add(user, kstat_cpu(i).cpustat.user); 39 + nice = cputime64_add(nice, kstat_cpu(i).cpustat.nice); 40 + system = cputime64_add(system, kstat_cpu(i).cpustat.system); 41 + idle = cputime64_add(idle, kstat_cpu(i).cpustat.idle); 42 + iowait = cputime64_add(iowait, kstat_cpu(i).cpustat.iowait); 43 + irq = cputime64_add(irq, kstat_cpu(i).cpustat.irq); 44 + softirq = cputime64_add(softirq, kstat_cpu(i).cpustat.softirq); 45 + steal = cputime64_add(steal, kstat_cpu(i).cpustat.steal); 46 + guest = cputime64_add(guest, kstat_cpu(i).cpustat.guest); 47 + 48 + for_each_irq_nr(j) 49 + sum += kstat_irqs_cpu(j, i); 50 + 51 + sum += arch_irq_stat_cpu(i); 52 + } 53 + sum += arch_irq_stat(); 54 + 55 + seq_printf(p, "cpu %llu %llu %llu %llu %llu %llu %llu %llu %llu\n", 56 + (unsigned long long)cputime64_to_clock_t(user), 57 + (unsigned long long)cputime64_to_clock_t(nice), 58 + (unsigned long long)cputime64_to_clock_t(system), 59 + (unsigned long long)cputime64_to_clock_t(idle), 60 + (unsigned long long)cputime64_to_clock_t(iowait), 61 + (unsigned long long)cputime64_to_clock_t(irq), 62 + (unsigned long long)cputime64_to_clock_t(softirq), 63 + (unsigned long long)cputime64_to_clock_t(steal), 64 + (unsigned long long)cputime64_to_clock_t(guest)); 65 + for_each_online_cpu(i) { 66 + 67 + /* Copy values here to work around gcc-2.95.3, gcc-2.96 */ 68 + user = kstat_cpu(i).cpustat.user; 69 + nice = kstat_cpu(i).cpustat.nice; 70 + system = kstat_cpu(i).cpustat.system; 71 + idle = kstat_cpu(i).cpustat.idle; 72 + iowait = kstat_cpu(i).cpustat.iowait; 73 + irq = kstat_cpu(i).cpustat.irq; 74 + softirq = kstat_cpu(i).cpustat.softirq; 75 + steal = kstat_cpu(i).cpustat.steal; 76 + guest = kstat_cpu(i).cpustat.guest; 77 + seq_printf(p, 78 + "cpu%d %llu %llu %llu %llu %llu %llu %llu %llu %llu\n", 79 + i, 80 + (unsigned long long)cputime64_to_clock_t(user), 81 + (unsigned long long)cputime64_to_clock_t(nice), 82 + (unsigned long long)cputime64_to_clock_t(system), 83 + (unsigned long long)cputime64_to_clock_t(idle), 84 + (unsigned long long)cputime64_to_clock_t(iowait), 85 + (unsigned long long)cputime64_to_clock_t(irq), 86 + (unsigned long long)cputime64_to_clock_t(softirq), 87 + (unsigned long long)cputime64_to_clock_t(steal), 88 + (unsigned long long)cputime64_to_clock_t(guest)); 89 + } 90 + seq_printf(p, "intr %llu", (unsigned long long)sum); 91 + 92 + /* sum again ? it could be updated? */ 93 + for_each_irq_nr(j) { 94 + per_irq_sum = 0; 95 + 96 + for_each_possible_cpu(i) 97 + per_irq_sum += kstat_irqs_cpu(j, i); 98 + 99 + seq_printf(p, " %u", per_irq_sum); 100 + } 101 + 102 + seq_printf(p, 103 + "\nctxt %llu\n" 104 + "btime %lu\n" 105 + "processes %lu\n" 106 + "procs_running %lu\n" 107 + "procs_blocked %lu\n", 108 + nr_context_switches(), 109 + (unsigned long)jif, 110 + total_forks, 111 + nr_running(), 112 + nr_iowait()); 113 + 114 + return 0; 115 + } 116 + 117 + static int stat_open(struct inode *inode, struct file *file) 118 + { 119 + unsigned size = 4096 * (1 + num_possible_cpus() / 32); 120 + char *buf; 121 + struct seq_file *m; 122 + int res; 123 + 124 + /* don't ask for more than the kmalloc() max size, currently 128 KB */ 125 + if (size > 128 * 1024) 126 + size = 128 * 1024; 127 + buf = kmalloc(size, GFP_KERNEL); 128 + if (!buf) 129 + return -ENOMEM; 130 + 131 + res = single_open(file, show_stat, NULL); 132 + if (!res) { 133 + m = file->private_data; 134 + m->buf = buf; 135 + m->size = size; 136 + } else 137 + kfree(buf); 138 + return res; 139 + } 140 + 141 + static const struct file_operations proc_stat_operations = { 142 + .open = stat_open, 143 + .read = seq_read, 144 + .llseek = seq_lseek, 145 + .release = single_release, 146 + }; 147 + 148 + static int __init proc_stat_init(void) 149 + { 150 + proc_create("stat", 0, NULL, &proc_stat_operations); 151 + return 0; 152 + } 153 + module_init(proc_stat_init);