#obj-m += ltt-facility-loader-tests.o
# #obj-m += test-time-probe.o
#obj-m += test-time-probe2.o
- obj-m += test-compact.o
+ #obj-m += test-compact.o
# obj-m += ltt-facility-loader-compact.o
# obj-m += test-instrument-size-small.o
# obj-m += test-instrument-size-med.o
# obj-m += test-instrument-size-big.o
# obj-m += test-printk-effect.o
- obj-m += ltt-probe-tests.o
- obj-m += test-time-probe3.o
+ #obj-m += ltt-probe-tests.o
+ #obj-m += test-time-probe3.o
endif
- obj-m += probe-example.o
- obj-m += marker-example.o
+ #obj-m += cond_call.o
+ #obj-m += cond_call2.o
+ obj-m += test-irq-latency.o
+ #obj-m += list-mark.o
+ #obj-m += test-rodata.o
+ #obj-m += test-tlb.o
+ #obj-m += test-init.o
+ #obj-m += probe-example.o
+ #obj-m += marker-example.o
# obj-m += test-async-tsc.o
- obj-m += test-tsc-sync.o
- obj-m += test-tsc.o
+ #obj-m += test-tsc-sync.o
+ #obj-m += test-tsc.o
# obj-m += test-hpet.o
#obj-m += test-debugfs.o
# obj-m += test-mod.o
#obj-m += test-ser.o
# obj-m += test-cmpxchg.o
# obj-m += test-cmpxchg-nolock.o
+ obj-m += test-cmpxchg-nolock2.o
# obj-m += test-spinlock.o
# obj-m += test-inc.o
# obj-m += test-inc-nolock.o
{
int i;
- MARK(subsystem_event, "%d %s %*.*r", 123, "example string",
- sizeof(current), __alignof__(current), current);
+ trace_mark(subsystem_event, "%d %s", 123, "example string");
for (i=0; i<10; i++) {
- MARK(subsystem_eventb, MARK_NOARGS);
+ trace_mark(subsystem_eventb, MARK_NOARGS);
}
return -EPERM;
}
/* Declare args */
unsigned int value;
const char *mystr;
- int task_size, task_alignment;
- struct task_struct *task;
/* Assign args */
va_start(ap, format);
value = va_arg(ap, typeof(value));
mystr = va_arg(ap, typeof(mystr));
- task_size = va_arg(ap, typeof(task_size));
- task_alignment = va_arg(ap, typeof(task_alignment));
- task = va_arg(ap, typeof(task));
/* Call printk */
- printk("Value %u, string %s, current ptr %p\n", value, mystr, current);
+ printk("Value %u, string %s\n", value, mystr);
/* or count, check rights, serialize data in a buffer */
static struct probe_data probe_array[] =
{
{ .name = "subsystem_event",
- .format = "%d %s %*.*r",
+ .format = "%d %s",
.probe_func = probe_subsystem_event },
{ .name = "subsystem_eventb",
.format = MARK_NOARGS,
--- /dev/null
+/* test-cmpxchg-nolock.c
+ *
+ * Compare local cmpxchg with irq disable / enable.
+ */
+
+
+#include <linux/jiffies.h>
+#include <linux/compiler.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/calc64.h>
+#include <asm/timex.h>
+#include <asm/system.h>
+
+#define NR_LOOPS 20000
+
+int test_val;
+
+static void do_test_cmpxchg(void)
+{
+ int ret;
+ long flags;
+ unsigned int i;
+ cycles_t time1, time2, time;
+ long rem;
+
+ local_irq_save(flags);
+ preempt_disable();
+ time1 = get_cycles();
+ for (i = 0; i < NR_LOOPS; i++) {
+ ret = cmpxchg_local(&test_val, 0, 0);
+ }
+ time2 = get_cycles();
+ local_irq_restore(flags);
+ preempt_enable();
+ time = time2 - time1;
+
+ printk(KERN_ALERT "test results: time for non locked cmpxchg\n");
+ printk(KERN_ALERT "number of loops: %d\n", NR_LOOPS);
+ printk(KERN_ALERT "total time: %llu\n", time);
+ time = div_long_long_rem(time, NR_LOOPS, &rem);
+ printk(KERN_ALERT "-> non locked cmpxchg takes %llu cycles\n", time);
+ printk(KERN_ALERT "test end\n");
+}
+
+/*
+ * This test will have a higher standard deviation due to incoming interrupts.
+ */
+static void do_test_enable_int(void)
+{
+ long flags;
+ unsigned int i;
+ cycles_t time1, time2, time;
+ long rem;
+
+ local_irq_save(flags);
+ preempt_disable();
+ time1 = get_cycles();
+ for (i = 0; i < NR_LOOPS; i++) {
+ local_irq_restore(flags);
+ }
+ time2 = get_cycles();
+ local_irq_restore(flags);
+ preempt_enable();
+ time = time2 - time1;
+
+ printk(KERN_ALERT "test results: time for enabling interrupts (STI)\n");
+ printk(KERN_ALERT "number of loops: %d\n", NR_LOOPS);
+ printk(KERN_ALERT "total time: %llu\n", time);
+ time = div_long_long_rem(time, NR_LOOPS, &rem);
+ printk(KERN_ALERT "-> enabling interrupts (STI) takes %llu cycles\n",
+ time);
+ printk(KERN_ALERT "test end\n");
+}
+
+static void do_test_disable_int(void)
+{
+ unsigned long flags, flags2;
+ unsigned int i;
+ cycles_t time1, time2, time;
+ long rem;
+
+ local_irq_save(flags);
+ preempt_disable();
+ time1 = get_cycles();
+ for ( i = 0; i < NR_LOOPS; i++) {
+ local_irq_save(flags2);
+ }
+ time2 = get_cycles();
+ local_irq_restore(flags);
+ preempt_enable();
+ time = time2 - time1;
+
+ printk(KERN_ALERT "test results: time for disabling interrupts (CLI)\n");
+ printk(KERN_ALERT "number of loops: %d\n", NR_LOOPS);
+ printk(KERN_ALERT "total time: %llu\n", time);
+ time = div_long_long_rem(time, NR_LOOPS, &rem);
+ printk(KERN_ALERT "-> disabling interrupts (CTI) takes %llu cycles\n",
+ time);
+ printk(KERN_ALERT "test end\n");
+}
+
+
+
+static int ltt_test_init(void)
+{
+ printk(KERN_ALERT "test init\n");
+
+ do_test_cmpxchg();
+ do_test_enable_int();
+ do_test_disable_int();
+ return -EAGAIN; /* Fail will directly unload the module */
+}
+
+static void ltt_test_exit(void)
+{
+ printk(KERN_ALERT "test exit\n");
+}
+
+module_init(ltt_test_init)
+module_exit(ltt_test_exit)
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Mathieu Desnoyers");
+MODULE_DESCRIPTION("Cmpxchg vs int Test");
+
#include <linux/init.h>
#include <linux/module.h>
-#include <ltt/ltt-tracer.h>
+#include <linux/ltt-tracer.h>
#include <linux/timex.h>
#include <linux/marker.h>
#include <linux/proc_fs.h>