lkml.org 
[lkml]   [2007]   [Sep]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 03/12] lockdep: x86_64: connect the sysexit hook
    Run the lockdep_sys_exit hook after all other C code on the syscall
    return path.

    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    ---
    arch/x86_64/kernel/entry.S | 3 +++
    arch/x86_64/lib/thunk.S | 4 ++++
    include/asm-x86_64/irqflags.h | 9 +++++++++
    3 files changed, 16 insertions(+)
    Index: linux-2.6/arch/x86_64/kernel/entry.S
    ===================================================================
    --- linux-2.6.orig/arch/x86_64/kernel/entry.S
    +++ linux-2.6/arch/x86_64/kernel/entry.S
    @@ -164,6 +164,7 @@ ENTRY(ret_from_fork)
    testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT),threadinfo_flags(%rcx)
    jnz rff_trace
    rff_action:
    + LOCKDEP_SYS_EXIT
    RESTORE_REST
    testl $3,CS-ARGOFFSET(%rsp) # from kernel_thread?
    je int_ret_from_sys_call
    @@ -326,6 +327,7 @@ tracesys:
    */
    .globl int_ret_from_sys_call
    int_ret_from_sys_call:
    + LOCKDEP_SYS_EXIT_REST
    cli
    TRACE_IRQS_OFF
    testl $3,CS-ARGOFFSET(%rsp)
    @@ -382,6 +384,7 @@ int_signal:
    call do_notify_resume
    1: movl $_TIF_NEED_RESCHED,%edi
    int_restore_rest:
    + LOCKDEP_SYS_EXIT
    RESTORE_REST
    cli
    TRACE_IRQS_OFF
    Index: linux-2.6/arch/x86_64/lib/thunk.S
    ===================================================================
    --- linux-2.6.orig/arch/x86_64/lib/thunk.S
    +++ linux-2.6/arch/x86_64/lib/thunk.S
    @@ -50,6 +50,10 @@
    thunk trace_hardirqs_on_thunk,trace_hardirqs_on
    thunk trace_hardirqs_off_thunk,trace_hardirqs_off
    #endif
    +
    +#ifdef CONFIG_DEBUG_LOCK_ALLOC
    + thunk lockdep_sys_exit_thunk,lockdep_sys_exit
    +#endif

    /* SAVE_ARGS below is used only for the .cfi directives it contains. */
    CFI_STARTPROC
    Index: linux-2.6/include/asm-x86_64/irqflags.h
    ===================================================================
    --- linux-2.6.orig/include/asm-x86_64/irqflags.h
    +++ linux-2.6/include/asm-x86_64/irqflags.h
    @@ -137,6 +137,15 @@ static inline void halt(void)
    # define TRACE_IRQS_ON
    # define TRACE_IRQS_OFF
    # endif
    +# ifdef CONFIG_DEBUG_LOCK_ALLOC
    +# define LOCKDEP_SYS_EXIT call lockdep_sys_exit_thunk
    +# define LOCKDEP_SYS_EXIT_REST SAVE_REST; \
    + LOCKDEP_SYS_EXIT; \
    + RESTORE_REST;
    +# else
    +# define LOCKDEP_SYS_EXIT
    +# define LOCKDEP_SYS_EXIT_REST
    +# endif
    #endif

    #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: 2007-09-28 10:03    [W:0.195 / U:0.520 seconds]
    ©2003-2014 Jasper Spaans. Advertise on this site