livepatch: add /proc/<pid>/patch_state
Expose the per-task patch state value so users can determine which tasks are holding up completion of a patching operation. Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com> Reviewed-by: Petr Mladek <pmladek@suse.com> Reviewed-by: Miroslav Benes <mbenes@suse.cz> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
d83a7cb375
commit
7c23b33001
@ -44,6 +44,7 @@ Table of Contents
|
||||
3.8 /proc/<pid>/fdinfo/<fd> - Information about opened file
|
||||
3.9 /proc/<pid>/map_files - Information about memory mapped files
|
||||
3.10 /proc/<pid>/timerslack_ns - Task timerslack value
|
||||
3.11 /proc/<pid>/patch_state - Livepatch patch operation state
|
||||
|
||||
4 Configuring procfs
|
||||
4.1 Mount options
|
||||
@ -1887,6 +1888,23 @@ Valid values are from 0 - ULLONG_MAX
|
||||
An application setting the value must have PTRACE_MODE_ATTACH_FSCREDS level
|
||||
permissions on the task specified to change its timerslack_ns value.
|
||||
|
||||
3.11 /proc/<pid>/patch_state - Livepatch patch operation state
|
||||
-----------------------------------------------------------------
|
||||
When CONFIG_LIVEPATCH is enabled, this file displays the value of the
|
||||
patch state for the task.
|
||||
|
||||
A value of '-1' indicates that no patch is in transition.
|
||||
|
||||
A value of '0' indicates that a patch is in transition and the task is
|
||||
unpatched. If the patch is being enabled, then the task hasn't been
|
||||
patched yet. If the patch is being disabled, then the task has already
|
||||
been unpatched.
|
||||
|
||||
A value of '1' indicates that a patch is in transition and the task is
|
||||
patched. If the patch is being enabled, then the task has already been
|
||||
patched. If the patch is being disabled, then the task hasn't been
|
||||
unpatched yet.
|
||||
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
Configuring procfs
|
||||
|
@ -2834,6 +2834,15 @@ static int proc_pid_personality(struct seq_file *m, struct pid_namespace *ns,
|
||||
return err;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_LIVEPATCH
|
||||
static int proc_pid_patch_state(struct seq_file *m, struct pid_namespace *ns,
|
||||
struct pid *pid, struct task_struct *task)
|
||||
{
|
||||
seq_printf(m, "%d\n", task->patch_state);
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_LIVEPATCH */
|
||||
|
||||
/*
|
||||
* Thread groups
|
||||
*/
|
||||
@ -2933,6 +2942,9 @@ static const struct pid_entry tgid_base_stuff[] = {
|
||||
REG("timers", S_IRUGO, proc_timers_operations),
|
||||
#endif
|
||||
REG("timerslack_ns", S_IRUGO|S_IWUGO, proc_pid_set_timerslack_ns_operations),
|
||||
#ifdef CONFIG_LIVEPATCH
|
||||
ONE("patch_state", S_IRUSR, proc_pid_patch_state),
|
||||
#endif
|
||||
};
|
||||
|
||||
static int proc_tgid_base_readdir(struct file *file, struct dir_context *ctx)
|
||||
@ -3315,6 +3327,9 @@ static const struct pid_entry tid_base_stuff[] = {
|
||||
REG("projid_map", S_IRUGO|S_IWUSR, proc_projid_map_operations),
|
||||
REG("setgroups", S_IRUGO|S_IWUSR, proc_setgroups_operations),
|
||||
#endif
|
||||
#ifdef CONFIG_LIVEPATCH
|
||||
ONE("patch_state", S_IRUSR, proc_pid_patch_state),
|
||||
#endif
|
||||
};
|
||||
|
||||
static int proc_tid_base_readdir(struct file *file, struct dir_context *ctx)
|
||||
|
Loading…
x
Reference in New Issue
Block a user