kpatch-build: test patch with --dry-run

During the test whether the patch applies, if it partially applies, the
patch utility returns an error but leaves the source tree in a partially
patched state.  Use --dry-run instead.
readme: add irc channel info

Fixes #142.
Merge pull request #149 from jpoimboe/readme

readme: add irc channel info
Merge pull request #148 from jpoimboe/kpatch-build-patch-dry-run

kpatch-build: test patch with --dry-run
Revert "fail on changed init section"

This reverts commit 7b15e23149bcb9e8b4e671542485ac8d5d54ec1b.

It seems that there was no bug to start with, so apparently the commit
didn't fix anything.

Fixes #103.
Ubuntu support for kpatch-build

At this point the module does build (i.e. kpatch-build is correct);
however, the addresses in the generated vmlinux don't match that
of the running kernel so the modules fail to load with an ftrace
registration error. So that is something to be investigated.

Signed-off-by: Seth Jennings <sjenning@redhat.com>
Merge pull request #152 from jpoimboe/revert-init-fix

Revert "fail on changed init section"
Merge pull request #153 from spartacus06/ubuntu-support

Ubuntu support for kpatch-build
create-diff-object: better reachability error message

If a patch changes a single function which is in a special section that
we don't support, create-diff-object reports "no changed functions were
found".  Give a clearer error message in that case, by checking
reachability errors before unchanged errors and by printing all
reachability errors errors instead of the first one it encounters.

Fixes #150.
Merge pull request #151 from jpoimboe/cdo-error-order

create-diff-object: better reachability error message
update docs for Ubuntu support

Signed-off-by: Seth Jennings <sjenning@redhat.com>
Merge pull request #155 from spartacus06/ubuntu-doc

update docs for Ubuntu support
kmod/core: fail more gracefully in kpatch_unregister

In kpatch_unregister(), if kpatch_remove_patch succeeds but one of the
subsequent ftrace unregistering calls fails, it returns an error and
fails to module_put() the patch module, even though the patch has been
removed.  This causes the patch module to get stuck in a weird place
where its patch has been unregistered but the patch module can't ever be
removed.

These errors aren't serious and wouldn't cause any real problems if they
did somehow fail, so instead just WARN if they fail.
kmod/core: NMI synchronization improvements

This is an attempt to both simplify and improve the correctness of the
NMI synchronization code.

There's a race in kpatch_ftrace_handler() between the kpatch_get_func()
and kpatch_finish_status() calls which could result in func being NULL.
The retry was supposed to fix this.  However, this race would still be a
problem in the repatching case (if the function had already been
previously patched), in which case func would not be NULL, but could
instead point to the previously patched version of the function.  In
this case it wouldn't retry and it would be possible for the previous
version of the function to run.

The fix is to use a memory barrier between accesses of the func hash and
the status variable, and then just call kpatch_get_func() *after*
accessing the status variable.  For OP_PATCH, if status is SUCCESS, then
func is guaranteed to point to the new function.  If status is FAILURE,
func might point to the new function, in which case we can use
get_prev_func to get the previous version of the function.

I also made some pretty big changes to try to simplify the design so
that there are less moving parts and so that it's hopefully easier to
understand.  I moved the OP field into the kpatch_func struct.  This
allows us to merge the two global state variables (status + op) into a
single global state variable (state), which helps make the code quite a
bit simpler.  I turned it into a proper state machine and documented the
meaning of each state in the comments.

Moving the OP field to the kpatch_func struct also paves the way for an
upcoming pull request which will allow patch modules to be atomically
replaced ("kpatch load --replace <module>").
gitignore *.o.d

When the core module compilation fails, a kmod/core/.core.o.d file
appears.
kpatch: reformat usage message

In prepraration for "kpatch load --replace", reformat the usage message
to give more room for the command descriptions.  Also move the
formatting logic to its own function.
kpatch load --replace

Allow the user to atomically replace all existing modules with a new
"kpatch load --replace" command.  This provides a safe way to do atomic
upgrades for cumulative patch module updates.