diff options
Diffstat (limited to 'fs/proc')
| -rw-r--r-- | fs/proc/array.c | 59 | ||||
| -rw-r--r-- | fs/proc/base.c | 11 | ||||
| -rw-r--r-- | fs/proc/generic.c | 32 | ||||
| -rw-r--r-- | fs/proc/nommu.c | 4 | ||||
| -rw-r--r-- | fs/proc/proc_misc.c | 7 | ||||
| -rw-r--r-- | fs/proc/task_mmu.c | 4 |
6 files changed, 33 insertions, 84 deletions
diff --git a/fs/proc/array.c b/fs/proc/array.c index 0d6eb33597c6..71c9be59c9c2 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c | |||
| @@ -337,65 +337,6 @@ int proc_pid_status(struct seq_file *m, struct pid_namespace *ns, | |||
| 337 | return 0; | 337 | return 0; |
| 338 | } | 338 | } |
| 339 | 339 | ||
| 340 | /* | ||
| 341 | * Use precise platform statistics if available: | ||
| 342 | */ | ||
| 343 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 344 | static cputime_t task_utime(struct task_struct *p) | ||
| 345 | { | ||
| 346 | return p->utime; | ||
| 347 | } | ||
| 348 | |||
| 349 | static cputime_t task_stime(struct task_struct *p) | ||
| 350 | { | ||
| 351 | return p->stime; | ||
| 352 | } | ||
| 353 | #else | ||
| 354 | static cputime_t task_utime(struct task_struct *p) | ||
| 355 | { | ||
| 356 | clock_t utime = cputime_to_clock_t(p->utime), | ||
| 357 | total = utime + cputime_to_clock_t(p->stime); | ||
| 358 | u64 temp; | ||
| 359 | |||
| 360 | /* | ||
| 361 | * Use CFS's precise accounting: | ||
| 362 | */ | ||
| 363 | temp = (u64)nsec_to_clock_t(p->se.sum_exec_runtime); | ||
| 364 | |||
| 365 | if (total) { | ||
| 366 | temp *= utime; | ||
| 367 | do_div(temp, total); | ||
| 368 | } | ||
| 369 | utime = (clock_t)temp; | ||
| 370 | |||
| 371 | p->prev_utime = max(p->prev_utime, clock_t_to_cputime(utime)); | ||
| 372 | return p->prev_utime; | ||
| 373 | } | ||
| 374 | |||
| 375 | static cputime_t task_stime(struct task_struct *p) | ||
| 376 | { | ||
| 377 | clock_t stime; | ||
| 378 | |||
| 379 | /* | ||
| 380 | * Use CFS's precise accounting. (we subtract utime from | ||
| 381 | * the total, to make sure the total observed by userspace | ||
| 382 | * grows monotonically - apps rely on that): | ||
| 383 | */ | ||
| 384 | stime = nsec_to_clock_t(p->se.sum_exec_runtime) - | ||
| 385 | cputime_to_clock_t(task_utime(p)); | ||
| 386 | |||
| 387 | if (stime >= 0) | ||
| 388 | p->prev_stime = max(p->prev_stime, clock_t_to_cputime(stime)); | ||
| 389 | |||
| 390 | return p->prev_stime; | ||
| 391 | } | ||
| 392 | #endif | ||
| 393 | |||
| 394 | static cputime_t task_gtime(struct task_struct *p) | ||
| 395 | { | ||
| 396 | return p->gtime; | ||
| 397 | } | ||
| 398 | |||
| 399 | static int do_task_stat(struct seq_file *m, struct pid_namespace *ns, | 340 | static int do_task_stat(struct seq_file *m, struct pid_namespace *ns, |
| 400 | struct pid *pid, struct task_struct *task, int whole) | 341 | struct pid *pid, struct task_struct *task, int whole) |
| 401 | { | 342 | { |
diff --git a/fs/proc/base.c b/fs/proc/base.c index 01ed610f9b87..a28840b11b89 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c | |||
| @@ -2423,10 +2423,13 @@ static int do_io_accounting(struct task_struct *task, char *buffer, int whole) | |||
| 2423 | "read_bytes: %llu\n" | 2423 | "read_bytes: %llu\n" |
| 2424 | "write_bytes: %llu\n" | 2424 | "write_bytes: %llu\n" |
| 2425 | "cancelled_write_bytes: %llu\n", | 2425 | "cancelled_write_bytes: %llu\n", |
| 2426 | acct.rchar, acct.wchar, | 2426 | (unsigned long long)acct.rchar, |
| 2427 | acct.syscr, acct.syscw, | 2427 | (unsigned long long)acct.wchar, |
| 2428 | acct.read_bytes, acct.write_bytes, | 2428 | (unsigned long long)acct.syscr, |
| 2429 | acct.cancelled_write_bytes); | 2429 | (unsigned long long)acct.syscw, |
| 2430 | (unsigned long long)acct.read_bytes, | ||
| 2431 | (unsigned long long)acct.write_bytes, | ||
| 2432 | (unsigned long long)acct.cancelled_write_bytes); | ||
| 2430 | } | 2433 | } |
| 2431 | 2434 | ||
| 2432 | static int proc_tid_io_accounting(struct task_struct *task, char *buffer) | 2435 | static int proc_tid_io_accounting(struct task_struct *task, char *buffer) |
diff --git a/fs/proc/generic.c b/fs/proc/generic.c index cb4096cc3fb7..7821589a17d5 100644 --- a/fs/proc/generic.c +++ b/fs/proc/generic.c | |||
| @@ -300,10 +300,10 @@ out: | |||
| 300 | return rtn; | 300 | return rtn; |
| 301 | } | 301 | } |
| 302 | 302 | ||
| 303 | static DEFINE_IDR(proc_inum_idr); | 303 | static DEFINE_IDA(proc_inum_ida); |
| 304 | static DEFINE_SPINLOCK(proc_inum_lock); /* protects the above */ | 304 | static DEFINE_SPINLOCK(proc_inum_lock); /* protects the above */ |
| 305 | 305 | ||
| 306 | #define PROC_DYNAMIC_FIRST 0xF0000000UL | 306 | #define PROC_DYNAMIC_FIRST 0xF0000000U |
| 307 | 307 | ||
| 308 | /* | 308 | /* |
| 309 | * Return an inode number between PROC_DYNAMIC_FIRST and | 309 | * Return an inode number between PROC_DYNAMIC_FIRST and |
| @@ -311,36 +311,34 @@ static DEFINE_SPINLOCK(proc_inum_lock); /* protects the above */ | |||
| 311 | */ | 311 | */ |
| 312 | static unsigned int get_inode_number(void) | 312 | static unsigned int get_inode_number(void) |
| 313 | { | 313 | { |
| 314 | int i, inum = 0; | 314 | unsigned int i; |
| 315 | int error; | 315 | int error; |
| 316 | 316 | ||
| 317 | retry: | 317 | retry: |
| 318 | if (idr_pre_get(&proc_inum_idr, GFP_KERNEL) == 0) | 318 | if (ida_pre_get(&proc_inum_ida, GFP_KERNEL) == 0) |
| 319 | return 0; | 319 | return 0; |
| 320 | 320 | ||
| 321 | spin_lock(&proc_inum_lock); | 321 | spin_lock(&proc_inum_lock); |
| 322 | error = idr_get_new(&proc_inum_idr, NULL, &i); | 322 | error = ida_get_new(&proc_inum_ida, &i); |
| 323 | spin_unlock(&proc_inum_lock); | 323 | spin_unlock(&proc_inum_lock); |
| 324 | if (error == -EAGAIN) | 324 | if (error == -EAGAIN) |
| 325 | goto retry; | 325 | goto retry; |
| 326 | else if (error) | 326 | else if (error) |
| 327 | return 0; | 327 | return 0; |
| 328 | 328 | ||
| 329 | inum = (i & MAX_ID_MASK) + PROC_DYNAMIC_FIRST; | 329 | if (i > UINT_MAX - PROC_DYNAMIC_FIRST) { |
| 330 | 330 | spin_lock(&proc_inum_lock); | |
| 331 | /* inum will never be more than 0xf0ffffff, so no check | 331 | ida_remove(&proc_inum_ida, i); |
| 332 | * for overflow. | 332 | spin_unlock(&proc_inum_lock); |
| 333 | */ | 333 | return 0; |
| 334 | 334 | } | |
| 335 | return inum; | 335 | return PROC_DYNAMIC_FIRST + i; |
| 336 | } | 336 | } |
| 337 | 337 | ||
| 338 | static void release_inode_number(unsigned int inum) | 338 | static void release_inode_number(unsigned int inum) |
| 339 | { | 339 | { |
| 340 | int id = (inum - PROC_DYNAMIC_FIRST) | ~MAX_ID_MASK; | ||
| 341 | |||
| 342 | spin_lock(&proc_inum_lock); | 340 | spin_lock(&proc_inum_lock); |
| 343 | idr_remove(&proc_inum_idr, id); | 341 | ida_remove(&proc_inum_ida, inum - PROC_DYNAMIC_FIRST); |
| 344 | spin_unlock(&proc_inum_lock); | 342 | spin_unlock(&proc_inum_lock); |
| 345 | } | 343 | } |
| 346 | 344 | ||
| @@ -549,8 +547,8 @@ static int proc_register(struct proc_dir_entry * dir, struct proc_dir_entry * dp | |||
| 549 | 547 | ||
| 550 | for (tmp = dir->subdir; tmp; tmp = tmp->next) | 548 | for (tmp = dir->subdir; tmp; tmp = tmp->next) |
| 551 | if (strcmp(tmp->name, dp->name) == 0) { | 549 | if (strcmp(tmp->name, dp->name) == 0) { |
| 552 | printk(KERN_WARNING "proc_dir_entry '%s' already " | 550 | printk(KERN_WARNING "proc_dir_entry '%s/%s' already registered\n", |
| 553 | "registered\n", dp->name); | 551 | dir->name, dp->name); |
| 554 | dump_stack(); | 552 | dump_stack(); |
| 555 | break; | 553 | break; |
| 556 | } | 554 | } |
diff --git a/fs/proc/nommu.c b/fs/proc/nommu.c index 79ecd281d2cb..3f87d2632947 100644 --- a/fs/proc/nommu.c +++ b/fs/proc/nommu.c | |||
| @@ -52,14 +52,14 @@ int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma) | |||
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | seq_printf(m, | 54 | seq_printf(m, |
| 55 | "%08lx-%08lx %c%c%c%c %08lx %02x:%02x %lu %n", | 55 | "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu %n", |
| 56 | vma->vm_start, | 56 | vma->vm_start, |
| 57 | vma->vm_end, | 57 | vma->vm_end, |
| 58 | flags & VM_READ ? 'r' : '-', | 58 | flags & VM_READ ? 'r' : '-', |
| 59 | flags & VM_WRITE ? 'w' : '-', | 59 | flags & VM_WRITE ? 'w' : '-', |
| 60 | flags & VM_EXEC ? 'x' : '-', | 60 | flags & VM_EXEC ? 'x' : '-', |
| 61 | flags & VM_MAYSHARE ? flags & VM_SHARED ? 'S' : 's' : 'p', | 61 | flags & VM_MAYSHARE ? flags & VM_SHARED ? 'S' : 's' : 'p', |
| 62 | vma->vm_pgoff << PAGE_SHIFT, | 62 | ((loff_t)vma->vm_pgoff) << PAGE_SHIFT, |
| 63 | MAJOR(dev), MINOR(dev), ino, &len); | 63 | MAJOR(dev), MINOR(dev), ino, &len); |
| 64 | 64 | ||
| 65 | if (file) { | 65 | if (file) { |
diff --git a/fs/proc/proc_misc.c b/fs/proc/proc_misc.c index ded969862960..29e20c6b1f7f 100644 --- a/fs/proc/proc_misc.c +++ b/fs/proc/proc_misc.c | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | #include <linux/tty.h> | 24 | #include <linux/tty.h> |
| 25 | #include <linux/string.h> | 25 | #include <linux/string.h> |
| 26 | #include <linux/mman.h> | 26 | #include <linux/mman.h> |
| 27 | #include <linux/quicklist.h> | ||
| 27 | #include <linux/proc_fs.h> | 28 | #include <linux/proc_fs.h> |
| 28 | #include <linux/ioport.h> | 29 | #include <linux/ioport.h> |
| 29 | #include <linux/mm.h> | 30 | #include <linux/mm.h> |
| @@ -182,6 +183,9 @@ static int meminfo_read_proc(char *page, char **start, off_t off, | |||
| 182 | "SReclaimable: %8lu kB\n" | 183 | "SReclaimable: %8lu kB\n" |
| 183 | "SUnreclaim: %8lu kB\n" | 184 | "SUnreclaim: %8lu kB\n" |
| 184 | "PageTables: %8lu kB\n" | 185 | "PageTables: %8lu kB\n" |
| 186 | #ifdef CONFIG_QUICKLIST | ||
| 187 | "Quicklists: %8lu kB\n" | ||
| 188 | #endif | ||
| 185 | "NFS_Unstable: %8lu kB\n" | 189 | "NFS_Unstable: %8lu kB\n" |
| 186 | "Bounce: %8lu kB\n" | 190 | "Bounce: %8lu kB\n" |
| 187 | "WritebackTmp: %8lu kB\n" | 191 | "WritebackTmp: %8lu kB\n" |
| @@ -214,6 +218,9 @@ static int meminfo_read_proc(char *page, char **start, off_t off, | |||
| 214 | K(global_page_state(NR_SLAB_RECLAIMABLE)), | 218 | K(global_page_state(NR_SLAB_RECLAIMABLE)), |
| 215 | K(global_page_state(NR_SLAB_UNRECLAIMABLE)), | 219 | K(global_page_state(NR_SLAB_UNRECLAIMABLE)), |
| 216 | K(global_page_state(NR_PAGETABLE)), | 220 | K(global_page_state(NR_PAGETABLE)), |
| 221 | #ifdef CONFIG_QUICKLIST | ||
| 222 | K(quicklist_total_size()), | ||
| 223 | #endif | ||
| 217 | K(global_page_state(NR_UNSTABLE_NFS)), | 224 | K(global_page_state(NR_UNSTABLE_NFS)), |
| 218 | K(global_page_state(NR_BOUNCE)), | 225 | K(global_page_state(NR_BOUNCE)), |
| 219 | K(global_page_state(NR_WRITEBACK_TEMP)), | 226 | K(global_page_state(NR_WRITEBACK_TEMP)), |
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 7546a918f790..73d1891ee625 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c | |||
| @@ -219,14 +219,14 @@ static int show_map(struct seq_file *m, void *v) | |||
| 219 | ino = inode->i_ino; | 219 | ino = inode->i_ino; |
| 220 | } | 220 | } |
| 221 | 221 | ||
| 222 | seq_printf(m, "%08lx-%08lx %c%c%c%c %08lx %02x:%02x %lu %n", | 222 | seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu %n", |
| 223 | vma->vm_start, | 223 | vma->vm_start, |
| 224 | vma->vm_end, | 224 | vma->vm_end, |
| 225 | flags & VM_READ ? 'r' : '-', | 225 | flags & VM_READ ? 'r' : '-', |
| 226 | flags & VM_WRITE ? 'w' : '-', | 226 | flags & VM_WRITE ? 'w' : '-', |
| 227 | flags & VM_EXEC ? 'x' : '-', | 227 | flags & VM_EXEC ? 'x' : '-', |
| 228 | flags & VM_MAYSHARE ? 's' : 'p', | 228 | flags & VM_MAYSHARE ? 's' : 'p', |
| 229 | vma->vm_pgoff << PAGE_SHIFT, | 229 | ((loff_t)vma->vm_pgoff) << PAGE_SHIFT, |
| 230 | MAJOR(dev), MINOR(dev), ino, &len); | 230 | MAJOR(dev), MINOR(dev), ino, &len); |
| 231 | 231 | ||
| 232 | /* | 232 | /* |
