lkml.org 
[lkml]   [2008]   [Nov]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [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
    >
    >
    >



    \
     
     \ /
      Last update: 2008-11-20 01:11    [W:0.023 / U:1.268 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site