Re: live patching design (was: Re: [PATCH 1/3] sched: add sched_task_call())

Ingo Molnar
2015-02-22T10:17:44Z

* Jiri Kosina <jkosina@suse.cz> wrote:

> On Sat, 21 Feb 2015, Ingo Molnar wrote:
>
> > > Plus a lot of processes would see EINTR, causing more
> > > havoc.
> >
> > Parking threads safely in user mode does not require
> > the propagation of syscall interruption to user-space.
>
> BTW how exactly do you envision this will work? Do I
> understand your proposal correctly that EINTR will be
> "handled" somewhere in the "live patching special signal
> handler" and then have the interrupted syscall restarted?

If you want to think about it in signal handling terms then
it's a new automatic in-kernel handler, which does not
actually return back to user-mode at all.

We can do it via the signals machinery (mainly to reuse all
the existing signal_pending() code in various syscalls), or
via new TIF flags like the user work machinery: the
principle is the same: interrupt out of syscall functions
into a central place and restart them, and return to
user-space later on as if a single call had been performed.

This necessarily means some changes to syscalls, but not
insurmountable ones - and checkpoint/restore support would
want to have similar changes in any case so we can hit two
birds with the same stone.

> Even without EINTR propagation to userspace, this would
> make a lot of new syscall restarts that were not there
> before, [...]

That's only a problem if you do system call restarts by
restarting them via user-space system call restart handler
- I'm not proposing that.

I'm suggesting a completely user-space transparent way to
execute long lasting system calls in a smarter way. I.e. it
would not be observable via strace either.

Thanks,

Ingo