From: Miroslav Benes <mbenes@suse.cz>
To: jpoimboe@redhat.com, jeyu@redhat.com, jikos@kernel.org
Cc: pmladek@suse.com, live-patching@vger.kernel.org,
linux-kernel@vger.kernel.org, Miroslav Benes <mbenes@suse.cz>
Subject: [PATCH 3/3] livepatch: force transition process to finish
Date: Thu, 18 May 2017 14:00:43 +0200 [thread overview]
Message-ID: <20170518120043.7205-4-mbenes@suse.cz> (raw)
In-Reply-To: <20170518120043.7205-1-mbenes@suse.cz>
If a task sleeps in a set of patched functions uninterruptibly, it could
block the whole transition process indefinitely. Thus it may be useful
to clear its TIF_PATCH_PENDING to allow the process to finish.
Admin can do that now by writing 2 to force sysfs attribute in livepatch
sysfs directory. TIF_PATCH_PENDING is then cleared for all tasks and the
transition can finish successfully.
Important note! Use wisely. Admin must be sure that it is safe to
execute such action. This means that it must be checked that by doing so
the consistency model guarantees are not violated.
Signed-off-by: Miroslav Benes <mbenes@suse.cz>
---
include/linux/livepatch.h | 1 +
kernel/livepatch/core.c | 3 +++
kernel/livepatch/transition.c | 16 ++++++++++++++++
kernel/livepatch/transition.h | 1 +
4 files changed, 21 insertions(+)
diff --git a/include/linux/livepatch.h b/include/linux/livepatch.h
index 43cfeebeb42b..b567208a1c6e 100644
--- a/include/linux/livepatch.h
+++ b/include/linux/livepatch.h
@@ -31,6 +31,7 @@
/* values for sysfs force attribute */
#define KLP_FORCE_FAKE 1
+#define KLP_FORCE_UNMARK 2
/* task patch states */
#define KLP_UNDEFINED -1
diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
index bb3b78fa7d2b..9bc1103348c9 100644
--- a/kernel/livepatch/core.c
+++ b/kernel/livepatch/core.c
@@ -469,6 +469,9 @@ static ssize_t force_store(struct kobject *kobj, struct kobj_attribute *attr,
case KLP_FORCE_FAKE:
klp_send_fake_signal();
break;
+ case KLP_FORCE_UNMARK:
+ klp_unmark_tasks();
+ break;
default:
return -EINVAL;
}
diff --git a/kernel/livepatch/transition.c b/kernel/livepatch/transition.c
index bb61aaa196d3..d057a34510e6 100644
--- a/kernel/livepatch/transition.c
+++ b/kernel/livepatch/transition.c
@@ -591,3 +591,19 @@ void klp_send_fake_signal(void)
}
read_unlock(&tasklist_lock);
}
+
+/*
+ * Drop TIF_PATCH_PENDING of all tasks on admin's request. This forces an
+ * existing transition to finish.
+ */
+void klp_unmark_tasks(void)
+{
+ struct task_struct *g, *task;
+
+ pr_warn("all tasks marked as migrated on admin's request\n");
+
+ read_lock(&tasklist_lock);
+ for_each_process_thread(g, task)
+ klp_update_patch_state(task);
+ read_unlock(&tasklist_lock);
+}
diff --git a/kernel/livepatch/transition.h b/kernel/livepatch/transition.h
index 1c7ede6eaa77..c129397b3985 100644
--- a/kernel/livepatch/transition.h
+++ b/kernel/livepatch/transition.h
@@ -11,5 +11,6 @@ void klp_start_transition(void);
void klp_try_complete_transition(void);
void klp_reverse_transition(void);
void klp_send_fake_signal(void);
+void klp_unmark_tasks(void);
#endif /* _LIVEPATCH_TRANSITION_H */
--
2.12.2
next prev parent reply other threads:[~2017-05-18 12:01 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-18 12:00 [PATCH 0/3] livepatch: Introduce force sysfs attribute Miroslav Benes
2017-05-18 12:00 ` [PATCH 1/3] livepatch: Add " Miroslav Benes
2017-05-18 13:05 ` Libor Pechacek
2017-05-18 13:20 ` Miroslav Benes
2017-05-18 12:00 ` [PATCH 2/3] livepatch: send a fake signal to all blocking tasks Miroslav Benes
2017-05-18 13:10 ` Libor Pechacek
2017-05-18 13:20 ` Miroslav Benes
2017-05-18 16:49 ` Oleg Nesterov
2017-05-18 18:14 ` Miroslav Benes
2017-05-18 19:52 ` Oleg Nesterov
2017-05-19 7:51 ` Miroslav Benes
2017-05-23 17:30 ` Josh Poimboeuf
2017-05-24 8:31 ` Miroslav Benes
2017-05-18 12:00 ` Miroslav Benes [this message]
2017-05-18 13:16 ` [PATCH 3/3] livepatch: force transition process to finish Libor Pechacek
2017-05-18 13:22 ` Miroslav Benes
2017-05-23 17:27 ` Josh Poimboeuf
2017-05-24 8:36 ` Miroslav Benes
2017-05-24 13:06 ` Petr Mladek
2017-05-24 14:15 ` Miroslav Benes
2017-05-24 15:09 ` Petr Mladek
2017-05-25 12:59 ` Miroslav Benes
2017-05-25 16:03 ` Petr Mladek
2017-05-26 17:37 ` Josh Poimboeuf
2017-05-29 12:28 ` Petr Mladek
2017-05-30 12:41 ` Josh Poimboeuf
2017-05-26 17:38 ` Josh Poimboeuf
2017-05-29 9:26 ` Miroslav Benes
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170518120043.7205-4-mbenes@suse.cz \
--to=mbenes@suse.cz \
--cc=jeyu@redhat.com \
--cc=jikos@kernel.org \
--cc=jpoimboe@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=live-patching@vger.kernel.org \
--cc=pmladek@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®