Messages in this thread |  | | | Date | Wed, 19 Nov 2008 16:07:42 -0800 | | From | Jeremy Fitzhardinge <> | | Subject | Re: [x86] do_arch_prctl |
| |
Eric Lacombe wrote: > Thanks for your answer, I've got one last question ;) > In the ARCH_GET_GS, can you explain the line 834 to 838? > > In fact, at first sight 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, hence my question. >
I think the rationale is that rdmsr is slow, so reading the value from the task context is faster where possible.
It's not a very pretty part of the architecture :/
J
> 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; > > Thanks, > > Eric > > >
|  |