diff options
Diffstat (limited to 'monitor_kernel_lib.c')
| -rw-r--r-- | monitor_kernel_lib.c | 25 |
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 |
