projects
/
lttng-modules.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: statedump hang due to incorrect wait/wakeup use
[lttng-modules.git]
/
lttng-statedump-impl.c
diff --git
a/lttng-statedump-impl.c
b/lttng-statedump-impl.c
index 89b55e53c369abeae1b3d5a34d6ee824b528b58f..765fcea852279f211db220856d83358a6748b14a 100644
(file)
--- a/
lttng-statedump-impl.c
+++ b/
lttng-statedump-impl.c
@@
-48,6
+48,7
@@
#include "lttng-events.h"
#include "wrapper/irqdesc.h"
#include "lttng-events.h"
#include "wrapper/irqdesc.h"
+#include "wrapper/spinlock.h"
#ifdef CONFIG_GENERIC_HARDIRQS
#include <linux/irq.h>
#ifdef CONFIG_GENERIC_HARDIRQS
#include <linux/irq.h>
@@
-255,12
+256,12
@@
void lttng_list_interrupts(struct lttng_session *session)
irq_desc_get_chip(desc)->name ? : "unnamed_irq_chip";
local_irq_save(flags);
irq_desc_get_chip(desc)->name ? : "unnamed_irq_chip";
local_irq_save(flags);
-
raw
_spin_lock(&desc->lock);
+
wrapper_desc
_spin_lock(&desc->lock);
for (action = desc->action; action; action = action->next) {
trace_lttng_statedump_interrupt(session,
irq, irq_chip_name, action);
}
for (action = desc->action; action; action = action->next) {
trace_lttng_statedump_interrupt(session,
irq, irq_chip_name, action);
}
-
raw
_spin_unlock(&desc->lock);
+
wrapper_desc
_spin_unlock(&desc->lock);
local_irq_restore(flags);
}
#undef irq_to_desc
local_irq_restore(flags);
}
#undef irq_to_desc
@@
-290,6
+291,7
@@
void lttng_statedump_process_ns(struct lttng_session *session,
do {
trace_lttng_statedump_process_state(session,
p, type, mode, submode, status, pid_ns);
do {
trace_lttng_statedump_process_state(session,
p, type, mode, submode, status, pid_ns);
+ pid_ns = pid_ns->parent;
} while (pid_ns);
} else {
trace_lttng_statedump_process_state(session,
} while (pid_ns);
} else {
trace_lttng_statedump_process_state(session,
@@
-395,7
+397,7
@@
int do_lttng_statedump(struct lttng_session *session)
schedule_delayed_work_on(cpu, &cpu_work[cpu], 0);
}
/* Wait for all threads to run */
schedule_delayed_work_on(cpu, &cpu_work[cpu], 0);
}
/* Wait for all threads to run */
-
__
wait_event(statedump_wq, (atomic_read(&kernel_threads_to_run) != 0));
+ wait_event(statedump_wq, (atomic_read(&kernel_threads_to_run) != 0));
put_online_cpus();
/* Our work is done */
printk(KERN_DEBUG "LTT state dump end\n");
put_online_cpus();
/* Our work is done */
printk(KERN_DEBUG "LTT state dump end\n");
This page took
0.024021 seconds
and
4
git commands to generate.