Re: [patch 08/13] syslets: x86, add move_user_context() method
- From: Ingo Molnar <mingo@xxxxxxx>
- Date: Thu, 22 Feb 2007 00:20:17 +0100
* 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/
- Follow-Ups:
- Re: [patch 08/13] syslets: x86, add move_user_context() method
- From: Davide Libenzi
- Re: [patch 08/13] syslets: x86, add move_user_context() method
- References:
- [patch 08/13] syslets: x86, add move_user_context() method
- From: Ingo Molnar
- Re: [patch 08/13] syslets: x86, add move_user_context() method
- From: Davide Libenzi
- [patch 08/13] syslets: x86, add move_user_context() method
- Prev by Date: Re: [RFC] split NAPI from network device.
- Next by Date: Re: [Xen-devel] Re: [patch 05/24] Xen-paravirt_ops: Add pagetable accessors to pack and unpack pagetable entries
- Previous by thread: Re: [patch 08/13] syslets: x86, add move_user_context() method
- Next by thread: Re: [patch 08/13] syslets: x86, add move_user_context() method
- Index(es):
Relevant Pages
|
|