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 <roland@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
                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:
                break;
        case GS:
                retval = child->thread.gs;
+               if (child == current)
+                       savesegment(gs, retval);
                break;
        case DS:
        case ES: