/*
+ * lttng-statedump.c
+ *
* Linux Trace Toolkit Next Generation Kernel State Dump
*
* Copyright 2005 Jean-Hugues Deschenes <jean-hugues.deschenes@polymtl.ca>
* Copyright 2006-2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
*
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; only
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
* Changes:
* Eric Clement: Add listing of network IP interface
* 2006, 2007 Mathieu Desnoyers Fix kernel threads
* Various updates
- *
- * Dual LGPL v2.1/GPL v2 license.
*/
#include <linux/init.h>
return 0;
}
+#if 0
+/*
+ * FIXME: we cannot take a mmap_sem while in a RCU read-side critical section
+ * (scheduling in atomic). Normally, the tasklist lock protects this kind of
+ * iteration, but it is not exported to modules.
+ */
static
void lttng_enumerate_task_vm_maps(struct lttng_session *session,
struct task_struct *p)
rcu_read_unlock();
return 0;
}
+#endif
#ifdef CONFIG_GENERIC_HARDIRQS
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39))
+#define irq_desc_get_chip(desc) get_irq_desc_chip(desc)
+#endif
+
static
void lttng_list_interrupts(struct lttng_session *session)
{
trace_lttng_statedump_start(session);
lttng_enumerate_process_states(session);
lttng_enumerate_file_descriptors(session);
- lttng_enumerate_vm_maps(session);
+ /* FIXME lttng_enumerate_vm_maps(session); */
lttng_list_interrupts(session);
lttng_enumerate_network_ip_interface(session);
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");