lkml.org 
[lkml]   [2006]   [Sep]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[RFC][PATCH 07/10] Task watchers v2 Register IRQ flag tracing task watcher
    Register an irq-flag-tracing task watcher instead of hooking into
    copy_process().

    Signed-off-by: Matt Helsley <matthltc@us.ibm.com>
    ---
    kernel/fork.c | 19 -------------------
    kernel/irq/handle.c | 24 ++++++++++++++++++++++++
    2 files changed, 24 insertions(+), 19 deletions(-)

    Index: linux-2.6.18-mm1/kernel/fork.c
    ===================================================================
    --- linux-2.6.18-mm1.orig/kernel/fork.c
    +++ linux-2.6.18-mm1/kernel/fork.c
    @@ -1058,29 +1058,10 @@ static struct task_struct *copy_process(
    p->tgid = current->tgid;

    retval = notify_task_watchers(WATCH_TASK_INIT, clone_flags, p);
    if (retval < 0)
    goto bad_fork_cleanup_delays_binfmt;
    -#ifdef CONFIG_TRACE_IRQFLAGS
    - p->irq_events = 0;
    -#ifdef __ARCH_WANT_INTERRUPTS_ON_CTXSW
    - p->hardirqs_enabled = 1;
    -#else
    - p->hardirqs_enabled = 0;
    -#endif
    - p->hardirq_enable_ip = 0;
    - p->hardirq_enable_event = 0;
    - p->hardirq_disable_ip = _THIS_IP_;
    - p->hardirq_disable_event = 0;
    - p->softirqs_enabled = 1;
    - p->softirq_enable_ip = _THIS_IP_;
    - p->softirq_enable_event = 0;
    - p->softirq_disable_ip = 0;
    - p->softirq_disable_event = 0;
    - p->hardirq_context = 0;
    - p->softirq_context = 0;
    -#endif
    #ifdef CONFIG_LOCKDEP
    p->lockdep_depth = 0; /* no locks held yet */
    p->curr_chain_key = 0;
    p->lockdep_recursion = 0;
    #endif
    Index: linux-2.6.18-mm1/kernel/irq/handle.c
    ===================================================================
    --- linux-2.6.18-mm1.orig/kernel/irq/handle.c
    +++ linux-2.6.18-mm1/kernel/irq/handle.c
    @@ -13,10 +13,11 @@
    #include <linux/irq.h>
    #include <linux/module.h>
    #include <linux/random.h>
    #include <linux/interrupt.h>
    #include <linux/kernel_stat.h>
    +#include <linux/task_watchers.h>

    #include "internals.h"

    /**
    * handle_bad_irq - handle spurious and unhandled irqs
    @@ -269,6 +270,29 @@ void early_init_irq_lock_class(void)

    for (i = 0; i < NR_IRQS; i++)
    lockdep_set_class(&irq_desc[i].lock, &irq_desc_lock_class);
    }

    +static int init_task_trace_irqflags(unsigned long clone_flags,
    + struct task_struct *p)
    +{
    + p->irq_events = 0;
    +#ifdef __ARCH_WANT_INTERRUPTS_ON_CTXSW
    + p->hardirqs_enabled = 1;
    +#else
    + p->hardirqs_enabled = 0;
    +#endif
    + p->hardirq_enable_ip = 0;
    + p->hardirq_enable_event = 0;
    + p->hardirq_disable_ip = _THIS_IP_;
    + p->hardirq_disable_event = 0;
    + p->softirqs_enabled = 1;
    + p->softirq_enable_ip = _THIS_IP_;
    + p->softirq_enable_event = 0;
    + p->softirq_disable_ip = 0;
    + p->softirq_disable_event = 0;
    + p->hardirq_context = 0;
    + p->softirq_context = 0;
    + return 0;
    +}
    +task_watcher_func(init, init_task_trace_irqflags);
    #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: 2006-09-29 04:19    [W:0.042 / U:1.644 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site