1 | /* |
2 | * debugfs ops for process ASIDs |
3 | * |
4 | * Copyright (C) 2000, 2001 Paolo Alberelli |
5 | * Copyright (C) 2003 - 2008 Paul Mundt |
6 | * Copyright (C) 2003, 2004 Richard Curnow |
7 | * |
8 | * Provides a debugfs file that lists out the ASIDs currently associated |
9 | * with the processes. |
10 | * |
11 | * In the SH-5 case, if the DM.PC register is examined through the debug |
12 | * link, this shows ASID + PC. To make use of this, the PID->ASID |
13 | * relationship needs to be known. This is primarily for debugging. |
14 | * |
15 | * This file is subject to the terms and conditions of the GNU General Public |
16 | * License. See the file "COPYING" in the main directory of this archive |
17 | * for more details. |
18 | */ |
19 | #include <linux/init.h> |
20 | #include <linux/debugfs.h> |
21 | #include <linux/seq_file.h> |
22 | #include <linux/spinlock.h> |
23 | #include <linux/sched/signal.h> |
24 | #include <linux/sched/task.h> |
25 | |
26 | #include <asm/processor.h> |
27 | #include <asm/mmu_context.h> |
28 | |
29 | static int asids_debugfs_show(struct seq_file *file, void *iter) |
30 | { |
31 | struct task_struct *p; |
32 | |
33 | read_lock(&tasklist_lock); |
34 | |
35 | for_each_process(p) { |
36 | int pid = p->pid; |
37 | |
38 | if (unlikely(!pid)) |
39 | continue; |
40 | |
41 | if (p->mm) |
42 | seq_printf(m: file, fmt: "%5d : %04lx\n" , pid, |
43 | cpu_asid(smp_processor_id(), p->mm)); |
44 | } |
45 | |
46 | read_unlock(&tasklist_lock); |
47 | |
48 | return 0; |
49 | } |
50 | |
51 | DEFINE_SHOW_ATTRIBUTE(asids_debugfs); |
52 | |
53 | static int __init asids_debugfs_init(void) |
54 | { |
55 | debugfs_create_file(name: "asids" , S_IRUSR, parent: arch_debugfs_dir, NULL, |
56 | fops: &asids_debugfs_fops); |
57 | return 0; |
58 | } |
59 | device_initcall(asids_debugfs_init); |
60 | |