livepatch: Remove signal sysfs attribute
The fake signal is send automatically now. We can rely on it completely and remove the sysfs attribute. Signed-off-by: Miroslav Benes <mbenes@suse.cz> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
committed by
Jiri Kosina
parent
cba82dea30
commit
0b3d52790e
@@ -347,6 +347,47 @@ done:
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Sends a fake signal to all non-kthread tasks with TIF_PATCH_PENDING set.
|
||||
* Kthreads with TIF_PATCH_PENDING set are woken up.
|
||||
*/
|
||||
static void klp_send_signals(void)
|
||||
{
|
||||
struct task_struct *g, *task;
|
||||
|
||||
if (klp_signals_cnt == SIGNALS_TIMEOUT)
|
||||
pr_notice("signaling remaining tasks\n");
|
||||
|
||||
read_lock(&tasklist_lock);
|
||||
for_each_process_thread(g, task) {
|
||||
if (!klp_patch_pending(task))
|
||||
continue;
|
||||
|
||||
/*
|
||||
* There is a small race here. We could see TIF_PATCH_PENDING
|
||||
* set and decide to wake up a kthread or send a fake signal.
|
||||
* Meanwhile the task could migrate itself and the action
|
||||
* would be meaningless. It is not serious though.
|
||||
*/
|
||||
if (task->flags & PF_KTHREAD) {
|
||||
/*
|
||||
* Wake up a kthread which sleeps interruptedly and
|
||||
* still has not been migrated.
|
||||
*/
|
||||
wake_up_state(task, TASK_INTERRUPTIBLE);
|
||||
} else {
|
||||
/*
|
||||
* Send fake signal to all non-kthread tasks which are
|
||||
* still not migrated.
|
||||
*/
|
||||
spin_lock_irq(&task->sighand->siglock);
|
||||
signal_wake_up(task, 0);
|
||||
spin_unlock_irq(&task->sighand->siglock);
|
||||
}
|
||||
}
|
||||
read_unlock(&tasklist_lock);
|
||||
}
|
||||
|
||||
/*
|
||||
* Try to switch all remaining tasks to the target patch state by walking the
|
||||
* stacks of sleeping tasks and looking for any to-be-patched or
|
||||
@@ -586,47 +627,6 @@ void klp_copy_process(struct task_struct *child)
|
||||
/* TIF_PATCH_PENDING gets copied in setup_thread_stack() */
|
||||
}
|
||||
|
||||
/*
|
||||
* Sends a fake signal to all non-kthread tasks with TIF_PATCH_PENDING set.
|
||||
* Kthreads with TIF_PATCH_PENDING set are woken up.
|
||||
*/
|
||||
void klp_send_signals(void)
|
||||
{
|
||||
struct task_struct *g, *task;
|
||||
|
||||
if (klp_signals_cnt == SIGNALS_TIMEOUT)
|
||||
pr_notice("signaling remaining tasks\n");
|
||||
|
||||
read_lock(&tasklist_lock);
|
||||
for_each_process_thread(g, task) {
|
||||
if (!klp_patch_pending(task))
|
||||
continue;
|
||||
|
||||
/*
|
||||
* There is a small race here. We could see TIF_PATCH_PENDING
|
||||
* set and decide to wake up a kthread or send a fake signal.
|
||||
* Meanwhile the task could migrate itself and the action
|
||||
* would be meaningless. It is not serious though.
|
||||
*/
|
||||
if (task->flags & PF_KTHREAD) {
|
||||
/*
|
||||
* Wake up a kthread which sleeps interruptedly and
|
||||
* still has not been migrated.
|
||||
*/
|
||||
wake_up_state(task, TASK_INTERRUPTIBLE);
|
||||
} else {
|
||||
/*
|
||||
* Send fake signal to all non-kthread tasks which are
|
||||
* still not migrated.
|
||||
*/
|
||||
spin_lock_irq(&task->sighand->siglock);
|
||||
signal_wake_up(task, 0);
|
||||
spin_unlock_irq(&task->sighand->siglock);
|
||||
}
|
||||
}
|
||||
read_unlock(&tasklist_lock);
|
||||
}
|
||||
|
||||
/*
|
||||
* Drop TIF_PATCH_PENDING of all tasks on admin's request. This forces an
|
||||
* existing transition to finish.
|
||||
|
||||
Reference in New Issue
Block a user