From: Petr Mladek <pmladek@suse.com>
To: Jiri Kosina <jikos@kernel.org>,
Josh Poimboeuf <jpoimboe@redhat.com>,
Miroslav Benes <mbenes@suse.cz>
Cc: Joe Lawrence <joe.lawrence@redhat.com>,
Kamalesh Babulal <kamalesh@linux.vnet.ibm.com>,
Nicolai Stange <nstange@suse.de>,
live-patching@vger.kernel.org, linux-kernel@vger.kernel.org,
Petr Mladek <pmladek@suse.com>
Subject: [RFC 4/5] livepatch: Documentation of the new API for tracking system state changes
Date: Tue, 11 Jun 2019 15:56:26 +0200 [thread overview]
Message-ID: <20190611135627.15556-5-pmladek@suse.com> (raw)
In-Reply-To: <20190611135627.15556-1-pmladek@suse.com>
Documentation explaining the motivation, capabilities, and usage
of the new API for tracking system state changes.
Signed-off-by: Petr Mladek <pmladek@suse.com>
---
Documentation/livepatch/index.rst | 1 +
Documentation/livepatch/system-state.rst | 80 ++++++++++++++++++++++++++++++++
2 files changed, 81 insertions(+)
create mode 100644 Documentation/livepatch/system-state.rst
diff --git a/Documentation/livepatch/index.rst b/Documentation/livepatch/index.rst
index edd291d51847..94bbbc2c8993 100644
--- a/Documentation/livepatch/index.rst
+++ b/Documentation/livepatch/index.rst
@@ -9,6 +9,7 @@ Kernel Livepatching
livepatch
callbacks
+ system-state
cumulative-patches
module-elf-format
shadow-vars
diff --git a/Documentation/livepatch/system-state.rst b/Documentation/livepatch/system-state.rst
new file mode 100644
index 000000000000..3a35073a0b80
--- /dev/null
+++ b/Documentation/livepatch/system-state.rst
@@ -0,0 +1,80 @@
+====================
+System State Changes
+====================
+
+Some users are really reluctant to reboot a system. This brings the need
+to provide more livepatches and maintain some compatibility between them.
+
+Maintaining more livepatches is much easier with cumulative livepatches.
+Each new livepatch completely replaces any older one. It can keep,
+add, and even remove fixes. And it is typically safe to replace any version
+of the livepatch with any other one thanks to the atomic replace feature.
+
+The problems might come with shadow variables and callbacks. They might
+change the system behavior or state so that it is not longer safe to
+go back and use an older livepatch or the original kernel code. Also
+any new livepatch must be able to detect what changes have already been
+done by the already installed livepatches.
+
+This is where the livepatch system state tracking gets useful. It
+allows to:
+
+ - store data needed to manipulate and restore the system state
+
+ - define compatibility between livepatches using a change id
+ and version
+
+
+1. Livepatch system state API
+=============================
+
+The state of the system might get modified either by several livepatch callbacks
+or by the newly used code. Also it must be possible to find changes done by
+already installed livepatches.
+
+Each modified state is described by struct klp_state, see
+include/linux/livepatch.h.
+
+Each livepatch defines an array of struct klp_states. They mention
+all states that the livepatch modifies.
+
+The livepatch author must define the following two fields for each
+struct klp_state:
+
+ - *id*
+
+ - Non-zero number used to identify the affected system state.
+
+ - *version*
+
+ - Number describing the variant of the system state change that
+ is supported by the given livepatch.
+
+The state can be manipulated using two functions:
+
+ - *klp_get_state(patch, id)*
+
+ - Get struct klp_state associated with the given livepatch
+ and state id.
+
+ - *klp_get_prev_state(id)*
+
+ - Get struct klp_state associated with the given feature id and
+ already installed livepatches.
+
+1. Livepatch compatibility
+==========================
+
+The system state version is used to prevent loading incompatible livepatches.
+The check is done when the livepatch is enabled. The rules are:
+
+ - Any completely new system state modification is allowed.
+
+ - System state modifications with the same or higher version are allowed
+ for already modified system states.
+
+ - Cumulative livepatches must handle all system state modifications from
+ already installed livepatches.
+
+ - Non-cumulative livepatches are allowed to touch already modified
+ system states.
--
2.16.4
next prev parent reply other threads:[~2019-06-11 13:57 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-11 13:56 [RFC 0/5] livepatch: new API to track " Petr Mladek
2019-06-11 13:56 ` [RFC 1/5] livepatch: Keep replaced patches until post_patch callback is called Petr Mladek
2019-06-11 13:56 ` [RFC 2/5] livepatch: Basic API to track system state changes Petr Mladek
2019-06-21 13:43 ` Joe Lawrence
2019-06-24 9:32 ` Nicolai Stange
2019-06-11 13:56 ` [RFC 3/5] livepatch: Allow to distinguish different version of " Petr Mladek
2019-06-21 11:27 ` Miroslav Benes
2019-06-21 14:09 ` Joe Lawrence
2019-06-21 15:00 ` Joe Lawrence
2019-06-24 10:26 ` Nicolai Stange
2019-07-18 11:38 ` Petr Mladek
2019-07-18 9:08 ` Petr Mladek
2019-06-11 13:56 ` Petr Mladek [this message]
2019-06-21 14:15 ` [RFC 4/5] livepatch: Documentation of the new API for tracking " Joe Lawrence
2019-06-11 13:56 ` [RFC 5/5] livepatch: Selftests of the " Petr Mladek
2019-06-21 11:54 ` Miroslav Benes
2019-06-21 14:19 ` Joe Lawrence
2019-06-15 20:47 ` [RFC 0/5] livepatch: new API to track " Josh Poimboeuf
2019-06-21 13:19 ` Joe Lawrence
2019-06-24 9:27 ` Nicolai Stange
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=20190611135627.15556-5-pmladek@suse.com \
--to=pmladek@suse.com \
--cc=jikos@kernel.org \
--cc=joe.lawrence@redhat.com \
--cc=jpoimboe@redhat.com \
--cc=kamalesh@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=live-patching@vger.kernel.org \
--cc=mbenes@suse.cz \
--cc=nstange@suse.de \
/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®