diff --git a/source/module/monitor_kernel_lib.c b/source/module/monitor_kernel_lib.c index cdf369b..532fdb5 100644 --- a/source/module/monitor_kernel_lib.c +++ b/source/module/monitor_kernel_lib.c @@ -54,6 +54,23 @@ static int init_buffer(unsigned int buf_size) { return ret; } +void diag_tsk(struct task_struct *p, variable_monitor_task *tsk_info,unsigned long *flags) { + + diag_task_brief(p, &tsk_info->task); // task brief + diag_task_user_stack(p, &tsk_info->user_stack); // user stack + diag_task_kern_stack(p, &tsk_info->kern_stack); // kernel stack + dump_proc_chains_argv(1, p, &mm_tree_struct, + &tsk_info->proc_chains); // proc chains + + diag_variant_buffer_spin_lock(&load_monitor_variant_buffer, *flags); + diag_variant_buffer_reserve(&load_monitor_variant_buffer, + sizeof(variable_monitor_task)); + diag_variant_buffer_write_nolock(&load_monitor_variant_buffer, &tsk_info, + sizeof(variable_monitor_task)); + diag_variant_buffer_seal(&load_monitor_variant_buffer); + diag_variant_buffer_spin_unlock(&load_monitor_variant_buffer, *flags); +} + /// @brief clear all watch and reset kernel_wtimer_list/kernel_wtimer_num /// @param static void clear_all_watch(void) { @@ -177,12 +194,14 @@ enum hrtimer_restart check_variable_cb(struct hrtimer *timer) { { struct task_struct *g, *p; // g: task group; p: task unsigned long flags; - variable_monitor_task tsk_info; unsigned long event_id = get_cycles(); - variable_monitor_record vm_record = {.id = event_id, - .et_type = 1, //! todo event type - .tv = ktime_get_real(), - .threshold_record = {0}}; + + static variable_monitor_task tsk_info; + static variable_monitor_record vm_record; + + vm_record.id = event_id; + vm_record.et_type = 1; //! todo event type + vm_record.tv = ktime_get_real(); // printk("-------------------------------------\n"); // printk("-------------watch monitor-----------\n"); @@ -206,21 +225,21 @@ enum hrtimer_restart check_variable_cb(struct hrtimer *timer) { tsk_info.et_type = 2; //! todo event type tsk_info.id = event_id; tsk_info.tv = vm_record.tv; + diag_tsk(p, &tsk_info, &flags); + // diag_task_brief(p, &tsk_info.task); // task brief + // diag_task_user_stack(p, &tsk_info.user_stack); // user stack + // diag_task_kern_stack(p, &tsk_info.kern_stack); // kernel stack + // dump_proc_chains_argv(1, p, &mm_tree_struct, + // &tsk_info.proc_chains); // proc chains - diag_task_brief(p, &tsk_info.task); // task brief - diag_task_user_stack(p, &tsk_info.user_stack); // user stack - diag_task_kern_stack(p, &tsk_info.kern_stack); // kernel stack - dump_proc_chains_argv(1, p, &mm_tree_struct, - &tsk_info.proc_chains); // proc chains - - diag_variant_buffer_spin_lock(&load_monitor_variant_buffer, flags); - diag_variant_buffer_reserve(&load_monitor_variant_buffer, - sizeof(variable_monitor_task)); - diag_variant_buffer_write_nolock(&load_monitor_variant_buffer, - &tsk_info, - sizeof(variable_monitor_task)); - diag_variant_buffer_seal(&load_monitor_variant_buffer); - diag_variant_buffer_spin_unlock(&load_monitor_variant_buffer, flags); + // diag_variant_buffer_spin_lock(&load_monitor_variant_buffer, flags); + // diag_variant_buffer_reserve(&load_monitor_variant_buffer, + // sizeof(variable_monitor_task)); + // diag_variant_buffer_write_nolock(&load_monitor_variant_buffer, + // &tsk_info, + // sizeof(variable_monitor_task)); + // diag_variant_buffer_seal(&load_monitor_variant_buffer); + // diag_variant_buffer_spin_unlock(&load_monitor_variant_buffer, flags); } } while_each_thread(g, p);