Re: [patch 08/13] syslets: x86, add move_user_context() method




* Davide Libenzi <davidel@xxxxxxxxxxxxxxx> wrote:

On Wed, 21 Feb 2007, Ingo Molnar wrote:

From: Ingo Molnar <mingo@xxxxxxx>

add the move_user_context() method to move the user-space
context of one kernel thread to another kernel thread.
User-space might notice the changed TID, but execution,
stack and register contents (general purpose and FPU) are
still the same.

Also signal handling should/must be maintained, on top of TID. You
don't want the user to be presented with a different signal handling
after an sys_async_exec call.

right now CLONE_SIGNAL and CLONE_SIGHAND is used for new async threads,
so they should inherit and share all the signal settings.

one area that definitely needs more work is that the ptrace parent (if
any) should probably follow the 'head' context. gdb at the moment copes
surprisingly well, but some artifacts are visible every now and then.

+ *new_regs = *old_regs;
+ /*
+ * Flip around the FPU state too:
+ */
+ tmp = new_task->thread.i387;
+ new_task->thread.i387 = old_task->thread.i387;
+ old_task->thread.i387 = tmp;
+}

This is not going to work in this case (already posted twice in other
emails):

i'm really sorry - i still have a huge email backlog.

So NTSK loads a non up2date FPUo, instead of the FPUc that was the
"dirty" context to migrate (since TS_USEDFPU was set). I think you
need an early __unlazy_fpu() in that case, that would turn the above
into:

yes. My plan is to to avoid all these problems by having a
special-purpose sched_yield_to(old_task, new_task) function.

this, besides being even faster than the default scheduler (because the
runqueue balance does not change so no real scheduling decision has to
be done - the true scheduling decisions happen later on at async-wakeup
time), should also avoid all the FPU races: the FPU just gets flipped
between old_task and new_task (and TS_USEDFPU needs to be moved as well,
etc.). No intermediate task can come inbetween.

can you see a hole in this sched_yield_to() method as well?

Ingo
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



Relevant Pages

  • [patch 08/12] syslets: x86, add move_user_context() method
    ... context of one kernel thread to another kernel thread. ... User-space might notice the changed TID, but execution, ... * Move user-space context from one kernel thread to another. ...
    (Linux-Kernel)
  • [patch 09/14] syslets: x86, add move_user_context() method
    ... context of one kernel thread to another kernel thread. ... User-space might notice the changed TID, but execution, ... * Move user-space context from one kernel thread to another. ...
    (Linux-Kernel)
  • [patch 08/13] syslets: x86, add move_user_context() method
    ... context of one kernel thread to another kernel thread. ... User-space might notice the changed TID, but execution, ... * Move user-space context from one kernel thread to another. ...
    (Linux-Kernel)
  • Re: Using section/view in the driver
    ... DriverEntryand AddDeviceare called in the context of a system ... If you create a kernel thread with PsCreateSystemThreadand ... Therefore, if you create a section in DriverEntry() or AddDevice(), you ...
    (microsoft.public.development.device.drivers)
  • Re: [PATCH 2 of 4] Introduce i386 fibril scheduling
    ... i never suggested every aio op should create/destroy a kernel thread! ... user-space thread blocks - so instead of having to 'create' any of them ... We would never see that cost in the fully cached ... is able to pull it off, it can implement asynchronity via a state ...
    (Linux-Kernel)