From: Ingo Molnar <mingo@elte.hu>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Andi Kleen <ak@muc.de>,
Sven-Thorsten Dietrich <sdietrich@mvista.com>,
dwalker@mvista.com, bhuey@lnxw.com, nickpiggin@yahoo.com.au,
hch@infradead.org, akpm@osdl.org, linux-kernel@vger.kernel.org
Subject: Re: RT patch acceptance
Date: Fri, 27 May 2005 11:14:32 +0200 [thread overview]
Message-ID: <20050527091432.GB20512@elte.hu> (raw)
In-Reply-To: <1117184630.6736.415.camel@tglx.tec.linutronix.de>
* Thomas Gleixner <tglx@linutronix.de> wrote:
> > But keep
> > the basic fundamental operations fast please (at least that used to be one
> > of the Linux mottos that served it very well for many years, although more
> > and more people seem to forget it now)
>
> "It has been that way since ages" arguments are not really productive in
> a discussion. [...]
to make sure the wide context has not been lost: no way is IRQ threading
ever going to be the main or even the preferred mode of operation.
secondly, there's no performance impact on stock kernels, nor any design
drag. I have done a very quick & dirty separation out of hardirq
threading from -RT patchset, see the patch below. It's pretty small:
8 files changed, 375 insertions(+), 53 deletions(-)
no arch level change is needed - if an arch uses GENERIC_HARDIRQS then
it will be automatically capable to run hardirq threads.
Ingo
NOT-Signed-off-by: Ingo Molnar <mingo@elte.hu>
--- linux/kernel/irq/proc.c.orig
+++ linux/kernel/irq/proc.c
@@ -7,9 +7,12 @@
*/
#include <linux/irq.h>
+#include <asm/uaccess.h>
#include <linux/proc_fs.h>
#include <linux/interrupt.h>
+#include "internals.h"
+
static struct proc_dir_entry *root_irq_dir, *irq_dir[NR_IRQS];
#ifdef CONFIG_SMP
@@ -67,37 +70,6 @@ static int irq_affinity_write_proc(struc
#endif
-#define MAX_NAMELEN 128
-
-static int name_unique(unsigned int irq, struct irqaction *new_action)
-{
- struct irq_desc *desc = irq_desc + irq;
- struct irqaction *action;
-
- for (action = desc->action ; action; action = action->next)
- if ((action != new_action) && action->name &&
- !strcmp(new_action->name, action->name))
- return 0;
- return 1;
-}
-
-void register_handler_proc(unsigned int irq, struct irqaction *action)
-{
- char name [MAX_NAMELEN];
-
- if (!irq_dir[irq] || action->dir || !action->name ||
- !name_unique(irq, action))
- return;
-
- memset(name, 0, MAX_NAMELEN);
- snprintf(name, MAX_NAMELEN, "%s", action->name);
-
- /* create /proc/irq/1234/handler/ */
- action->dir = proc_mkdir(name, irq_dir[irq]);
-}
-
-#undef MAX_NAMELEN
-
#define MAX_NAMELEN 10
void register_irq_proc(unsigned int irq)
@@ -137,10 +109,96 @@ void register_irq_proc(unsigned int irq)
void unregister_handler_proc(unsigned int irq, struct irqaction *action)
{
+ if (action->threaded)
+ remove_proc_entry(action->threaded->name, action->dir);
if (action->dir)
remove_proc_entry(action->dir->name, irq_dir[irq]);
}
+#ifndef CONFIG_PREEMPT_RT
+
+static int threaded_read_proc(char *page, char **start, off_t off,
+ int count, int *eof, void *data)
+{
+ return sprintf(page, "%c\n",
+ ((struct irqaction *)data)->flags & SA_NODELAY ? '0' : '1');
+}
+
+static int threaded_write_proc(struct file *file, const char __user *buffer,
+ unsigned long count, void *data)
+{
+ int c;
+ struct irqaction *action = data;
+ irq_desc_t *desc = irq_desc + action->irq;
+
+ if (get_user(c, buffer))
+ return -EFAULT;
+ if (c != '0' && c != '1')
+ return -EINVAL;
+
+ spin_lock_irq(&desc->lock);
+
+ if (c == '0')
+ action->flags |= SA_NODELAY;
+ if (c == '1')
+ action->flags &= ~SA_NODELAY;
+ recalculate_desc_flags(desc);
+
+ spin_unlock_irq(&desc->lock);
+
+ return 1;
+}
+
+#endif
+
+#define MAX_NAMELEN 128
+
+static int name_unique(unsigned int irq, struct irqaction *new_action)
+{
+ struct irq_desc *desc = irq_desc + irq;
+ struct irqaction *action;
+
+ for (action = desc->action ; action; action = action->next)
+ if ((action != new_action) && action->name &&
+ !strcmp(new_action->name, action->name))
+ return 0;
+ return 1;
+}
+
+void register_handler_proc(unsigned int irq, struct irqaction *action)
+{
+ char name [MAX_NAMELEN];
+
+ if (!irq_dir[irq] || action->dir || !action->name ||
+ !name_unique(irq, action))
+ return;
+
+ memset(name, 0, MAX_NAMELEN);
+ snprintf(name, MAX_NAMELEN, "%s", action->name);
+
+ /* create /proc/irq/1234/handler/ */
+ action->dir = proc_mkdir(name, irq_dir[irq]);
+ if (!action->dir)
+ return;
+#ifndef CONFIG_PREEMPT_RT
+ {
+ struct proc_dir_entry *entry;
+ /* create /proc/irq/1234/handler/threaded */
+ entry = create_proc_entry("threaded", 0600, action->dir);
+ if (!entry)
+ return;
+ entry->nlink = 1;
+ entry->data = (void *)action;
+ entry->read_proc = threaded_read_proc;
+ entry->write_proc = threaded_write_proc;
+ action->threaded = entry;
+ }
+#endif
+}
+
+#undef MAX_NAMELEN
+
+
void init_irq_proc(void)
{
int i;
@@ -150,6 +208,9 @@ void init_irq_proc(void)
if (!root_irq_dir)
return;
+ /* create /proc/irq/prof_cpu_mask */
+ create_prof_cpu_mask(root_irq_dir);
+
/*
* Create entries for all existing IRQs.
*/
--- linux/kernel/irq/manage.c.orig
+++ linux/kernel/irq/manage.c
@@ -7,8 +7,10 @@
*/
#include <linux/irq.h>
-#include <linux/module.h>
#include <linux/random.h>
+#include <linux/module.h>
+#include <linux/kthread.h>
+#include <linux/syscalls.h>
#include <linux/interrupt.h>
#include "internals.h"
@@ -30,8 +32,12 @@ void synchronize_irq(unsigned int irq)
{
struct irq_desc *desc = irq_desc + irq;
- while (desc->status & IRQ_INPROGRESS)
- cpu_relax();
+ if (hardirq_preemption && !(desc->status & IRQ_NODELAY))
+ wait_event(desc->wait_for_handler,
+ !(desc->status & IRQ_INPROGRESS));
+ else
+ while (desc->status & IRQ_INPROGRESS)
+ cpu_relax();
}
EXPORT_SYMBOL(synchronize_irq);
@@ -127,6 +133,21 @@ void enable_irq(unsigned int irq)
EXPORT_SYMBOL(enable_irq);
/*
+ * If any action has SA_NODELAY then turn IRQ_NODELAY on:
+ */
+void recalculate_desc_flags(struct irq_desc *desc)
+{
+ struct irqaction *action;
+
+ desc->status &= ~IRQ_NODELAY;
+ for (action = desc->action ; action; action = action->next)
+ if (action->flags & SA_NODELAY)
+ desc->status |= IRQ_NODELAY;
+}
+
+static int start_irq_thread(int irq, struct irq_desc *desc);
+
+/*
* Internal function that tells the architecture code whether a
* particular irq has been exclusively allocated or is available
* for driver use.
@@ -176,6 +197,9 @@ int setup_irq(unsigned int irq, struct i
rand_initialize_irq(irq);
}
+ if (!(new->flags & SA_NODELAY))
+ if (start_irq_thread(irq, desc))
+ return -ENOMEM;
/*
* The following block of code has to be executed atomically
*/
@@ -198,6 +222,11 @@ int setup_irq(unsigned int irq, struct i
*p = new;
+ /*
+ * Propagate any possible SA_NODELAY flag into IRQ_NODELAY:
+ */
+ recalculate_desc_flags(desc);
+
if (!shared) {
desc->depth = 0;
desc->status &= ~(IRQ_DISABLED | IRQ_AUTODETECT |
@@ -211,7 +240,7 @@ int setup_irq(unsigned int irq, struct i
new->irq = irq;
register_irq_proc(irq);
- new->dir = NULL;
+ new->dir = new->threaded = NULL;
register_handler_proc(irq, new);
return 0;
@@ -262,6 +291,7 @@ void free_irq(unsigned int irq, void *de
else
desc->handler->disable(irq);
}
+ recalculate_desc_flags(desc);
spin_unlock_irqrestore(&desc->lock,flags);
unregister_handler_proc(irq, action);
@@ -347,3 +377,171 @@ int request_irq(unsigned int irq,
EXPORT_SYMBOL(request_irq);
+#ifdef CONFIG_PREEMPT_HARDIRQS
+
+int hardirq_preemption = 1;
+
+EXPORT_SYMBOL(hardirq_preemption);
+
+/*
+ * Real-Time Preemption depends on hardirq threading:
+ */
+#ifndef CONFIG_PREEMPT_RT
+
+static int __init hardirq_preempt_setup (char *str)
+{
+ if (!strncmp(str, "off", 3))
+ hardirq_preemption = 0;
+ else
+ get_option(&str, &hardirq_preemption);
+ if (!hardirq_preemption)
+ printk("turning off hardirq preemption!\n");
+
+ return 1;
+}
+
+__setup("hardirq-preempt=", hardirq_preempt_setup);
+
+#endif
+
+static void do_hardirq(struct irq_desc *desc)
+{
+ struct irqaction * action;
+ unsigned int irq = desc - irq_desc;
+
+ local_irq_disable();
+
+ if (desc->status & IRQ_INPROGRESS) {
+ action = desc->action;
+ spin_lock(&desc->lock);
+ for (;;) {
+ irqreturn_t action_ret = 0;
+
+ if (action) {
+ spin_unlock(&desc->lock);
+ action_ret = handle_IRQ_event(irq, NULL,action);
+ local_irq_enable();
+ cond_resched_all();
+ spin_lock_irq(&desc->lock);
+ }
+ if (!noirqdebug)
+ note_interrupt(irq, desc, action_ret);
+ if (likely(!(desc->status & IRQ_PENDING)))
+ break;
+ desc->status &= ~IRQ_PENDING;
+ }
+ desc->status &= ~IRQ_INPROGRESS;
+ /*
+ * The ->end() handler has to deal with interrupts which got
+ * disabled while the handler was running.
+ */
+ desc->handler->end(irq);
+ spin_unlock(&desc->lock);
+ }
+ local_irq_enable();
+ if (waitqueue_active(&desc->wait_for_handler))
+ wake_up(&desc->wait_for_handler);
+}
+
+extern asmlinkage void __do_softirq(void);
+
+static int curr_irq_prio = 49;
+
+static int do_irqd(void * __desc)
+{
+ struct sched_param param = { 0, };
+ struct irq_desc *desc = __desc;
+#ifdef CONFIG_SMP
+ int irq = desc - irq_desc;
+ cpumask_t mask;
+
+ mask = cpumask_of_cpu(any_online_cpu(irq_affinity[irq]));
+ set_cpus_allowed(current, mask);
+#endif
+ current->flags |= PF_NOFREEZE | PF_HARDIRQ;
+
+ /*
+ * Scale irq thread priorities from prio 50 to prio 25
+ */
+ param.sched_priority = curr_irq_prio;
+ if (param.sched_priority > 25)
+ curr_irq_prio = param.sched_priority - 1;
+
+ sys_sched_setscheduler(current->pid, SCHED_FIFO, ¶m);
+
+ while (!kthread_should_stop()) {
+ set_current_state(TASK_INTERRUPTIBLE);
+ do_hardirq(desc);
+ cond_resched_all();
+ __do_softirq();
+ local_irq_enable();
+#ifdef CONFIG_SMP
+ /*
+ * Did IRQ affinities change?
+ */
+ if (!cpu_isset(smp_processor_id(), irq_affinity[irq])) {
+ mask = cpumask_of_cpu(any_online_cpu(irq_affinity[irq]));
+ set_cpus_allowed(current, mask);
+ }
+#endif
+ schedule();
+ }
+ __set_current_state(TASK_RUNNING);
+ return 0;
+}
+
+static int ok_to_create_irq_threads;
+
+static int start_irq_thread(int irq, struct irq_desc *desc)
+{
+ if (desc->thread || !ok_to_create_irq_threads)
+ return 0;
+
+ desc->thread = kthread_create(do_irqd, desc, "IRQ %d", irq);
+ if (!desc->thread) {
+ printk(KERN_ERR "irqd: could not create IRQ thread %d!\n", irq);
+ return -ENOMEM;
+ }
+
+ /*
+ * An interrupt may have come in before the thread pointer was
+ * stored in desc->thread; make sure the thread gets woken up in
+ * such a case:
+ */
+ smp_mb();
+ wake_up_process(desc->thread);
+
+ return 0;
+}
+
+void __init init_hardirqs(void)
+{
+ int i;
+ ok_to_create_irq_threads = 1;
+
+ for (i = 0; i < NR_IRQS; i++) {
+ irq_desc_t *desc = irq_desc + i;
+
+ if (desc->action && !(desc->status & IRQ_NODELAY))
+ start_irq_thread(i, desc);
+ }
+}
+
+#else
+
+static int start_irq_thread(int irq, struct irq_desc *desc)
+{
+ return 0;
+}
+
+#endif
+
+void __init early_init_hardirqs(void)
+{
+ int i;
+
+ for (i = 0; i < NR_IRQS; i++)
+ init_waitqueue_head(&irq_desc[i].wait_for_handler);
+}
+
+
--- linux/kernel/irq/handle.c.orig
+++ linux/kernel/irq/handle.c
@@ -9,6 +9,7 @@
#include <linux/irq.h>
#include <linux/module.h>
#include <linux/random.h>
+#include <linux/kallsyms.h>
#include <linux/interrupt.h>
#include <linux/kernel_stat.h>
@@ -32,7 +33,7 @@ irq_desc_t irq_desc[NR_IRQS] __cacheline
[0 ... NR_IRQS-1] = {
.status = IRQ_DISABLED,
.handler = &no_irq_type,
- .lock = SPIN_LOCK_UNLOCKED
+ .lock = RAW_SPIN_LOCK_UNLOCKED
}
};
@@ -74,6 +75,32 @@ irqreturn_t no_action(int cpl, void *dev
}
/*
+ * Hack - used for development only.
+ */
+int debug_direct_keyboard = 0;
+
+int redirect_hardirq(struct irq_desc *desc)
+{
+ /*
+ * Direct execution:
+ */
+ if (!hardirq_preemption || (desc->status & IRQ_NODELAY) ||
+ !desc->thread)
+ return 0;
+
+#ifdef __i386__
+ if (debug_direct_keyboard && (desc - irq_desc == 1))
+ return 0;
+#endif
+
+ BUG_ON(!irqs_disabled());
+ if (desc->thread && desc->thread->state != TASK_RUNNING)
+ wake_up_process(desc->thread);
+
+ return 1;
+}
+
+/*
* Have got an event to handle:
*/
fastcall int handle_IRQ_event(unsigned int irq, struct pt_regs *regs,
@@ -81,30 +108,50 @@ fastcall int handle_IRQ_event(unsigned i
{
int ret, retval = 0, status = 0;
- if (!(action->flags & SA_INTERRUPT))
+ /*
+ * Unconditionally enable interrupts for threaded
+ * IRQ handlers:
+ */
+ if (!hardirq_count() || !(action->flags & SA_INTERRUPT))
local_irq_enable();
do {
+ unsigned int preempt_count = preempt_count();
+
ret = action->handler(irq, action->dev_id, regs);
+ if (preempt_count() != preempt_count) {
+ stop_trace();
+ print_symbol("BUG: unbalanced irq-handler preempt count in %s!\n", (unsigned long) action->handler);
+ printk("entered with %08x, exited with %08x.\n", preempt_count, preempt_count());
+ dump_stack();
+ preempt_count() = preempt_count;
+ }
if (ret == IRQ_HANDLED)
status |= action->flags;
retval |= ret;
action = action->next;
} while (action);
- if (status & SA_SAMPLE_RANDOM)
+ if (status & SA_SAMPLE_RANDOM) {
+ local_irq_enable();
add_interrupt_randomness(irq);
+ }
local_irq_disable();
return retval;
}
+cycles_t irq_timestamp(unsigned int irq)
+{
+ return irq_desc[irq].timestamp;
+}
+
/*
* do_IRQ handles all normal device IRQ's (the special
* SMP cross-CPU interrupts have their own specific
* handlers).
*/
-fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs)
+fastcall notrace unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs)
{
irq_desc_t *desc = irq_desc + irq;
struct irqaction * action;
@@ -124,6 +171,7 @@ fastcall unsigned int __do_IRQ(unsigned
desc->handler->end(irq);
return 1;
}
+ desc->timestamp = get_cycles();
spin_lock(&desc->lock);
desc->handler->ack(irq);
@@ -156,6 +204,12 @@ fastcall unsigned int __do_IRQ(unsigned
goto out;
/*
+ * hardirq redirection to the irqd process context:
+ */
+ if (redirect_hardirq(desc))
+ goto out_no_end;
+
+ /*
* Edge triggered interrupts need to remember
* pending events.
* This applies to any hw interrupts that allow a second
@@ -180,13 +234,13 @@ fastcall unsigned int __do_IRQ(unsigned
desc->status &= ~IRQ_PENDING;
}
desc->status &= ~IRQ_INPROGRESS;
-
out:
/*
* The ->end() handler has to deal with interrupts which got
* disabled while the handler was running.
*/
desc->handler->end(irq);
+out_no_end:
spin_unlock(&desc->lock);
return 1;
--- linux/kernel/irq/autoprobe.c.orig
+++ linux/kernel/irq/autoprobe.c
@@ -7,6 +7,7 @@
*/
#include <linux/irq.h>
+#include <linux/delay.h>
#include <linux/module.h>
#include <linux/interrupt.h>
@@ -26,7 +27,7 @@ static DECLARE_MUTEX(probe_sem);
*/
unsigned long probe_irq_on(void)
{
- unsigned long val, delay;
+ unsigned long val;
irq_desc_t *desc;
unsigned int i;
@@ -44,9 +45,10 @@ unsigned long probe_irq_on(void)
spin_unlock_irq(&desc->lock);
}
- /* Wait for longstanding interrupts to trigger. */
- for (delay = jiffies + HZ/50; time_after(delay, jiffies); )
- /* about 20ms delay */ barrier();
+ /*
+ * Wait for longstanding interrupts to trigger, 20 msec delay:
+ */
+ msleep(HZ/50);
/*
* enable any unassigned irqs
@@ -66,10 +68,9 @@ unsigned long probe_irq_on(void)
}
/*
- * Wait for spurious interrupts to trigger
+ * Wait for spurious interrupts to trigger, 100 msec delay:
*/
- for (delay = jiffies + HZ/10; time_after(delay, jiffies); )
- /* about 100ms delay */ barrier();
+ msleep(HZ/10);
/*
* Now filter out any obviously spurious interrupts
--- linux/kernel/irq/internals.h.orig
+++ linux/kernel/irq/internals.h
@@ -4,6 +4,8 @@
extern int noirqdebug;
+void recalculate_desc_flags(struct irq_desc *desc);
+
#ifdef CONFIG_PROC_FS
extern void register_irq_proc(unsigned int irq);
extern void register_handler_proc(unsigned int irq, struct irqaction *action);
--- linux/include/linux/interrupt.h.orig
+++ linux/include/linux/interrupt.h
@@ -41,7 +41,7 @@ struct irqaction {
void *dev_id;
struct irqaction *next;
int irq;
- struct proc_dir_entry *dir;
+ struct proc_dir_entry *dir, *threaded;
};
extern irqreturn_t no_action(int cpl, void *dev_id, struct pt_regs *regs);
@@ -126,6 +131,7 @@ extern void softirq_init(void);
#define __raise_softirq_irqoff(nr) do { local_softirq_pending() |= 1UL << (nr); } while (0)
extern void FASTCALL(raise_softirq_irqoff(unsigned int nr));
extern void FASTCALL(raise_softirq(unsigned int nr));
+extern void wakeup_irqd(void);
/* Tasklets --- multithreaded analogue of BHs.
--- linux/include/linux/hardirq.h.orig
+++ linux/include/linux/hardirq.h
@@ -58,11 +58,13 @@
* Are we doing bottom half or hardware interrupt processing?
* Are we in a softirq context? Interrupt context?
*/
-#define in_irq() (hardirq_count())
-#define in_softirq() (softirq_count())
-#define in_interrupt() (irq_count())
-
-#if defined(CONFIG_PREEMPT) && !defined(CONFIG_PREEMPT_BKL)
+#define in_irq() (hardirq_count() || (current->flags & PF_HARDIRQ))
+#define in_softirq() (softirq_count() || (current->flags & PF_SOFTIRQ))
+#define in_interrupt() (irq_count())
+
+#if defined(CONFIG_PREEMPT) && \
+ !defined(CONFIG_PREEMPT_BKL) && \
+ !defined(CONFIG_PREEMPT_RT)
# define in_atomic() ((preempt_count() & ~PREEMPT_ACTIVE) != kernel_locked())
#else
# define in_atomic() ((preempt_count() & ~PREEMPT_ACTIVE) != 0)
--- linux/include/linux/sched.h.orig
+++ linux/include/linux/sched.h
@@ -791,6 +942,9 @@ do { if (atomic_dec_and_test(&(tsk)->usa
#define PF_SYNCWRITE 0x00200000 /* I am doing a sync write */
#define PF_BORROWED_MM 0x00400000 /* I am a kthread doing use_mm */
#define PF_RANDOMIZE 0x00800000 /* randomize virtual address space */
+#define PF_SOFTIRQ 0x01000000 /* softirq context */
+#define PF_HARDIRQ 0x02000000 /* hardirq context */
+
/*
* Only the _current_ task can read/write to tsk->flags, but other
next prev parent reply other threads:[~2005-05-27 9:31 UTC|newest]
Thread overview: 345+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-05-23 23:14 Daniel Walker
2005-05-24 2:01 ` john cooper
2005-05-24 5:47 ` Christoph Hellwig
2005-05-24 6:45 ` Ingo Molnar
2005-05-24 8:03 ` Nick Piggin
2005-05-24 8:15 ` Ingo Molnar
2005-05-24 8:27 ` Nick Piggin
2005-05-24 9:02 ` Ingo Molnar
2005-05-24 9:14 ` Nick Piggin
2005-05-24 10:13 ` Ingo Molnar
2005-05-24 18:05 ` Daniel Walker
2005-05-24 22:41 ` Bill Huey
2005-05-24 23:44 ` Daniel Walker
2005-05-25 0:10 ` Bill Huey
2005-05-25 0:32 ` K.R. Foley
2005-05-25 0:45 ` Lee Revell
2005-05-25 1:32 ` K.R. Foley
2005-05-25 0:45 ` Daniel Walker
2005-05-25 0:59 ` Bill Huey
2005-05-25 1:02 ` Daniel Walker
2005-05-25 1:43 ` Andrew Morton
2005-05-25 2:02 ` Sven Dietrich
2005-05-25 2:20 ` Andrew Morton
2005-05-25 2:26 ` Lee Revell
2005-05-25 3:24 ` Nick Piggin
2005-05-25 3:36 ` Sven Dietrich
2005-05-25 5:05 ` Nick Piggin
2005-05-25 6:09 ` RT patch acceptance (scheduler) Bill Huey
2005-05-25 7:00 ` Nick Piggin
2005-05-25 9:27 ` Bill Huey
2005-05-25 14:50 ` Nick Piggin
2005-05-25 15:12 ` RT patch acceptance (scheduler) --- QUESTION Brian O'Mahoney
2005-05-25 15:36 ` Steven Rostedt
2005-05-25 6:05 ` RT patch acceptance Ingo Molnar
2005-05-25 18:50 ` Lee Revell
2005-05-25 3:26 ` Gene Heskett
2005-05-25 5:17 ` Nick Piggin
2005-05-25 13:20 ` Gene Heskett
2005-05-25 6:33 ` Ingo Molnar
2005-05-25 7:18 ` Nick Piggin
2005-05-25 7:46 ` Ingo Molnar
2005-05-25 10:51 ` Con Kolivas
2005-05-25 8:29 ` Giuseppe Bilotta
2005-05-25 13:23 ` Gene Heskett
2005-05-25 17:17 ` Andi Kleen
2005-05-25 17:52 ` Steven Rostedt
2005-05-25 18:00 ` Sven-Thorsten Dietrich
2005-05-26 19:32 ` Andi Kleen
2005-05-26 20:11 ` Sven-Thorsten Dietrich
2005-05-26 20:27 ` Andi Kleen
2005-05-26 20:46 ` Sven-Thorsten Dietrich
2005-05-26 23:57 ` john cooper
2005-05-26 21:28 ` Bill Huey
2005-05-26 23:44 ` john cooper
2005-05-27 5:19 ` Nick Piggin
2005-05-27 5:24 ` Nick Piggin
2005-05-27 7:18 ` Ingo Molnar
2005-05-27 8:07 ` Nick Piggin
2005-05-27 15:56 ` K.R. Foley
2005-05-28 3:59 ` Lee Revell
2005-05-27 7:20 ` Sven-Thorsten Dietrich
2005-05-27 8:17 ` Nick Piggin
2005-05-27 10:17 ` Thomas Gleixner
2005-05-27 17:46 ` Karim Yaghmour
2005-05-27 12:08 ` Bill Huey
2005-05-27 12:10 ` Ingo Molnar
2005-05-27 20:36 ` Bill Huey
2005-05-27 12:43 ` Nick Piggin
2005-05-27 23:36 ` Bill Huey
2005-05-28 3:53 ` Nick Piggin
2005-05-28 4:27 ` Lee Revell
2005-05-28 4:43 ` Nick Piggin
2005-05-28 5:53 ` Bill Huey
2005-05-28 5:45 ` Bill Huey
2005-05-28 6:49 ` Nick Piggin
2005-05-29 11:37 ` James Bruce
2005-05-29 12:23 ` Brian O'Mahoney
2005-05-30 9:37 ` Nick Piggin
2005-05-30 13:43 ` James Bruce
2005-05-30 14:21 ` Nick Piggin
2005-05-30 22:27 ` Bill Huey
2005-05-30 22:54 ` Karim Yaghmour
2005-05-30 23:05 ` Bill Huey
2005-05-30 23:29 ` Karim Yaghmour
2005-05-31 1:21 ` Nick Piggin
2005-05-31 2:09 ` Bill Huey
2005-05-31 9:12 ` James Bruce
2005-05-31 9:33 ` Nick Piggin
2005-05-31 10:23 ` Bill Huey
2005-05-31 10:48 ` James Bruce
2005-05-31 11:06 ` Nick Piggin
2005-05-31 11:14 ` Andi Kleen
2005-05-31 11:31 ` Hari N
2005-05-31 16:59 ` James Bruce
2005-05-31 12:09 ` Esben Nielsen
2005-05-31 16:18 ` Steven Rostedt
2005-05-31 16:42 ` Esben Nielsen
2005-05-31 17:11 ` Andrea Arcangeli
2005-05-31 17:42 ` Steven Rostedt
2005-05-31 17:51 ` Andrea Arcangeli
2005-05-31 18:29 ` Steven Rostedt
2005-05-31 20:54 ` Andrea Arcangeli
2005-05-31 21:22 ` Steven Rostedt
2005-05-31 21:47 ` Lee Revell
2005-05-31 22:24 ` Andrea Arcangeli
2005-05-31 23:41 ` Steven Rostedt
2005-06-01 0:50 ` Zan Lynx
2005-06-01 2:38 ` Zwane Mwaikambo
2005-05-31 22:15 ` Andrea Arcangeli
2005-05-31 22:33 ` NZG
2005-05-31 23:14 ` Bill Huey
2005-05-31 21:33 ` Bill Huey
2005-05-31 23:59 ` Steven Rostedt
2005-06-01 0:57 ` Brian O'Mahoney
2005-06-01 6:23 ` John Alvord
2005-06-01 11:41 ` Steven Rostedt
2005-06-01 0:26 ` Peter Chubb
2005-06-01 8:17 ` Esben Nielsen
2005-05-31 14:30 ` Andrea Arcangeli
2005-05-31 15:07 ` Esben Nielsen
2005-05-31 16:11 ` Andrea Arcangeli
2005-05-31 18:36 ` Paul E. McKenney
2005-05-31 20:45 ` Andrea Arcangeli
2005-06-01 1:14 ` Karim Yaghmour
2005-06-01 1:30 ` Steven Rostedt
2005-06-01 1:50 ` Karim Yaghmour
2005-06-01 2:42 ` Paul E. McKenney
2005-06-01 12:18 ` Paulo Marques
2005-06-01 13:51 ` Andrea Arcangeli
2005-06-01 14:19 ` Ingo Molnar
2005-06-01 14:32 ` Andrea Arcangeli
2005-06-01 14:39 ` Daniel Walker
2005-06-01 14:45 ` Ingo Molnar
2005-06-01 14:57 ` Andrea Arcangeli
2005-06-01 14:45 ` Esben Nielsen
2005-06-01 15:05 ` Andrea Arcangeli
2005-06-01 15:15 ` Esben Nielsen
2005-06-01 15:32 ` Andrea Arcangeli
2005-06-01 17:30 ` pi_test predicted results Daniel Walker
2005-06-01 17:58 ` Esben Nielsen
2005-06-01 15:33 ` RT patch acceptance Karim Yaghmour
2005-06-01 15:38 ` Andrea Arcangeli
2005-06-01 17:53 ` Thomas Gleixner
2005-06-01 19:22 ` Andrea Arcangeli
2005-06-01 19:34 ` Esben Nielsen
2005-06-01 19:59 ` Andrea Arcangeli
2005-06-01 20:17 ` Bill Huey
2005-06-01 20:32 ` Andrea Arcangeli
2005-06-01 20:46 ` Bill Huey
2005-06-01 21:07 ` Andrea Arcangeli
2005-06-01 21:29 ` Nicolas Pitre
2005-06-01 21:39 ` Andrea Arcangeli
2005-06-01 22:29 ` Nicolas Pitre
2005-06-01 23:44 ` Zwane Mwaikambo
2005-06-01 21:42 ` Bill Huey
2005-06-01 21:59 ` Bill Huey
2005-06-01 22:32 ` Andrea Arcangeli
2005-06-01 23:02 ` Bill Huey
2005-06-01 23:19 ` Bill Huey
2005-06-02 8:50 ` Esben Nielsen
2005-06-01 23:59 ` Bill Huey
2005-06-02 0:03 ` Bill Huey
2005-06-01 19:39 ` Ingo Molnar
2005-06-01 20:44 ` Andrea Arcangeli
2005-06-01 20:56 ` Thomas Gleixner
2005-06-01 21:09 ` Andrea Arcangeli
2005-06-01 14:46 ` Andrea Arcangeli
2005-06-01 14:56 ` Chris Friesen
2005-06-01 14:58 ` Paulo Marques
2005-06-01 15:17 ` Andrea Arcangeli
2005-06-01 15:33 ` john cooper
2005-06-01 15:43 ` Andrea Arcangeli
2005-06-01 15:19 ` Karim Yaghmour
2005-06-01 14:59 ` Esben Nielsen
2005-06-01 15:47 ` NZG
2005-06-01 15:58 ` Andrea Arcangeli
2005-06-01 17:20 ` Bill Davidsen
2005-06-01 18:19 ` Esben Nielsen
2005-06-01 15:09 ` Karim Yaghmour
2005-05-31 9:14 ` Esben Nielsen
2005-05-30 23:32 ` James Bruce
2005-05-31 1:22 ` Nick Piggin
2005-05-31 2:06 ` Lee Revell
2005-05-31 2:26 ` Lee Revell
2005-05-31 7:34 ` James Bruce
2005-05-31 19:10 ` Elladan
2005-05-30 22:10 ` Bill Huey
2005-05-30 17:53 ` Karim Yaghmour
2005-05-30 19:24 ` Esben Nielsen
2005-05-30 19:44 ` Karim Yaghmour
2005-05-30 21:44 ` Rich Walker
2005-05-30 22:45 ` Bill Huey
2005-05-30 23:03 ` Karim Yaghmour
2005-05-30 23:12 ` Bill Huey
2005-05-30 23:31 ` Karim Yaghmour
2005-05-31 0:00 ` Karim Yaghmour
2005-05-30 11:25 ` Nick Piggin
2005-05-29 1:55 ` Zwane Mwaikambo
2005-05-29 2:48 ` Lee Revell
2005-05-29 2:58 ` Zwane Mwaikambo
2005-05-29 4:08 ` Valdis.Kletnieks
2005-05-29 15:00 ` Zwane Mwaikambo
2005-05-29 17:50 ` Valdis.Kletnieks
2005-05-29 19:52 ` Zwane Mwaikambo
2005-05-29 21:16 ` Valdis.Kletnieks
2005-05-30 13:01 ` Bill Huey
2005-05-31 14:30 ` Zwane Mwaikambo
2005-05-28 6:55 ` Christoph Hellwig
2005-05-28 10:22 ` Bill Huey
2005-05-28 10:24 ` Christoph Hellwig
2005-05-28 10:36 ` Bill Huey
2005-05-28 10:34 ` Bill Huey
2005-05-28 10:50 ` Bill Huey
2005-05-28 10:48 ` Christoph Hellwig
2005-05-28 11:01 ` Bill Huey
2005-05-28 11:32 ` Bill Huey
2005-05-27 9:03 ` Thomas Gleixner
2005-05-27 9:14 ` Ingo Molnar [this message]
2005-05-27 9:22 ` Thomas Gleixner
2005-06-14 0:48 ` Daniel Walker
2005-06-14 3:29 ` Valdis.Kletnieks
2005-06-14 3:38 ` Daniel Walker
2005-05-26 20:38 ` john cooper
2005-05-26 21:00 ` Sven-Thorsten Dietrich
2005-05-26 21:23 ` john cooper
2005-05-26 20:52 ` Bill Huey
2005-05-26 21:09 ` Sven-Thorsten Dietrich
2005-05-26 21:14 ` Sven-Thorsten Dietrich
[not found] ` <20050526200424.GA27162@elte.hu>
[not found] ` <20050527123529.GD86087@muc.de>
2005-05-27 12:48 ` Ingo Molnar
2005-05-27 12:56 ` Andi Kleen
2005-05-27 13:13 ` Ingo Molnar
2005-05-27 13:31 ` Andi Kleen
2005-05-27 13:44 ` Ingo Molnar
2005-05-27 13:50 ` Ingo Molnar
2005-05-27 13:53 ` Ingo Molnar
2005-05-28 19:55 ` Andi Kleen
2005-05-28 20:57 ` Lee Revell
2005-05-27 13:56 ` Takashi Iwai
2005-05-27 14:27 ` Duncan Sands
2005-05-27 16:35 ` Andrea Arcangeli
2005-05-30 9:53 ` Andi Kleen
2005-05-30 10:33 ` Ingo Molnar
2005-05-30 10:56 ` Andi Kleen
2005-05-30 12:10 ` what is the -RT tree Ingo Molnar
2005-05-30 12:40 ` Andi Kleen
2005-05-30 13:30 ` Bill Huey
2005-05-31 16:18 ` Sven-Thorsten Dietrich
2005-05-30 11:15 ` RT patch acceptance Thomas Gleixner
2005-05-27 13:34 ` Ingo Molnar
2005-05-25 3:48 ` john cooper
2005-05-25 11:35 ` Esben Nielsen
2005-05-25 13:14 ` john cooper
2005-05-25 6:09 ` Ingo Molnar
2005-05-25 1:05 ` Bill Huey
2005-05-25 2:37 ` Karim Yaghmour
2005-05-25 2:36 ` Sven Dietrich
2005-05-25 2:56 ` Karim Yaghmour
2005-05-25 3:05 ` Chris Friesen
2005-05-25 19:24 ` Tim Bird
2005-05-25 2:38 ` Lee Revell
2005-05-25 2:58 ` Karim Yaghmour
2005-05-25 2:51 ` Sven Dietrich
2005-05-25 6:15 ` Bill Huey
2005-05-25 13:25 ` Karim Yaghmour
2005-05-25 8:16 ` Ingo Molnar
2005-05-25 13:27 ` Karim Yaghmour
2005-05-25 17:32 ` Sven-Thorsten Dietrich
2005-05-25 18:16 ` Chris Friesen
2005-05-27 2:29 ` Steven Rostedt
2005-05-25 16:01 ` Jonathan Corbet
2005-05-24 11:22 ` K.R. Foley
2005-05-24 15:21 ` Nick Piggin
2005-05-24 15:41 ` K.R. Foley
2005-05-24 17:31 ` Daniel Walker
2005-05-24 15:56 ` Ingo Molnar
2005-05-24 23:21 ` Bill Huey
2005-05-24 15:44 ` Daniel Walker
2005-05-24 15:47 ` Ingo Molnar
2005-05-24 16:27 ` john cooper
2005-05-24 18:01 ` Daniel Walker
2005-05-24 9:38 ` Esben Nielsen
2005-05-24 13:29 ` Karim Yaghmour
2005-05-24 13:58 ` Esben Nielsen
2005-05-24 14:42 ` Karim Yaghmour
2005-05-24 15:23 ` Ingo Molnar
2005-05-24 16:17 ` Karim Yaghmour
2005-05-24 21:23 ` Sven Dietrich
2005-05-24 22:31 ` Karim Yaghmour
2005-05-24 22:54 ` Sven Dietrich
2005-05-24 23:41 ` Lee Revell
[not found] ` <1116979434.2912.63.camel@mindpipe>
2005-05-25 0:48 ` Karim Yaghmour
2005-05-24 23:46 ` Lee Revell
2005-05-25 3:38 ` Gene Heskett
2005-05-24 23:49 ` Bill Huey
2005-05-25 14:26 ` Philippe Gerum
2005-05-24 14:47 ` Gene Heskett
2005-05-24 17:22 ` Philippe Gerum
2005-05-25 0:21 ` Lee Revell
2005-05-25 2:04 ` Sven Dietrich
2005-05-25 20:58 ` Tom Vier
2005-05-25 21:05 ` Esben Nielsen
2005-05-25 21:10 ` NZG
2005-05-25 21:25 ` Tom Vier
2005-05-25 21:43 ` Esben Nielsen
2005-05-25 21:45 ` Bill Huey
2005-05-25 21:43 ` Bill Huey
2005-05-25 6:55 kus Kusche Klaus
2005-05-25 7:06 ` Nick Piggin
2005-05-25 7:58 kus Kusche Klaus
2005-06-01 17:56 ` Paul G. Allen
2005-05-25 18:10 YhLu
2005-05-25 18:51 ` Andi Kleen
2005-05-30 8:25 kus Kusche Klaus
2005-05-30 9:49 ` Nick Piggin
2005-05-30 10:16 kus Kusche Klaus
2005-05-30 10:43 ` Nick Piggin
2005-05-30 11:34 ` Esben Nielsen
2005-05-30 11:58 ` Nick Piggin
2005-05-30 18:26 ` Steven Rostedt
2005-05-30 18:37 ` Esben Nielsen
2005-05-30 18:56 ` Karim Yaghmour
2005-05-30 18:58 ` Karim Yaghmour
2005-05-30 19:33 ` Esben Nielsen
2005-05-30 19:46 ` Karim Yaghmour
2005-05-30 20:00 ` Karim Yaghmour
2005-05-31 8:53 ` Esben Nielsen
2005-05-31 22:01 ` Bill Huey
2005-06-01 0:38 ` Karim Yaghmour
2005-05-30 22:34 ` Bill Huey
2005-05-30 22:49 ` Karim Yaghmour
2005-05-30 22:49 ` Bill Huey
2005-05-30 23:15 ` Karim Yaghmour
2005-05-31 0:07 ` Thomas Gleixner
2005-05-31 16:29 ` Steven Rostedt
2005-05-31 19:52 ` Lee Revell
2005-05-31 20:16 ` Steven Rostedt
2005-05-31 21:36 ` Bill Huey
2005-05-31 19:55 ` Lee Revell
2005-05-31 20:01 ` Andi Kleen
2005-05-31 20:10 ` Lee Revell
2005-05-31 20:14 ` David Lang
2005-06-01 2:06 ` Andrea Arcangeli
2005-06-01 2:13 ` David Lang
2005-05-30 16:33 ` Zwane Mwaikambo
2005-05-31 4:39 Saksena, Manas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20050527091432.GB20512@elte.hu \
--to=mingo@elte.hu \
--cc=ak@muc.de \
--cc=akpm@osdl.org \
--cc=bhuey@lnxw.com \
--cc=dwalker@mvista.com \
--cc=hch@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nickpiggin@yahoo.com.au \
--cc=sdietrich@mvista.com \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®