summaryrefslogtreecommitdiff
path: root/monitor_kernel_lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'monitor_kernel_lib.c')
-rw-r--r--monitor_kernel_lib.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/monitor_kernel_lib.c b/monitor_kernel_lib.c
index c486a14..c7e76cb 100644
--- a/monitor_kernel_lib.c
+++ b/monitor_kernel_lib.c
@@ -209,15 +209,17 @@ enum hrtimer_restart check_variable_cb(struct hrtimer *timer)
{
kernel_watch_timer *k_watch_timer = container_of(timer, kernel_watch_timer, hr_timer);
int i = 0, j = 0;
- char buffer[1024]; // Buffer to store the messages
+ int buffer[TIMER_MAX_WATCH_NUM]; // Buffer to store the messages
// check all watched kernel_watch_arg
for (i = 0; i < k_watch_timer->sentinel; i++)
{
if (read_and_compare(&k_watch_timer->k_watch_args[i]))
{
- snprintf(buffer + strlen(buffer), sizeof(buffer) - strlen(buffer), " name: %s, threshold: %lld \n",
- k_watch_timer->k_watch_args[i].name, k_watch_timer->k_watch_args[i].threshold);
+ // snprintf(buffer + strlen(buffer), sizeof(buffer) - strlen(buffer), " name: %s, threshold: %lld, pid: %d\n",
+ // k_watch_timer->k_watch_args[i].name, k_watch_timer->k_watch_args[i].threshold,
+ // k_watch_timer->k_watch_args[i].task_id);
+ buffer[j] = i;
j++;
// printk(KERN_INFO "j: name %s, threshold: %lld\n", k_watch_timer->k_watch_args[i].name,
@@ -229,7 +231,13 @@ enum hrtimer_restart check_variable_cb(struct hrtimer *timer)
{
printk("-------------------------------------\n");
printk("-------------watch monitor-----------\n");
- printk("Threshold reached:\n %s", buffer);
+ printk("Threshold reached:\n");
+
+ for (i = 0; i < j; i++)
+ {
+ printk(" name: %s, threshold: %lld, pid: %d\n", k_watch_timer->k_watch_args[buffer[i]].name,
+ k_watch_timer->k_watch_args[buffer[i]].threshold, k_watch_timer->k_watch_args[buffer[i]].task_id);
+ }
print_task_stack();
// restart timer after 1s
hrtimer_forward(timer, timer->base->get_time(), ktime_set(1, 0));
@@ -270,6 +278,7 @@ void start_all_hrTimer(void)
timer = &(kernel_wtimer_list[i]);
TIMER_START(timer);
}
+ printk("HrTimer start,module keep %d hrtimer for now\n", kernel_wtimer_num);
}
/// @brief cancel hrTimer
@@ -284,8 +293,7 @@ void cancel_all_hrTimer(void)
TIMER_CANCEL(timer);
}
- // hrtimer_cancel(&hr_timer);
- printk("HrTimer End\n");
+ printk("HrTimer cancel,module keep %d hrtimer for now\n", kernel_wtimer_num);
}
// for read_and_compare
@@ -389,6 +397,9 @@ unsigned char del_all_kwarg_by_pid(pid_t pid)
{
int i = 0;
kernel_watch_timer *timer = NULL;
+
+ printk(KERN_INFO "del kwarg...");
+
for (i = 0; i < kernel_wtimer_num; i++)
{
timer = &(kernel_wtimer_list[i]);
@@ -414,6 +425,7 @@ unsigned char del_all_kwarg_by_pid(pid_t pid)
/// @param pid
void clear_watch(pid_t pid)
{
+ printk(KERN_INFO "clear pid %d 's watch variable\n", pid);
cancel_all_hrTimer(); // just in case
del_all_kwarg_by_pid(pid); // delete all kwarg with pid
free_page_list(pid); // free page with pid
@@ -424,6 +436,7 @@ void clear_watch(pid_t pid)
/// @param
void clear_all_watch(void)
{
+ printk(KERN_INFO "clear all watch variable\n");
// unmap and release the page
free_all_page_list();
// cancel timer