Re: [x86] do_arch_prctl

From: Jeremy Fitzhardinge
Date: Wed Nov 19 2008 - 19:07:55 EST


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



--
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/