static ssize_t task_switch_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count) { int val; if (kstrtoint(buf, 10, &val)) return -EINVAL; if (rdr_task_switch_state == val) return (ssize_t)count; if (val > 1) return -EINVAL; if (val == 1) { (void)task_switch_hook_add( (rdr_funcptr_2)dump_task_switch_hook); } else { (void)task_switch_hook_del( (rdr_funcptr_2)dump_task_switch_hook); } rdr_task_switch_state = val; return (ssize_t)count; }
void cpu_view_report_init(void) { struct task_struct *tempPtr; u32 startslice = 0; int task_num = 0x00; struct task_struct *pTid; for_each_process(pTid) { if(task_num >= BSP_OM_MAX_TASK_NUM) { break; } kernel_tid_list[task_num]= (int)pTid; tempPtr = (struct task_struct *)((u32)kernel_tid_list[task_num]); tempPtr->suffix = task_num; strncpy((char *)g_om_cpu_trace[task_num].task_name, (const char *)tempPtr->comm, BSP_SYSVIEW_TASK_NAME_LEN); g_om_cpu_trace[task_num].slices = 0; g_om_cpu_trace[task_num].max_slice = 0; g_om_cpu_trace[task_num].min_slice = 0xffffffff; task_num++; } g_task_num = (u32)task_num; if (0 == g_task_num) { return; } /*Init Task/interrupt Switch Hook*/ if ( ERROR == task_switch_hook_add( (FUNC_VOID)cpu_task_swt_hook ) ) { printk("CPU_utilization_Init fail.\r\n"); return; } startslice = om_timer_get(); old_slice = startslice; cpu_state = 1; return; }
/****************************************************************************** Prototype : CpuView_OpenTaskWatch Description : 开启任务跟踪 Input : Output : Return Value : Calls : Called By : History : --- 1.Date : 2007-1-24 Author : g45205 Modification: Created function ******************************************************************************/ void AcpuView_OpenTaskWatch(void) { if (CPU_VIEW_NO == g_ulAcpuViewInitFlag) { printk("CpuView_OpenTaskWatch, CpuView is not initialized!\r\n"); return; } if (CPU_VIEW_YES == g_ulAcpuTaskWatch) { printk("WatchTask is already opened!\r\n"); return; } AcpuView_GetTaskName(); if (CPU_VIEW_NO == g_ulAcpuTaskHookAddFlag) { /*向操作系统注册任务钩子函数*/ if ( task_switch_hook_add((FUNC_VOID)AcpuView_TaskSwitchHook) ) { printk("CpuView_OpenTaskWatch task_switch_hook_add fail!\r\n"); return; } g_ulAcpuTaskHookAddFlag = CPU_VIEW_YES; } /*向操作系统注册中断钩子函数*/ int_switch_hook_add((FUNC_VOID)AcpuView_IntLevChgHook); g_ulAcpuTaskWatch = CPU_VIEW_YES; printk("WatchTask open successfully!\r\n"); return; } /* CpuView_OpenTaskWatch */