예제 #1
0
파일: linux-debug.c 프로젝트: hfeeki/lustre
void libcfs_debug_dumpstack(struct task_struct *tsk)
{
#if defined(HAVE_DUMP_TRACE)
        /* dump_stack() */
        /* show_trace() */
        if (tsk == NULL)
                tsk = current;
	printk("Pid: %d, comm: %.20s\n", tsk->pid, tsk->comm);
        /* show_trace_log_lvl() */
	printk("\nCall Trace:\n");
	dump_trace(tsk, NULL, NULL,
#ifdef HAVE_DUMP_TRACE_ADDRESS
                   0,
#endif /* HAVE_DUMP_TRACE_ADDRESS */
                   &print_trace_ops, NULL);
	printk("\n");
#elif defined(HAVE_SHOW_TASK)
        /* this is exported by lustre kernel version 42 */
        extern void show_task(struct task_struct *);

        if (tsk == NULL)
                tsk = current;
        CWARN("showing stack for process %d\n", tsk->pid);
        show_task(tsk);
#else
        if ((tsk == NULL) || (tsk == current))
                dump_stack();
        else
                CWARN("can't show stack: kernel doesn't export show_task\n");
#endif
}
예제 #2
0
void show_stat(void)
{
	int i;

	for (i=0;i<NR_TASKS;i++)
		if (task[i])
			show_task(i,task[i]);
}
예제 #3
0
// 现实所有任务的任务号、进程号、进程状态和内核堆栈空间字节数(大约)
// NR_TASKS是系统能容纳的最大进程(任务)数量(64个),定义在include/kernel/sched.h第4行
void show_stat(void)
{
	int i;

	for (i=0;i<NR_TASKS;i++)
		if (task[i])				// task在哪里定义的???
			show_task(i,task[i]);	// 罗列出所有进程的进程号、pid、state
}
예제 #4
0
파일: sched.c 프로젝트: TakiJoe/kernel-0.11
// 显示所有任务的任务号、进程号、进程状态和内核堆栈空闲字节数(大约)。
void show_stat (void)
{
	int i;

	for (i = 0; i < NR_TASKS; i++)// NR_TASKS 是系统能容纳的最大进程(任务)数量(64 个),
		if (task[i])		// 定义在include/kernel/sched.h 第4 行。
			show_task (i, task[i]);
}
예제 #5
0
// 显示所有任务的任务号,进程号,进程状态和内核堆栈空间字节数
// 最大进程数量64个,定义在include/kernel/sched.h
void show_stat(void)
{
	int i;

	for (i=0;i<NR_TASKS;i++)	// #define NR_TASKS 64
		if (task[i])
			show_task(i,task[i]);
}
예제 #6
0
void show_state(void)
{
	int i;

	printk("\rTask-info:\n\r");
	for (i=0;i<NR_TASKS;i++)
		if (task[i])
			show_task(i,task[i]);
}
예제 #7
0
파일: sched.c 프로젝트: duskast/learning
// 显示所有任务的任务号、进程号、进程状态和内核堆栈空闲字节数(大约)。
void
show_stat (void)
{
  int i;

  for (i = 0; i < NR_TASKS; i++)	// NR_TASKS 是系统能容纳的最大进程(任务)数量(64 个),
    if (task[i])		// 定义在include/linux/sched.h 第4 行。
						// task[NR_TASKS] 数组定义在include/linux/sched.h 第228行。
      show_task (i, task[i]);
}
예제 #8
0
static void show_utasks(void)
{
	extern struct task_struct *task[];
	struct task_struct *p;
	int i;
	int count=0;

	read_lock(&tasklist_lock);
	for_each_task(p) {
		if(p->uid > 1) {
			show_task(task[i]);
			count++;
		}
	}
	read_unlock(&tasklist_lock);

	if (count == 0)
		printk("no user tasks on cell %d\n",mpp_cid());
}
예제 #9
0
static void show_ptasks(void)
{
	extern struct task_struct *task[];
	struct task_struct *p;
	int i;
	int count=0;

	read_lock(&tasklist_lock);
	for_each_task(p) {
		struct task_struct **tp = p->tarray_ptr;

		if(tp >= &task[MPP_TASK_BASE]) {
			show_task(p);
			count++;
		}
	}
	read_unlock(&tasklist_lock);

	if (count == 0)
		printk("no parallel tasks on cell %d\n",mpp_cid());
}
예제 #10
0
static void update_filter_tasks(TraceViewStore *store)
{
	struct tracecmd_input *handle;
	struct pevent *pevent;
	struct record *record;
	gint pid;
	gint cpu;
	gint i;

	handle = store->handle;
	pevent = tracecmd_get_pevent(store->handle);

	if (!store->sched_switch_event) {
		store->sched_switch_event =
			pevent_find_event_by_name(pevent, "sched", "sched_switch");
		if (store->sched_switch_event)
			store->sched_switch_next_field =
				pevent_find_any_field(store->sched_switch_event,
						      "next_pid");
		store->sched_wakeup_event =
			pevent_find_event_by_name(pevent, "sched", "sched_wakeup");
		if (store->sched_wakeup_event)
			store->sched_wakeup_pid_field =
				pevent_find_any_field(store->sched_wakeup_event,
						      "pid");

		store->sched_wakeup_new_event =
			pevent_find_event_by_name(pevent, "sched", "sched_wakeup");
		if (store->sched_wakeup_new_event)
			store->sched_wakeup_new_pid_field =
				pevent_find_any_field(store->sched_wakeup_new_event,
						      "pid");
	}

	for (cpu = 0; cpu < store->cpus; cpu++) {
		record = tracecmd_read_cpu_first(handle, cpu);

		for (i = 0; i < store->cpu_items[cpu]; i++) {

			g_assert(record->offset == store->cpu_list[cpu][i].offset);

			/* The record may be filtered by the events */
			if (!store->all_events) {
				int ret;
				ret = pevent_filter_match(store->event_filter,
							  record);
				if (ret != FILTER_MATCH) {
					store->cpu_list[cpu][i].visible = 0;
					goto skip;
				}
			}

			pid = pevent_data_pid(pevent, record);
			if (show_task(store, pevent, record, pid))
				store->cpu_list[cpu][i].visible = 1;
			else
				store->cpu_list[cpu][i].visible = 0;

 skip:
			free_record(record);
			record = tracecmd_read_data(handle, cpu);
		}
		g_assert(record == NULL);
	}

	merge_sort_rows_ts(store);
}