lkml.org 
[lkml]   [2002]   [Dec]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: Intel P6 vs P7 system call performance

    How about this diff? It does both the 6-parameter thing _and_ the
    AT_SYSINFO addition. Untested, since I have to run off and watch my kids
    do their winter program ;)

    Linus

    -----
    ===== arch/i386/kernel/entry.S 1.42 vs edited =====
    --- 1.42/arch/i386/kernel/entry.S Mon Dec 16 21:39:04 2002
    +++ edited/arch/i386/kernel/entry.S Tue Dec 17 11:59:13 2002
    @@ -232,7 +232,7 @@
    #endif

    /* Points to after the "sysenter" instruction in the vsyscall page */
    -#define SYSENTER_RETURN 0xfffff007
    +#define SYSENTER_RETURN 0xffffe007

    # sysenter call handler stub
    ALIGN
    @@ -243,6 +243,21 @@
    pushfl
    pushl $(__USER_CS)
    pushl $SYSENTER_RETURN
    +
    +/*
    + * Load the potential sixth argument from user stack.
    + * Careful about security.
    + */
    + cmpl $0xc0000000,%ebp
    + jae syscall_badsys
    +1: movl (%ebp),%ebp
    +.section .fixup,"ax"
    +2: xorl %ebp,%ebp
    +.previous
    +.section __ex_table,"a"
    + .align 4
    + .long 1b,2b
    +.previous

    pushl %eax
    SAVE_ALL
    ===== arch/i386/kernel/sysenter.c 1.1 vs edited =====
    --- 1.1/arch/i386/kernel/sysenter.c Mon Dec 16 21:39:04 2002
    +++ edited/arch/i386/kernel/sysenter.c Tue Dec 17 11:39:39 2002
    @@ -48,14 +48,14 @@
    0xc3 /* ret */
    };
    static const char sysent[] = {
    - 0x55, /* push %ebp */
    0x51, /* push %ecx */
    0x52, /* push %edx */
    + 0x55, /* push %ebp */
    0x89, 0xe5, /* movl %esp,%ebp */
    0x0f, 0x34, /* sysenter */
    + 0x5d, /* pop %ebp */
    0x5a, /* pop %edx */
    0x59, /* pop %ecx */
    - 0x5d, /* pop %ebp */
    0xc3 /* ret */
    };
    unsigned long page = get_zeroed_page(GFP_ATOMIC);
    ===== include/asm-i386/elf.h 1.3 vs edited =====
    --- 1.3/include/asm-i386/elf.h Thu Oct 17 00:48:55 2002
    +++ edited/include/asm-i386/elf.h Tue Dec 17 10:12:58 2002
    @@ -100,6 +100,12 @@

    #define ELF_PLATFORM (system_utsname.machine)

    +/*
    + * Architecture-neutral AT_ values in 0-17, leave some room
    + * for more of them, start the x86-specific ones at 32.
    + */
    +#define AT_SYSINFO 32
    +
    #ifdef __KERNEL__
    #define SET_PERSONALITY(ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX)

    @@ -115,6 +121,11 @@
    extern void dump_smp_unlazy_fpu(void);
    #define ELF_CORE_SYNC dump_smp_unlazy_fpu
    #endif
    +
    +#define ARCH_DLINFO \
    +do { \
    + NEW_AUX_ENT(AT_SYSINFO, 0xffffe000); \
    +} while (0)

    #endif

    ===== include/asm-i386/fixmap.h 1.9 vs edited =====
    --- 1.9/include/asm-i386/fixmap.h Mon Dec 16 21:39:04 2002
    +++ edited/include/asm-i386/fixmap.h Tue Dec 17 10:11:31 2002
    @@ -42,8 +42,8 @@
    * task switches.
    */
    enum fixed_addresses {
    - FIX_VSYSCALL,
    FIX_HOLE,
    + FIX_VSYSCALL,
    #ifdef CONFIG_X86_LOCAL_APIC
    FIX_APIC_BASE, /* local (CPU) APIC) -- required for SMP or not */
    #endif
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 13:31    [W:0.022 / U:90.652 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site