Messages in this thread Patch in this message | | | From | Aubrey Li <> | Subject | [RFC PATCH v2 2/2] proc: add /proc/<pid>/thread_state | Date | Thu, 8 Nov 2018 01:16:22 +0800 |
| |
Expose the per-task cpu specific thread state value, it's helpful for userland to classify and schedule the tasks by different policies
Signed-off-by: Aubrey Li <aubrey.li@linux.intel.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Andi Kleen <ak@linux.intel.com> Cc: Tim Chen <tim.c.chen@linux.intel.com> Cc: Arjan van de Ven <arjan@linux.intel.com> --- arch/x86/kernel/fpu/xstate.c | 13 +++++++++++++ fs/proc/base.c | 13 +++++++++++++ 2 files changed, 26 insertions(+)
diff --git a/arch/x86/kernel/fpu/xstate.c b/arch/x86/kernel/fpu/xstate.c index 87a57b7..5a4a1d5 100644 --- a/arch/x86/kernel/fpu/xstate.c +++ b/arch/x86/kernel/fpu/xstate.c @@ -7,6 +7,7 @@ #include <linux/cpu.h> #include <linux/mman.h> #include <linux/pkeys.h> +#include <linux/seq_file.h> #include <asm/fpu/api.h> #include <asm/fpu/internal.h> @@ -1245,3 +1246,15 @@ int copy_user_to_xstate(struct xregs_state *xsave, const void __user *ubuf) return 0; } + +/* + * report AVX state + */ +void arch_thread_state(struct seq_file *m, struct task_struct *task) +{ + if (task->thread.fpu.avx.state) + seq_putc(m, '1'); + else + seq_putc(m, '0'); + seq_putc(m, '\n'); +} diff --git a/fs/proc/base.c b/fs/proc/base.c index aaffc0c..be24327 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -2893,6 +2893,17 @@ static int proc_pid_patch_state(struct seq_file *m, struct pid_namespace *ns, } #endif /* CONFIG_LIVEPATCH */ +void __weak arch_thread_state(struct seq_file *m, struct task_struct *task) +{ +} + +static int proc_pid_thread_state(struct seq_file *m, struct pid_namespace *ns, + struct pid *pid, struct task_struct *task) +{ + arch_thread_state(m, task); + return 0; +} + /* * Thread groups */ @@ -2994,6 +3005,7 @@ static const struct pid_entry tgid_base_stuff[] = { #ifdef CONFIG_LIVEPATCH ONE("patch_state", S_IRUSR, proc_pid_patch_state), #endif + ONE("thread_state", S_IRUSR, proc_pid_thread_state), }; static int proc_tgid_base_readdir(struct file *file, struct dir_context *ctx) @@ -3372,6 +3384,7 @@ static const struct pid_entry tid_base_stuff[] = { #ifdef CONFIG_LIVEPATCH ONE("patch_state", S_IRUSR, proc_pid_patch_state), #endif + ONE("thread_state", S_IRUSR, proc_pid_thread_state), }; static int proc_tid_base_readdir(struct file *file, struct dir_context *ctx) -- 2.7.4
| |