lkml.org 
[lkml]   [2007]   [Dec]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 16/19] modify get_desc_base
    Date
    This patch makes get_desc_base() receive a struct desc_struct,
    and then uses its internal fields to compute the base address.
    This is done at both i386 and x86_64, and then it is moved
    to common header

    Signed-off-by: Glauber de Oliveira Costa <gcosta@redhat.com>
    ---
    arch/x86/kernel/tls.c | 2 +-
    arch/x86/mm/fault_32.c | 2 +-
    include/asm-x86/desc.h | 8 ++------
    3 files changed, 4 insertions(+), 8 deletions(-)

    Index: linux-2.6-x86/arch/x86/kernel/tls.c
    ===================================================================
    --- linux-2.6-x86.orig/arch/x86/kernel/tls.c
    +++ linux-2.6-x86/arch/x86/kernel/tls.c
    @@ -112,7 +112,7 @@ int do_get_thread_area(struct task_struc

    memset(&info, 0, sizeof(struct user_desc));
    info.entry_number = idx;
    - info.base_addr = get_desc_base((void *)desc);
    + info.base_addr = get_desc_base((struct desc_struct *)desc);
    info.limit = GET_LIMIT(desc);
    info.seg_32bit = GET_32BIT(desc);
    info.contents = GET_CONTENTS(desc);
    Index: linux-2.6-x86/arch/x86/mm/fault_32.c
    ===================================================================
    --- linux-2.6-x86.orig/arch/x86/mm/fault_32.c
    +++ linux-2.6-x86/arch/x86/mm/fault_32.c
    @@ -115,7 +115,7 @@ static inline unsigned long get_segment_
    }

    /* Decode the code segment base from the descriptor */
    - base = get_desc_base((unsigned long *)desc);
    + base = get_desc_base((struct desc_struct *)desc);

    if (seg & (1<<2)) {
    mutex_unlock(&current->mm->context.lock);
    Index: linux-2.6-x86/include/asm-x86/desc.h
    ===================================================================
    --- linux-2.6-x86.orig/include/asm-x86/desc.h
    +++ linux-2.6-x86/include/asm-x86/desc.h
    @@ -69,6 +69,11 @@ static inline void load_LDT(mm_context_t
    preempt_enable();
    }

    +static inline unsigned long get_desc_base(struct desc_struct *desc)
    +{
    + return desc->base0 | ((desc->base1) << 16) | ((desc->base2) << 24);
    +}
    +
    #else
    /*
    * GET_DESC_BASE reads the descriptor base of the specified segment.
    Index: linux-2.6-x86/include/asm-x86/desc_32.h
    ===================================================================
    --- linux-2.6-x86.orig/include/asm-x86/desc_32.h
    +++ linux-2.6-x86/include/asm-x86/desc_32.h
    @@ -168,14 +168,6 @@ static inline void __set_tss_desc(unsign

    #define set_tss_desc(cpu,addr) __set_tss_desc(cpu, GDT_ENTRY_TSS, addr)

    -static inline unsigned long get_desc_base(unsigned long *desc)
    -{
    - unsigned long base;
    - base = ((desc[0] >> 16) & 0x0000ffff) |
    - ((desc[1] << 16) & 0x00ff0000) |
    - (desc[1] & 0xff000000);
    - return base;
    -}
    #endif /* !__ASSEMBLY__ */

    #endif
    Index: linux-2.6-x86/include/asm-x86/desc_64.h
    ===================================================================
    --- linux-2.6-x86.orig/include/asm-x86/desc_64.h
    +++ linux-2.6-x86/include/asm-x86/desc_64.h
    @@ -156,15 +156,6 @@ static inline void load_TLS(struct threa
    gdt[i] = t->tls_array[i];
    }

    -static inline unsigned long get_desc_base(const void *ptr)
    -{
    - const u32 *desc = ptr;
    - unsigned long base;
    - base = ((desc[0] >> 16) & 0x0000ffff) |
    - ((desc[1] << 16) & 0x00ff0000) |
    - (desc[1] & 0xff000000);
    - return base;
    -}
    #endif /* !__ASSEMBLY__ */

    #endif

    \
     
     \ /
      Last update: 2007-12-13 05:51    [W:0.021 / U:90.664 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site