#include "features.h"
#include "msg_parser.h"
+#include <writer/event_filter.h>
+#include <writer/swap_writer_module.h>
#include <sampler/swap_sampler_module.h>
#include <energy/energy.h>
return ret;
}
+
+static void sampler_cb(struct pt_regs *regs)
+{
+ if (check_event(current))
+ sample_msg(regs);
+}
+
/**
* @brief Set sampling feature on.
*
{
int ret;
- ret = swap_sampler_start(conf->data_msg_period);
+ ret = swap_sampler_start(conf->data_msg_period, sampler_cb);
return ret;
}
#include <linux/cpu.h>
#include <linux/module.h>
-#include <writer/swap_writer_module.h>
-#include <writer/event_filter.h>
-
#include "swap_sampler_module.h"
#include "swap_sampler_errors.h"
#include "kernel_operations.h"
static BLOCKING_NOTIFIER_HEAD(swap_sampler_notifier_list);
+static swap_sample_cb_t sampler_cb;
static restart_ret swap_timer_restart(swap_timer *timer)
{
- if (check_event(current))
- sample_msg(task_pt_regs(current));
+ sampler_cb(task_pt_regs(current));
return sampler_timers_restart(timer);
}
* @param timer_quantum Timer quantum for sampling.
* @return 0 on success, error code on error.
*/
-int swap_sampler_start(unsigned int timer_quantum)
+int swap_sampler_start(unsigned int timer_quantum, swap_sample_cb_t cb)
{
int ret = -EINVAL;
goto unlock;
}
+ sampler_cb = cb;
+
ret = do_swap_sampler_start(timer_quantum);
if (ret == 0)
sampler_run = 1;
#ifndef __SWAP_SAMPLER_MODULE_H__
#define __SWAP_SAMPLER_MODULE_H__
+
+typedef void (*swap_sample_cb_t)(struct pt_regs *);
+
+
/* Starts the SWAP Sampler */
-int swap_sampler_start(unsigned int timer_quantum);
+int swap_sampler_start(unsigned int timer_quantum, swap_sample_cb_t cb);
/* Stops the SWAP Sampler */
int swap_sampler_stop(void);