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);
next prev parent 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