]> git.baikalelectronics.ru Git - kernel.git/commit
livepatch: Remove Nop structures when unused
authorPetr Mladek <pmladek@suse.com>
Wed, 9 Jan 2019 12:43:26 +0000 (13:43 +0100)
committerJiri Kosina <jkosina@suse.cz>
Fri, 11 Jan 2019 19:51:24 +0000 (20:51 +0100)
commit13c0286f89ed8c54b8e1d9ab2a2e8d79f2bb2881
tree53f96c1a0ddbec0307bc3c7f2c1bfda8c5368fc7
parent61f612e04c64a0c1466006cead1b0e0bd058b43d
livepatch: Remove Nop structures when unused

Replaced patches are removed from the stack when the transition is
finished. It means that Nop structures will never be needed again
and can be removed. Why should we care?

  + Nop structures give the impression that the function is patched
    even though the ftrace handler has no effect.

  + Ftrace handlers do not come for free. They cause slowdown that might
    be visible in some workloads. The ftrace-related slowdown might
    actually be the reason why the function is no longer patched in
    the new cumulative patch. One would expect that cumulative patch
    would help solve these problems as well.

  + Cumulative patches are supposed to replace any earlier version of
    the patch. The amount of NOPs depends on which version was replaced.
    This multiplies the amount of scenarios that might happen.

    One might say that NOPs are innocent. But there are even optimized
    NOP instructions for different processors, for example, see
    arch/x86/kernel/alternative.c. And klp_ftrace_handler() is much
    more complicated.

  + It sounds natural to clean up a mess that is no longer needed.
    It could only be worse if we do not do it.

This patch allows to unpatch and free the dynamic structures independently
when the transition finishes.

The free part is a bit tricky because kobject free callbacks are called
asynchronously. We could not wait for them easily. Fortunately, we do
not have to. Any further access can be avoided by removing them from
the dynamic lists.

Signed-off-by: Petr Mladek <pmladek@suse.com>
Acked-by: Miroslav Benes <mbenes@suse.cz>
Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
kernel/livepatch/core.c
kernel/livepatch/core.h
kernel/livepatch/patch.c
kernel/livepatch/patch.h
kernel/livepatch/transition.c