Gitweb: http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5fd4d16bd59a9fc84ca94c4fce4abc23fe219108 Commit: 5fd4d16bd59a9fc84ca94c4fce4abc23fe219108 Parent: ce90f340855d7a9b3bec24f0fe49a76904242387 Author: Roland McGrath <[EMAIL PROTECTED]> AuthorDate: Wed Jan 30 13:30:58 2008 +0100 Committer: Ingo Molnar <[EMAIL PROTECTED]> CommitDate: Wed Jan 30 13:30:58 2008 +0100
x86: x86-32 ptrace get/putreg current task This generalizes the getreg and putreg functions so they can be used on the current task, as well as on a task stopped in TASK_TRACED and switched off. This lays the groundwork to share this code for all kinds of user-mode machine state access, not just ptrace. Signed-off-by: Roland McGrath <[EMAIL PROTECTED]> Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]> Signed-off-by: Thomas Gleixner <[EMAIL PROTECTED]> --- arch/x86/kernel/ptrace_32.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-) diff --git a/arch/x86/kernel/ptrace_32.c b/arch/x86/kernel/ptrace_32.c index 5aca84e..2607130 100644 --- a/arch/x86/kernel/ptrace_32.c +++ b/arch/x86/kernel/ptrace_32.c @@ -55,6 +55,12 @@ static int putreg(struct task_struct *child, if (value && (value & 3) != 3) return -EIO; child->thread.gs = value; + if (child == current) + /* + * The user-mode %gs is not affected by + * kernel entry, so we must update the CPU. + */ + loadsegment(gs, value); return 0; case DS: case ES: @@ -104,6 +110,8 @@ static unsigned long getreg(struct task_struct *child, unsigned long regno) break; case GS: retval = child->thread.gs; + if (child == current) + savesegment(gs, retval); break; case DS: case ES: - To unsubscribe from this list: send the line "unsubscribe git-commits-head" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html