Messages in this thread |  | | | From | Eric Lacombe <> | | Subject | Re: [x86] do_arch_prctl | | Date | Mon, 24 Nov 2008 13:24:53 +0100 |
| |
Hello,
Does the "doit case" (line 822 in ARCH_GET_FS, function do_arch_prctl) exist for performance reasons? Else, why "task->thread.fs" (line 824) does not contain the fs base in the "doit case"?
Can someone explain _precisely_ the lines 835 through 838 (ARCH_GET_GS)? (I thought that just the line 836 was sufficient, but I obviously miss the case where MSR_KERNEL_GS_BASE does not reflect the value requested)
Thanks again for all your previous answers.
Eric
828 case ARCH_GET_GS: { 829 unsigned long base; 830 unsigned gsindex; 831 if (task->thread.gsindex == GS_TLS_SEL) 832 base = read_32bit_tls(task, GS_TLS); 833 else if (doit) { 834 asm("movl %%gs,%0" : "=r" (gsindex)); 835 if (gsindex) 836 rdmsrl(MSR_KERNEL_GS_BASE, base); 837 else 838 base = task->thread.gs; 839 } 840 else 841 base = task->thread.gs; 842 ret = put_user(base, (unsigned long __user *)addr); 843 break; 844 } --- 817 case ARCH_GET_FS: { 818 unsigned long base; 819 if (task->thread.fsindex == FS_TLS_SEL) 820 base = read_32bit_tls(task, FS_TLS); 821 else if (doit) 822 rdmsrl(MSR_FS_BASE, base); 823 else 824 base = task->thread.fs; 825 ret = put_user(base, (unsigned long __user *)addr); 826 break; 827 }
|  |