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

mm: Expose untagging mask in /proc/$PID/status

Add a line in /proc/$PID/status to report untag_mask. It can be
used to find out LAM status of the process from the outside. It is
useful for debuggers.

Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Tested-by: Alexander Potapenko <glider@google.com>
Link: https://lore.kernel.org/all/20230312112612.31869-10-kirill.shutemov%40linux.intel.com

authored by

Kirill A. Shutemov and committed by
Dave Hansen
f7d30434 2f8794bd

+32
+6
arch/arm64/include/asm/mmu_context.h
··· 288 288 unsigned long arm64_mm_context_get(struct mm_struct *mm); 289 289 void arm64_mm_context_put(struct mm_struct *mm); 290 290 291 + #define mm_untag_mask mm_untag_mask 292 + static inline unsigned long mm_untag_mask(struct mm_struct *mm) 293 + { 294 + return -1UL >> 8; 295 + } 296 + 291 297 #include <asm-generic/mmu_context.h> 292 298 293 299 #endif /* !__ASSEMBLY__ */
+6
arch/sparc/include/asm/mmu_context_64.h
··· 185 185 } 186 186 } 187 187 188 + #define mm_untag_mask mm_untag_mask 189 + static inline unsigned long mm_untag_mask(struct mm_struct *mm) 190 + { 191 + return -1UL >> adi_nbits(); 192 + } 193 + 188 194 #include <asm-generic/mmu_context.h> 189 195 190 196 #endif /* !(__ASSEMBLY__) */
+6
arch/x86/include/asm/mmu_context.h
··· 104 104 mm->context.untag_mask = oldmm->context.untag_mask; 105 105 } 106 106 107 + #define mm_untag_mask mm_untag_mask 108 + static inline unsigned long mm_untag_mask(struct mm_struct *mm) 109 + { 110 + return mm->context.untag_mask; 111 + } 112 + 107 113 static inline void mm_reset_untag_mask(struct mm_struct *mm) 108 114 { 109 115 mm->context.untag_mask = -1UL;
+7
fs/proc/array.c
··· 91 91 #include <linux/user_namespace.h> 92 92 #include <linux/fs_struct.h> 93 93 #include <linux/kthread.h> 94 + #include <linux/mmu_context.h> 94 95 95 96 #include <asm/processor.h> 96 97 #include "internal.h" ··· 424 423 seq_printf(m, "THP_enabled:\t%d\n", thp_enabled); 425 424 } 426 425 426 + static inline void task_untag_mask(struct seq_file *m, struct mm_struct *mm) 427 + { 428 + seq_printf(m, "untag_mask:\t%#lx\n", mm_untag_mask(mm)); 429 + } 430 + 427 431 int proc_pid_status(struct seq_file *m, struct pid_namespace *ns, 428 432 struct pid *pid, struct task_struct *task) 429 433 { ··· 444 438 task_mem(m, mm); 445 439 task_core_dumping(m, task); 446 440 task_thp_status(m, mm); 441 + task_untag_mask(m, mm); 447 442 mmput(mm); 448 443 } 449 444 task_sig(m, task);
+7
include/linux/mmu_context.h
··· 28 28 # define task_cpu_possible(cpu, p) cpumask_test_cpu((cpu), task_cpu_possible_mask(p)) 29 29 #endif 30 30 31 + #ifndef mm_untag_mask 32 + static inline unsigned long mm_untag_mask(struct mm_struct *mm) 33 + { 34 + return -1UL; 35 + } 36 + #endif 37 + 31 38 #endif