public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Cc: Jes Sorensen <jes@sgi.com>, Roman Zippel <zippel@linux-m68k.org>,
	Andrew Morton <akpm@osdl.org>,
	tglx@linutronix.de, karim@opersys.com,
	Paul Mundt <lethal@linux-sh.org>,
	linux-kernel@vger.kernel.org,
	Christoph Hellwig <hch@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Greg Kroah-Hartman <gregkh@suse.de>,
	Tom Zanussi <zanussi@us.ibm.com>,
	ltt-dev@shafik.org, Michel Dagenais <michel.dagenais@polymtl.ca>,
	fche@redhat.com
Subject: Re: [patch] kprobes: optimize branch placement
Date: Sat, 16 Sep 2006 22:43:42 +0200	[thread overview]
Message-ID: <20060916204342.GA5208@elte.hu> (raw)
In-Reply-To: <20060916202939.GA4520@elte.hu>


* Ingo Molnar <mingo@elte.hu> wrote:

> the patch below brings the overhead down to 420 cycles:
> 
>      sys_getpid() kprobes-speedup:       737 cycles   [ 0.341 usecs ]

the patch below reduces the kprobes overhead to 305 cycles. The current 
performance table is:

  sys_getpid() unmodified latency:    317 cycles   [ 0.146 usecs ]    0
  sys_getpid() djprobes latency:      380 cycles   [ 0.176 usecs ]  +63
  sys_getpid() kprobes latency:       815 cycles   [ 0.377 usecs ] +498
  sys_getpid() kprobes-speedup:       740 cycles   [ 0.342 usecs ] +423
  sys_getpid() kprobes-speedup2:      737 cycles   [ 0.341 usecs ] +420
  sys_getpid() kprobes-speedup3:      622 cycles   [ 0.287 usecs ] +305

the 3 speedups i did today eliminated 63% of the kprobes overhead in 
this test.

this too shows that there's lots of performance potential even in 
INT3-based kprobes.

	Ingo

--------------->
Subject: [patch] kprobes: move from struct_hlist to struct_list
From: Ingo Molnar <mingo@elte.hu>

kprobes is using hlists for no good reason: the hash-table is 64 entries 
so there's no significant RAM footprint difference. hlists are more 
complicated to handle though and cause runtime overhead and cacheline 
inefficiencies.

Signed-off-by: Ingo Molnar <mingo@elte.hu>

---
 arch/i386/kernel/kprobes.c |    7 +--
 include/linux/djprobe.h    |    3 -
 include/linux/kprobes.h    |   15 +++----
 init/main.c                |    3 +
 kernel/djprobe.c           |   23 ++++++----
 kernel/kprobes.c           |   96 +++++++++++++++++++++------------------------
 6 files changed, 75 insertions(+), 72 deletions(-)

Index: linux/arch/i386/kernel/kprobes.c
===================================================================
--- linux.orig/arch/i386/kernel/kprobes.c
+++ linux/arch/i386/kernel/kprobes.c
@@ -354,9 +354,8 @@ no_kprobe:
  */
 fastcall void *__kprobes trampoline_handler(struct pt_regs *regs)
 {
-        struct kretprobe_instance *ri = NULL;
-        struct hlist_head *head;
-        struct hlist_node *node, *tmp;
+        struct kretprobe_instance *ri = NULL, *tmp;
+        struct list_head *head;
 	unsigned long flags, orig_ret_address = 0;
 	unsigned long trampoline_address =(unsigned long)&kretprobe_trampoline;
 
@@ -376,7 +375,7 @@ fastcall void *__kprobes trampoline_hand
 	 *       real return address, and all the rest will point to
 	 *       kretprobe_trampoline
 	 */
-	hlist_for_each_entry_safe(ri, node, tmp, head, hlist) {
+	list_for_each_entry_safe(ri, tmp, head, hlist) {
                 if (ri->task != current)
 			/* another task is sharing our hash bucket */
                         continue;
Index: linux/include/linux/djprobe.h
===================================================================
--- linux.orig/include/linux/djprobe.h
+++ linux/include/linux/djprobe.h
@@ -36,7 +36,7 @@ struct djprobe_instance {
 	struct list_head plist; /* list of djprobes for multiprobe support */
 	struct arch_djprobe_stub stub;
 	struct kprobe kp;
-	struct hlist_node hlist; /* list of djprobe_instances */
+	struct list_head hlist; /* list of djprobe_instances */
 };
 #define DJPI_EMPTY(djpi)  (list_empty(&djpi->plist))
 
@@ -65,6 +65,7 @@ extern int djprobe_pre_handler(struct kp
 extern void arch_install_djprobe_instance(struct djprobe_instance *djpi);
 extern void arch_uninstall_djprobe_instance(struct djprobe_instance *djpi);
 struct djprobe_instance * __get_djprobe_instance(void *addr, int size);
+extern int init_djprobe(void);
 
 int register_djprobe(struct djprobe *p, void *addr, int size);
 void unregister_djprobe(struct djprobe *p);
Index: linux/include/linux/kprobes.h
===================================================================
--- linux.orig/include/linux/kprobes.h
+++ linux/include/linux/kprobes.h
@@ -39,7 +39,7 @@
 #include <linux/mutex.h>
 
 struct kprobe_insn_page_list {
-	struct hlist_head list;
+	struct list_head list;
 	int insn_size;		/* size of an instruction slot */
 };
 
@@ -69,7 +69,7 @@ typedef int (*kretprobe_handler_t) (stru
 				    struct pt_regs *);
 
 struct kprobe {
-	struct hlist_node hlist;
+	struct list_head hlist;
 
 	/* list of kprobes for multi-handler support */
 	struct list_head list;
@@ -145,13 +145,13 @@ struct kretprobe {
 	kretprobe_handler_t handler;
 	int maxactive;
 	int nmissed;
-	struct hlist_head free_instances;
-	struct hlist_head used_instances;
+	struct list_head free_instances;
+	struct list_head used_instances;
 };
 
 struct kretprobe_instance {
-	struct hlist_node uflist; /* either on free list or used list */
-	struct hlist_node hlist;
+	struct list_head uflist; /* either on free list or used list */
+	struct list_head hlist;
 	struct kretprobe *rp;
 	kprobe_opcode_t *ret_addr;
 	struct task_struct *task;
@@ -163,6 +163,7 @@ extern int arch_prepare_kprobe(struct kp
 extern void arch_arm_kprobe(struct kprobe *p);
 extern void arch_disarm_kprobe(struct kprobe *p);
 extern int arch_init_kprobes(void);
+extern int init_kprobes(void);
 extern void show_registers(struct pt_regs *regs);
 extern kprobe_opcode_t *get_insn_slot(void);
 extern void free_insn_slot(kprobe_opcode_t *slot);
@@ -175,7 +176,7 @@ extern int in_kprobes_functions(unsigned
 
 /* Get the kprobe at this addr (if any) - called with preemption disabled */
 struct kprobe *get_kprobe(void *addr);
-struct hlist_head * kretprobe_inst_table_head(struct task_struct *tsk);
+struct list_head * kretprobe_inst_table_head(struct task_struct *tsk);
 
 /* kprobe_running() will just return the current_kprobe on this CPU */
 static inline struct kprobe *kprobe_running(void)
Index: linux/init/main.c
===================================================================
--- linux.orig/init/main.c
+++ linux/init/main.c
@@ -530,6 +530,9 @@ asmlinkage void __init start_kernel(void
 	if (efi_enabled)
 		efi_enter_virtual_mode();
 #endif
+#ifdef CONFIG_KPROBES
+	init_kprobes();
+#endif
 	fork_init(num_physpages);
 	proc_caches_init();
 	buffer_init();
Index: linux/kernel/djprobe.c
===================================================================
--- linux.orig/kernel/djprobe.c
+++ linux/kernel/djprobe.c
@@ -47,7 +47,7 @@
 #define DJPROBE_TABLE_MASK (DJPROBE_TABLE_SIZE - 1)
 
 /* djprobe instance hash table */
-static struct hlist_head djprobe_inst_table[DJPROBE_TABLE_SIZE];
+static struct list_head djprobe_inst_table[DJPROBE_TABLE_SIZE];
 
 #define hash_djprobe(key) \
 	(((unsigned long)(key) >> DJPROBE_BLOCK_BITS) & DJPROBE_TABLE_MASK)
@@ -59,12 +59,12 @@ static atomic_t djprobe_count = ATOMIC_I
 
 /* Instruction pages for djprobe's stub code */
 static struct kprobe_insn_page_list djprobe_insn_pages = {
-	HLIST_HEAD_INIT, 0
+	LIST_HEAD_INIT(djprobe_insn_pages.list), 0
 };
 
 static inline void __free_djprobe_instance(struct djprobe_instance *djpi)
 {
-	hlist_del(&djpi->hlist);
+	list_del(&djpi->hlist);
 	if (djpi->kp.addr) {
 		unregister_kprobe(&(djpi->kp));
 	}
@@ -100,8 +100,8 @@ static inline
 	djpi->kp.pre_handler = djprobe_pre_handler;
 	arch_prepare_djprobe_instance(djpi, size);
 
-	INIT_HLIST_NODE(&djpi->hlist);
-	hlist_add_head(&djpi->hlist, &djprobe_inst_table[hash_djprobe(addr)]);
+	INIT_LIST_HEAD(&djpi->hlist);
+	list_add(&djpi->hlist, &djprobe_inst_table[hash_djprobe(addr)]);
       out:
 	return djpi;
 }
@@ -110,13 +110,12 @@ struct djprobe_instance *__kprobes __get
 							  int size)
 {
 	struct djprobe_instance *djpi;
-	struct hlist_node *node;
 	unsigned long idx, eidx;
 
 	idx = hash_djprobe(addr - ARCH_STUB_INSN_MAX);
 	eidx = ((hash_djprobe(addr + size) + 1) & DJPROBE_TABLE_MASK);
 	do {
-		hlist_for_each_entry(djpi, node, &djprobe_inst_table[idx],
+		list_for_each_entry(djpi, &djprobe_inst_table[idx],
 				     hlist) {
 			if (((long)addr <
 			     (long)djpi->kp.addr + DJPI_ARCH_SIZE(djpi))
@@ -234,13 +233,17 @@ void __kprobes unregister_djprobe(struct
 	up(&djprobe_mutex);
 }
 
-static int __init init_djprobe(void)
+int __init init_djprobe(void)
 {
+	int i;
+
+	for (i = 0; i < DJPROBE_TABLE_SIZE; i++)
+		INIT_LIST_HEAD(&djprobe_inst_table[i]);
+
 	djprobe_insn_pages.insn_size = ARCH_STUB_SIZE;
+
 	return 0;
 }
 
-__initcall(init_djprobe);
-
 EXPORT_SYMBOL_GPL(register_djprobe);
 EXPORT_SYMBOL_GPL(unregister_djprobe);
Index: linux/kernel/kprobes.c
===================================================================
--- linux.orig/kernel/kprobes.c
+++ linux/kernel/kprobes.c
@@ -46,8 +46,8 @@
 #define KPROBE_HASH_BITS 6
 #define KPROBE_TABLE_SIZE (1 << KPROBE_HASH_BITS)
 
-static struct hlist_head kprobe_table[KPROBE_TABLE_SIZE];
-static struct hlist_head kretprobe_inst_table[KPROBE_TABLE_SIZE];
+static struct list_head kprobe_table[KPROBE_TABLE_SIZE];
+static struct list_head kretprobe_inst_table[KPROBE_TABLE_SIZE];
 
 DEFINE_MUTEX(kprobe_mutex);		/* Protects kprobe_table */
 DEFINE_SPINLOCK(kretprobe_lock);	/* Protects kretprobe_inst_table */
@@ -63,14 +63,14 @@ static DEFINE_PER_CPU(struct kprobe *, k
 #define INSNS_PER_PAGE(size) (PAGE_SIZE/(size * sizeof(kprobe_opcode_t)))
 
 struct kprobe_insn_page {
-	struct hlist_node hlist;
+	struct list_head hlist;
 	kprobe_opcode_t *insns;		/* Page of instruction slots */
 	int nused;
 	char slot_used[1];
 };
 
 static struct kprobe_insn_page_list kprobe_insn_pages = {
-	HLIST_HEAD_INIT, MAX_INSN_SIZE
+	LIST_HEAD_INIT(kprobe_insn_pages.list), MAX_INSN_SIZE
 };
 
 /**
@@ -81,10 +81,10 @@ kprobe_opcode_t
 	__kprobes * __get_insn_slot(struct kprobe_insn_page_list *pages)
 {
 	struct kprobe_insn_page *kip;
-	struct hlist_node *pos;
+	struct list_head *pos;
 	int ninsns = INSNS_PER_PAGE(pages->insn_size);
 
-	hlist_for_each(pos, &pages->list) {
+	list_for_each(pos, &pages->list) {
 		kip = hlist_entry(pos, struct kprobe_insn_page, hlist);
 		if (kip->nused < ninsns) {
 			int i;
@@ -118,8 +118,8 @@ kprobe_opcode_t
 		kfree(kip);
 		return NULL;
 	}
-	INIT_HLIST_NODE(&kip->hlist);
-	hlist_add_head(&kip->hlist, &pages->list);
+	INIT_LIST_HEAD(&kip->hlist);
+	list_add(&kip->hlist, &pages->list);
 	memset(kip->slot_used, 0, ninsns);
 	kip->slot_used[0] = 1;
 	kip->nused = 1;
@@ -130,10 +130,10 @@ void __kprobes __free_insn_slot(struct k
 				kprobe_opcode_t * slot)
 {
 	struct kprobe_insn_page *kip;
-	struct hlist_node *pos;
+	struct list_head *pos;
 	int ninsns = INSNS_PER_PAGE(pages->insn_size);
 
-	hlist_for_each(pos, &pages->list) {
+	list_for_each(pos, &pages->list) {
 		kip = hlist_entry(pos, struct kprobe_insn_page, hlist);
 		if (kip->insns <= slot &&
 		    slot < kip->insns + (ninsns * pages->insn_size)) {
@@ -147,10 +147,10 @@ void __kprobes __free_insn_slot(struct k
 				 * so as not to have to set it up again the
 				 * next time somebody inserts a probe.
 				 */
-				hlist_del(&kip->hlist);
-				if (hlist_empty(&pages->list)) {
-					INIT_HLIST_NODE(&kip->hlist);
-					hlist_add_head(&kip->hlist,
+				list_del(&kip->hlist);
+				if (list_empty(&pages->list)) {
+					INIT_LIST_HEAD(&kip->hlist);
+					list_add(&kip->hlist,
 						       &pages->list);
 				} else {
 					module_free(NULL, kip->insns);
@@ -192,12 +192,11 @@ static inline void reset_kprobe_instance
  */
 struct kprobe __kprobes *get_kprobe(void *addr)
 {
-	struct hlist_head *head;
-	struct hlist_node *node;
+	struct list_head *head;
 	struct kprobe *p;
 
 	head = &kprobe_table[hash_ptr(addr, KPROBE_HASH_BITS)];
-	hlist_for_each_entry_rcu(p, node, head, hlist) {
+	list_for_each_entry_rcu(p, head, hlist) {
 		if (p->addr == addr)
 			return p;
 	}
@@ -283,9 +282,9 @@ void __kprobes kprobes_inc_nmissed_count
 /* Called with kretprobe_lock held */
 struct kretprobe_instance __kprobes *get_free_rp_inst(struct kretprobe *rp)
 {
-	struct hlist_node *node;
 	struct kretprobe_instance *ri;
-	hlist_for_each_entry(ri, node, &rp->free_instances, uflist)
+
+	list_for_each_entry(ri, &rp->free_instances, uflist)
 		return ri;
 	return NULL;
 }
@@ -294,9 +293,9 @@ struct kretprobe_instance __kprobes *get
 static struct kretprobe_instance __kprobes *get_used_rp_inst(struct kretprobe
 							      *rp)
 {
-	struct hlist_node *node;
 	struct kretprobe_instance *ri;
-	hlist_for_each_entry(ri, node, &rp->used_instances, uflist)
+
+	list_for_each_entry(ri, &rp->used_instances, uflist)
 		return ri;
 	return NULL;
 }
@@ -308,35 +307,35 @@ void __kprobes add_rp_inst(struct kretpr
 	 * Remove rp inst off the free list -
 	 * Add it back when probed function returns
 	 */
-	hlist_del(&ri->uflist);
+	list_del(&ri->uflist);
 
 	/* Add rp inst onto table */
-	INIT_HLIST_NODE(&ri->hlist);
-	hlist_add_head(&ri->hlist,
+	INIT_LIST_HEAD(&ri->hlist);
+	list_add(&ri->hlist,
 			&kretprobe_inst_table[hash_ptr(ri->task, KPROBE_HASH_BITS)]);
 
 	/* Also add this rp inst to the used list. */
-	INIT_HLIST_NODE(&ri->uflist);
-	hlist_add_head(&ri->uflist, &ri->rp->used_instances);
+	INIT_LIST_HEAD(&ri->uflist);
+	list_add(&ri->uflist, &ri->rp->used_instances);
 }
 
 /* Called with kretprobe_lock held */
 void __kprobes recycle_rp_inst(struct kretprobe_instance *ri)
 {
 	/* remove rp inst off the rprobe_inst_table */
-	hlist_del(&ri->hlist);
+	list_del(&ri->hlist);
 	if (ri->rp) {
 		/* remove rp inst off the used list */
-		hlist_del(&ri->uflist);
+		list_del(&ri->uflist);
 		/* put rp inst back onto the free list */
-		INIT_HLIST_NODE(&ri->uflist);
-		hlist_add_head(&ri->uflist, &ri->rp->free_instances);
+		INIT_LIST_HEAD(&ri->uflist);
+		list_add(&ri->uflist, &ri->rp->free_instances);
 	} else
 		/* Unregistering */
 		kfree(ri);
 }
 
-struct hlist_head __kprobes *kretprobe_inst_table_head(struct task_struct *tsk)
+struct list_head __kprobes *kretprobe_inst_table_head(struct task_struct *tsk)
 {
 	return &kretprobe_inst_table[hash_ptr(tsk, KPROBE_HASH_BITS)];
 }
@@ -349,14 +348,13 @@ struct hlist_head __kprobes *kretprobe_i
  */
 void __kprobes kprobe_flush_task(struct task_struct *tk)
 {
-        struct kretprobe_instance *ri;
-        struct hlist_head *head;
-	struct hlist_node *node, *tmp;
+        struct kretprobe_instance *ri, *tmp;
+        struct list_head *head;
 	unsigned long flags = 0;
 
 	spin_lock_irqsave(&kretprobe_lock, flags);
         head = kretprobe_inst_table_head(tk);
-        hlist_for_each_entry_safe(ri, node, tmp, head, hlist) {
+        list_for_each_entry_safe(ri, tmp, head, hlist) {
                 if (ri->task == tk)
                         recycle_rp_inst(ri);
         }
@@ -367,7 +365,7 @@ static inline void free_rp_inst(struct k
 {
 	struct kretprobe_instance *ri;
 	while ((ri = get_free_rp_inst(rp)) != NULL) {
-		hlist_del(&ri->uflist);
+		list_del(&ri->uflist);
 		kfree(ri);
 	}
 }
@@ -416,7 +414,7 @@ static inline void add_aggr_kprobe(struc
 	INIT_LIST_HEAD(&ap->list);
 	list_add_rcu(&p->list, &ap->list);
 
-	hlist_replace_rcu(&p->hlist, &ap->hlist);
+	list_replace_rcu(&p->hlist, &ap->hlist);
 }
 
 /*
@@ -499,8 +497,8 @@ static int __kprobes __register_kprobe(s
 	if ((ret = arch_prepare_kprobe(p)) != 0)
 		goto out;
 
-	INIT_HLIST_NODE(&p->hlist);
-	hlist_add_head_rcu(&p->hlist,
+	INIT_LIST_HEAD(&p->hlist);
+	list_add_rcu(&p->hlist,
 		       &kprobe_table[hash_ptr(p->addr, KPROBE_HASH_BITS)]);
 
   	arch_arm_kprobe(p);
@@ -551,7 +549,7 @@ valid_p:
 		(p->list.prev == &old_p->list))) {
 		/* Only probe on the hash list */
 		arch_disarm_kprobe(p);
-		hlist_del_rcu(&old_p->hlist);
+		list_del_rcu(&old_p->hlist);
 		cleanup_p = 1;
 	} else {
 		list_del_rcu(&p->list);
@@ -632,16 +630,16 @@ int __kprobes register_kretprobe(struct 
 		rp->maxactive = NR_CPUS;
 #endif
 	}
-	INIT_HLIST_HEAD(&rp->used_instances);
-	INIT_HLIST_HEAD(&rp->free_instances);
+	INIT_LIST_HEAD(&rp->used_instances);
+	INIT_LIST_HEAD(&rp->free_instances);
 	for (i = 0; i < rp->maxactive; i++) {
 		inst = kmalloc(sizeof(struct kretprobe_instance), GFP_KERNEL);
 		if (inst == NULL) {
 			free_rp_inst(rp);
 			return -ENOMEM;
 		}
-		INIT_HLIST_NODE(&inst->uflist);
-		hlist_add_head(&inst->uflist, &rp->free_instances);
+		INIT_LIST_HEAD(&inst->uflist);
+		list_add(&inst->uflist, &rp->free_instances);
 	}
 
 	rp->nmissed = 0;
@@ -671,21 +669,21 @@ void __kprobes unregister_kretprobe(stru
 	spin_lock_irqsave(&kretprobe_lock, flags);
 	while ((ri = get_used_rp_inst(rp)) != NULL) {
 		ri->rp = NULL;
-		hlist_del(&ri->uflist);
+		list_del(&ri->uflist);
 	}
 	spin_unlock_irqrestore(&kretprobe_lock, flags);
 	free_rp_inst(rp);
 }
 
-static int __init init_kprobes(void)
+int __init init_kprobes(void)
 {
 	int i, err = 0;
 
 	/* FIXME allocate the probe table, currently defined statically */
 	/* initialize all list heads */
 	for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
-		INIT_HLIST_HEAD(&kprobe_table[i]);
-		INIT_HLIST_HEAD(&kretprobe_inst_table[i]);
+		INIT_LIST_HEAD(&kprobe_table[i]);
+		INIT_LIST_HEAD(&kretprobe_inst_table[i]);
 	}
 
 	err = arch_init_kprobes();
@@ -695,8 +693,6 @@ static int __init init_kprobes(void)
 	return err;
 }
 
-__initcall(init_kprobes);
-
 EXPORT_SYMBOL_GPL(register_kprobe);
 EXPORT_SYMBOL_GPL(unregister_kprobe);
 EXPORT_SYMBOL_GPL(register_jprobe);

  reply	other threads:[~2006-09-16 20:52 UTC|newest]

Thread overview: 277+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-09-14  3:38 [PATCH 0/11] LTTng-core (basic tracing infrastructure) 0.5.108 Mathieu Desnoyers
2006-09-14 11:27 ` Ingo Molnar
2006-09-14 13:40   ` Roman Zippel
2006-09-14 13:55     ` Ingo Molnar
2006-09-14 14:33       ` Roman Zippel
2006-09-14 15:26         ` Michel Dagenais
2006-09-14 17:48           ` Ingo Molnar
2006-09-15 15:04             ` Mathieu Desnoyers
2006-09-14 18:08           ` Nick Piggin
2006-09-14 18:38             ` Karim Yaghmour
2006-09-14 17:13         ` Ingo Molnar
2006-09-14 17:55           ` Roman Zippel
2006-09-14 18:15             ` Ingo Molnar
2006-09-14 18:35               ` Mathieu Desnoyers
2006-09-14 18:54               ` Karim Yaghmour
2006-09-15  9:20                 ` Jes Sorensen
2006-09-15 12:38                   ` Karim Yaghmour
2006-09-15 12:32                     ` Jes Sorensen
2006-09-15 14:09                       ` Karim Yaghmour
2006-09-15 14:30                         ` Jes Sorensen
2006-09-15 15:12                           ` Karim Yaghmour
2006-09-16 10:41                             ` Jes Sorensen
2006-09-16 15:28                               ` Karim Yaghmour
2006-09-18  8:57                                 ` Jes Sorensen
2006-09-18 14:48                                   ` Ingo Molnar
2006-09-18 15:37                                     ` Karim Yaghmour
2006-09-15 13:20                     ` Paul Mundt
2006-09-15 13:41                       ` Roman Zippel
2006-09-15 13:44                         ` Jes Sorensen
2006-09-15 14:03                           ` Roman Zippel
2006-09-15 14:37                             ` Alan Cox
2006-09-15 14:34                               ` Roman Zippel
2006-09-15 13:57                         ` Paul Mundt
2006-09-15 14:17                           ` Karim Yaghmour
2006-09-15 14:13                             ` Jes Sorensen
2006-09-15 14:31                               ` Karim Yaghmour
2006-09-15 14:28                                 ` Paul Mundt
2006-09-15 14:46                                   ` Martin J. Bligh
2006-09-15 15:22                                     ` Alan Cox
2006-09-15 15:47                                       ` Martin J. Bligh
2006-09-15 14:51                                   ` Karim Yaghmour
2006-09-15 15:00                                     ` Thomas Gleixner
2006-09-15 15:28                                       ` Karim Yaghmour
2006-09-15 18:16                                       ` Andrew Morton
2006-09-15 18:19                                         ` Ingo Molnar
2006-09-15 19:26                                           ` Karim Yaghmour
2006-09-15 19:43                                           ` Roman Zippel
2006-09-15 20:05                                             ` Ingo Molnar
2006-09-15 20:22                                               ` Mathieu Desnoyers
2006-09-15 21:08                                                 ` Jose R. Santos
2006-09-15 21:25                                                   ` Mathieu Desnoyers
2006-09-15 22:02                                                     ` Jose R. Santos
2006-09-15 22:03                                                   ` Ingo Molnar
2006-09-15 22:32                                                     ` Karim Yaghmour
2006-09-15 22:43                                                       ` Ingo Molnar
2006-09-15 23:33                                                         ` Karim Yaghmour
2006-09-15 23:52                                                           ` Ingo Molnar
2006-09-16  2:24                                                             ` Karim Yaghmour
2006-09-15 23:53                                                           ` Ingo Molnar
2006-09-16  2:51                                                             ` Karim Yaghmour
2006-09-15 22:59                                                     ` Frank Ch. Eigler
2006-09-15 23:40                                                       ` Karim Yaghmour
2006-09-15 23:17                                                     ` Jose R. Santos
2006-09-15 21:32                                                 ` Ingo Molnar
2006-09-15 21:58                                                   ` Mathieu Desnoyers
2006-09-15 22:19                                                     ` Ingo Molnar
2006-09-15 22:45                                                       ` Karim Yaghmour
2006-09-16  9:59                                                 ` Jes Sorensen
2006-09-16 17:24                                                   ` Mathieu Desnoyers
2006-09-16 17:35                                                     ` Ingo Molnar
2006-09-16 17:56                                                       ` Mathieu Desnoyers
2006-09-16 19:10                                                         ` Ingo Molnar
2006-09-16 19:37                                                           ` Ingo Molnar
2006-09-16 20:29                                                             ` [patch] kprobes: optimize branch placement Ingo Molnar
2006-09-16 20:43                                                               ` Ingo Molnar [this message]
2006-09-16 21:44                                                                 ` Karim Yaghmour
2006-09-16 22:57                                                                   ` Andrew Morton
2006-09-16 23:24                                                                     ` Ingo Molnar
2006-09-17  2:44                                                                       ` Karim Yaghmour
2006-09-17  1:59                                                                     ` Karim Yaghmour
2006-09-17 12:15                                                                       ` Mike Galbraith
2006-09-16 22:56                                                                 ` Andrew Morton
2006-09-16 23:30                                                                   ` Ingo Molnar
2006-09-18 13:52                                                                     ` Ananth N Mavinakayanahalli
2006-09-16 22:55                                                               ` Andrew Morton
2006-09-17 10:13                                                             ` [PATCH 0/11] LTTng-core (basic tracing infrastructure) 0.5.108 Frederik Deweerdt
2006-09-17 14:00                                                               ` Ingo Molnar
2006-09-16 19:51                                                           ` Karim Yaghmour
2006-09-16 23:40                                                         ` Ingo Molnar
2006-09-17  5:33                                                           ` Mathieu Desnoyers
2006-09-16 18:11                                                       ` Karim Yaghmour
2006-09-16 17:44                                                         ` Ingo Molnar
2006-09-16 18:15                                                           ` Karim Yaghmour
2006-09-18  8:18                                                             ` Jes Sorensen
2006-09-16 17:55                                                     ` Karim Yaghmour
2006-09-18  8:21                                                       ` Jes Sorensen
2006-09-18  8:33                                                     ` Jes Sorensen
2006-09-18 15:01                                                       ` Mathieu Desnoyers
2006-09-16 17:30                                                   ` Mathieu Desnoyers
2006-09-18  8:15                                                     ` Jes Sorensen
2006-09-18 14:53                                                       ` Mathieu Desnoyers
2006-09-18 15:17                                                         ` Ingo Molnar
2006-09-18 16:54                                                           ` Mathieu Desnoyers
2006-09-15 21:12                                               ` Roman Zippel
2006-09-15 21:08                                                 ` Ingo Molnar
2006-09-15 20:13                                           ` Andrew Morton
2006-09-15 21:49                                             ` Jose R. Santos
2006-09-16 10:19                                             ` Jes Sorensen
2006-09-16 16:05                                               ` Karim Yaghmour
2006-09-17  4:54                                                 ` Ganesan Rajagopal
2006-09-18  8:13                                                 ` Jes Sorensen
2006-09-18 14:46                                                   ` Mathieu Desnoyers
2006-09-18 17:06                                                   ` Martin Bligh
2006-09-20 14:17                                                     ` Jes Sorensen
2006-09-15 19:35                                         ` Thomas Gleixner
2006-09-15 19:40                                           ` Ingo Molnar
2006-09-15 19:56                                           ` Karim Yaghmour
2006-09-15 20:23                                             ` Thomas Gleixner
2006-09-15 20:40                                               ` Roman Zippel
2006-09-15 20:48                                                 ` Ingo Molnar
2006-09-15 21:17                                                   ` Karim Yaghmour
2006-09-15 21:15                                                     ` Ingo Molnar
2006-09-15 21:56                                                       ` Karim Yaghmour
2006-09-15 21:27                                                   ` Roman Zippel
2006-09-15 21:51                                                     ` Ingo Molnar
2006-09-15 22:15                                                       ` Karim Yaghmour
2006-09-15 22:53                                                       ` Roman Zippel
2006-09-15 23:14                                                         ` Ingo Molnar
2006-09-15 23:49                                                           ` Nicholas Miell
2006-09-15 23:57                                                             ` Ingo Molnar
2006-09-16  0:41                                                               ` Nicholas Miell
2006-09-16  0:31                                                           ` Roman Zippel
2006-09-16  8:20                                                             ` Ingo Molnar
2006-09-16  8:21                                                             ` Ingo Molnar
2006-09-16  8:21                                                             ` Ingo Molnar
2006-09-16  8:22                                                             ` Ingo Molnar
2006-09-16 19:58                                                               ` Roman Zippel
2006-09-16 22:50                                                                 ` Ingo Molnar
2006-09-16 23:00                                                                 ` Ingo Molnar
2006-09-17  1:15                                                                   ` Roman Zippel
2006-09-17  8:42                                                                     ` Ingo Molnar
2006-09-17 15:16                                                                       ` Roman Zippel
2006-09-17 15:25                                                                         ` Ingo Molnar
2006-09-17 16:02                                                                           ` Roman Zippel
2006-09-17 16:45                                                                             ` Ingo Molnar
2006-09-17 16:59                                                                             ` Nick Piggin
2006-09-17 17:26                                                                               ` Roman Zippel
2006-09-17 17:56                                                                                 ` Nick Piggin
2006-09-17 18:59                                                                                   ` Roman Zippel
2006-09-17 21:23                                                                                     ` Ingo Molnar
2006-09-17 21:52                                                                                       ` Roman Zippel
2006-09-17 22:27                                                                                         ` Ingo Molnar
2006-09-17 21:40                                                                                     ` Ingo Molnar
2006-09-18  8:43                                                                                     ` Jes Sorensen
2006-09-17 21:32                                                                                   ` Ingo Molnar
2006-09-17 19:23                                                                                 ` Ingo Molnar
2006-09-17 19:45                                                                                   ` Roman Zippel
2006-09-17 20:56                                                                                     ` Ingo Molnar
2006-09-17 21:36                                                                                       ` Roman Zippel
2006-09-17 22:13                                                                                         ` Ingo Molnar
2006-09-16 23:14                                                                 ` Ingo Molnar
2006-09-17 14:19                                                                   ` Frank Ch. Eigler
2006-09-17 15:31                                                                     ` Ingo Molnar
2006-09-17 17:15                                                                       ` Mathieu Desnoyers
     [not found]                                                                   ` <y0mu036eglz.fsf@ton.toronto.redhat.com>
2006-09-17 15:00                                                                     ` Ingo Molnar
2006-09-16  8:23                                                             ` Ingo Molnar
2006-09-16  8:23                                                             ` Ingo Molnar
2006-09-16  8:23                                                             ` Ingo Molnar
2006-09-15 21:05                                               ` Karim Yaghmour
2006-09-15 21:17                                                 ` Thomas Gleixner
2006-09-15 21:31                                                   ` Karim Yaghmour
2006-09-15 20:00                                         ` Mathieu Desnoyers
2006-09-15 20:27                                           ` Jose R. Santos
2006-09-15 20:37                                         ` Alan Cox
2006-09-15 20:26                                           ` Mathieu Desnoyers
2006-09-15 20:51                                           ` Karim Yaghmour
2006-09-17 17:53                                           ` Mathieu Desnoyers
2006-09-17 19:35                                           ` printk instrumentation with LTTng Mathieu Desnoyers
2006-09-15 15:24                                     ` [PATCH 0/11] LTTng-core (basic tracing infrastructure) 0.5.108 Alan Cox
2006-09-15 15:23                                       ` Karim Yaghmour
2006-09-15 14:39                                 ` Jes Sorensen
2006-09-15 15:04                                   ` Karim Yaghmour
2006-09-14 19:40               ` Tim Bird
2006-09-14 20:00                 ` Ingo Molnar
2006-09-14 20:46                   ` Karim Yaghmour
2006-09-19 12:05                     ` Christoph Hellwig
2006-09-14 21:02                   ` Roman Zippel
2006-09-15 11:40                 ` Alan Cox
2006-09-15 11:46                   ` Roman Zippel
2006-09-15 12:38                     ` Alan Cox
2006-09-15 12:39                       ` Roman Zippel
2006-09-15 13:41                         ` Alan Cox
2006-09-15 13:34                           ` Roman Zippel
2006-09-15 14:41                             ` Alan Cox
2006-09-15 14:35                               ` Karim Yaghmour
2006-09-15 14:58                                 ` Alan Cox
2006-09-15 14:57                                   ` Karim Yaghmour
2006-09-15 17:49                                     ` Andrew Morton
2006-09-15 18:20                                       ` Karim Yaghmour
2006-09-15 17:01                                   ` Tim Bird
2006-09-15 17:08                                   ` Frank Ch. Eigler
2006-09-15 17:57                                     ` Andrew Morton
2006-09-15 18:31                                     ` Alan Cox
2006-09-15 18:12                                       ` Ingo Molnar
2006-09-15 19:10                                         ` Roman Zippel
2006-09-15 19:10                                           ` Ingo Molnar
2006-09-15 20:05                                           ` Thomas Gleixner
2006-09-15 20:35                                             ` Roman Zippel
2006-09-15 21:44                                             ` Tim Bird
2006-09-19 12:29                                           ` Christoph Hellwig
2006-09-19 13:17                                             ` Roman Zippel
2006-09-15 18:24                                       ` Frank Ch. Eigler
2006-09-15 18:23                                         ` Ingo Molnar
2006-09-15 18:18                                   ` Martin Bligh
2006-09-15 18:10                           ` Jose R. Santos
2006-09-15 19:49                             ` Mathieu Desnoyers
2006-09-15 20:54                               ` Jose R. Santos
2006-09-15 21:42                                 ` Karim Yaghmour
2006-09-15 21:46                                 ` Mathieu Desnoyers
2006-09-19 15:05                                   ` Jose R. Santos
2006-09-19 15:30                                     ` Mathieu Desnoyers
2006-09-19 16:39                                       ` Jose R. Santos
2006-09-19 18:03                                         ` Mathieu Desnoyers
2006-09-15 17:45                       ` Andrew Morton
2006-09-15 18:16                         ` Karim Yaghmour
2006-09-15 19:20                           ` Jose R. Santos
2006-09-15 19:59                           ` Andrew Morton
2006-09-15 20:24                             ` Karim Yaghmour
2006-09-15 20:25                               ` Thomas Gleixner
2006-09-14 19:47               ` Roman Zippel
2006-09-14 20:24                 ` Ingo Molnar
2006-09-14 20:54                   ` Roman Zippel
2006-09-14 21:08                     ` Daniel Walker
2006-09-14 21:30                       ` Roman Zippel
2006-09-14 22:15                         ` Ingo Molnar
2006-09-14 23:39                           ` Roman Zippel
2006-09-14 23:43                             ` Ingo Molnar
2006-09-15  0:27                               ` Roman Zippel
2006-09-15  1:47                   ` Mathieu Desnoyers
2006-09-15  5:47                     ` Vara Prasad
2006-09-14 18:12           ` Karim Yaghmour
2006-09-14 20:25           ` Martin Bligh
2006-09-14 20:34             ` Ingo Molnar
2006-09-14 20:55               ` Martin Bligh
2006-09-14 21:31                 ` Ingo Molnar
2006-09-14 22:25                   ` Martin Bligh
2006-09-14 22:36                     ` Ingo Molnar
2006-09-14 22:59                       ` Martin Bligh
2006-09-14 23:19                         ` Ingo Molnar
2006-09-15  0:19                           ` Nicholas Miell
2006-09-15  1:04                           ` Martin J. Bligh
2006-09-15 12:38                             ` Ingo Molnar
2006-09-15  7:00                         ` Vara Prasad
2006-09-15 15:37                       ` Michel Dagenais
2006-09-19 12:08                 ` Christoph Hellwig
2006-09-14 21:07               ` Roman Zippel
2006-09-15  9:29               ` Jes Sorensen
2006-09-14 17:51         ` Karim Yaghmour
2006-09-14 15:19       ` Mathieu Desnoyers
2006-09-14 19:39         ` Frank Ch. Eigler
2006-09-15 17:13         ` Jose R. Santos
2006-09-14 15:02   ` Mathieu Desnoyers
2006-09-14 15:14   ` Martin J. Bligh
2006-09-14 17:43     ` Ingo Molnar
2006-09-14 18:25       ` Karim Yaghmour
2006-09-14 20:03       ` Martin Bligh
2006-09-14 20:14         ` Ingo Molnar
2006-09-14 20:40           ` Martin Bligh
2006-09-14 21:05           ` Michel Dagenais
2006-09-14 22:23             ` Ingo Molnar
2006-09-14 22:46               ` Martin Bligh
2006-09-14 22:56                 ` Ingo Molnar
2006-09-14 19:03     ` grundig
2006-09-14 19:21       ` Karim Yaghmour
2006-09-14 19:48     ` Frank Ch. Eigler
2006-09-15 16:32       ` Jose R. Santos
2006-09-19 11:59   ` Christoph Hellwig

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=20060916204342.GA5208@elte.hu \
    --to=mingo@elte.hu \
    --cc=akpm@osdl.org \
    --cc=fche@redhat.com \
    --cc=gregkh@suse.de \
    --cc=hch@infradead.org \
    --cc=jes@sgi.com \
    --cc=karim@opersys.com \
    --cc=lethal@linux-sh.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ltt-dev@shafik.org \
    --cc=mathieu.desnoyers@polymtl.ca \
    --cc=michel.dagenais@polymtl.ca \
    --cc=mingo@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=zanussi@us.ibm.com \
    --cc=zippel@linux-m68k.org \
    /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