SMP - Print cpu of the process
- adds '4' to print processes assigned to each cpu without printing the process it is blocked on (a lightweight '1')
This commit is contained in:
parent
0ac9b6d4cf
commit
454589debd
3 changed files with 34 additions and 7 deletions
|
@ -48,6 +48,9 @@ extern void poweroff16_end();
|
||||||
PUBLIC void * k_stacks;
|
PUBLIC void * k_stacks;
|
||||||
|
|
||||||
FORWARD _PROTOTYPE( void ser_debug, (int c));
|
FORWARD _PROTOTYPE( void ser_debug, (int c));
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
FORWARD _PROTOTYPE( void ser_dump_proc_cpu, (void));
|
||||||
|
#endif
|
||||||
|
|
||||||
PUBLIC __dead void arch_monitor(void)
|
PUBLIC __dead void arch_monitor(void)
|
||||||
{
|
{
|
||||||
|
@ -471,6 +474,11 @@ PRIVATE void ser_debug(const int c)
|
||||||
case '3':
|
case '3':
|
||||||
ser_dump_segs();
|
ser_dump_segs();
|
||||||
break;
|
break;
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
case '4':
|
||||||
|
ser_dump_proc_cpu();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
#if DEBUG_TRACE
|
#if DEBUG_TRACE
|
||||||
#define TOGGLECASE(ch, flag) \
|
#define TOGGLECASE(ch, flag) \
|
||||||
case ch: { \
|
case ch: { \
|
||||||
|
@ -495,7 +503,6 @@ PRIVATE void ser_debug(const int c)
|
||||||
serial_debug_active = 0;
|
serial_debug_active = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PUBLIC void ser_dump_proc()
|
PUBLIC void ser_dump_proc()
|
||||||
{
|
{
|
||||||
struct proc *pp;
|
struct proc *pp;
|
||||||
|
@ -508,6 +515,23 @@ PUBLIC void ser_dump_proc()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
PRIVATE void ser_dump_proc_cpu(void)
|
||||||
|
{
|
||||||
|
struct proc *pp;
|
||||||
|
unsigned cpu;
|
||||||
|
|
||||||
|
for (cpu = 0; cpu < ncpus; cpu++) {
|
||||||
|
printf("CPU %d processes : \n", cpu);
|
||||||
|
for (pp= BEG_USER_ADDR; pp < END_PROC_ADDR; pp++) {
|
||||||
|
if (isemptyp(pp) || pp->p_cpu != cpu)
|
||||||
|
continue;
|
||||||
|
print_proc(pp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if SPROFILE
|
#if SPROFILE
|
||||||
|
|
||||||
PUBLIC int arch_init_profile_clock(const u32_t freq)
|
PUBLIC int arch_init_profile_clock(const u32_t freq)
|
||||||
|
|
|
@ -258,10 +258,12 @@ PUBLIC void print_proc(struct proc *pp)
|
||||||
struct proc *depproc = NULL;
|
struct proc *depproc = NULL;
|
||||||
endpoint_t dep;
|
endpoint_t dep;
|
||||||
|
|
||||||
printf("%d: %s %d prio %d time %d/%d cycles 0x%x%08x cr3 0x%lx rts %s misc %s sched %s ",
|
printf("%d: %s %d prio %d time %d/%d cycles 0x%x%08x cpu %2d "
|
||||||
|
"cr3 0x%lx rts %s misc %s sched %s ",
|
||||||
proc_nr(pp), pp->p_name, pp->p_endpoint,
|
proc_nr(pp), pp->p_name, pp->p_endpoint,
|
||||||
pp->p_priority, pp->p_user_time,
|
pp->p_priority, pp->p_user_time,
|
||||||
pp->p_sys_time, pp->p_cycles.hi, pp->p_cycles.lo, pp->p_seg.p_cr3,
|
pp->p_sys_time, pp->p_cycles.hi, pp->p_cycles.lo, pp->p_cpu,
|
||||||
|
pp->p_seg.p_cr3,
|
||||||
rtsflagstr(pp->p_rts_flags), miscflagstr(pp->p_misc_flags),
|
rtsflagstr(pp->p_rts_flags), miscflagstr(pp->p_misc_flags),
|
||||||
schedulerstr(pp->p_scheduler));
|
schedulerstr(pp->p_scheduler));
|
||||||
|
|
||||||
|
|
|
@ -329,8 +329,9 @@ check_misc_flags:
|
||||||
if (!proc_is_runnable(p))
|
if (!proc_is_runnable(p))
|
||||||
goto not_runnable_pick_new;
|
goto not_runnable_pick_new;
|
||||||
|
|
||||||
TRACE(VF_SCHEDULING, printf("starting %s / %d\n",
|
TRACE(VF_SCHEDULING, printf("cpu %d starting %s / %d "
|
||||||
p->p_name, p->p_endpoint););
|
"pc 0x%08x\n",
|
||||||
|
cpuid, p->p_name, p->p_endpoint, p->p_reg.pc););
|
||||||
#if DEBUG_TRACE
|
#if DEBUG_TRACE
|
||||||
p->p_schedules++;
|
p->p_schedules++;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1448,7 +1449,7 @@ PRIVATE struct proc * pick_proc(void)
|
||||||
rdy_head = get_cpulocal_var(run_q_head);
|
rdy_head = get_cpulocal_var(run_q_head);
|
||||||
for (q=0; q < NR_SCHED_QUEUES; q++) {
|
for (q=0; q < NR_SCHED_QUEUES; q++) {
|
||||||
if(!(rp = rdy_head[q])) {
|
if(!(rp = rdy_head[q])) {
|
||||||
TRACE(VF_PICKPROC, printf("queue %d empty\n", q););
|
TRACE(VF_PICKPROC, printf("cpu %d queue %d empty\n", cpuid, q););
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
assert(proc_is_runnable(rp));
|
assert(proc_is_runnable(rp));
|
||||||
|
|
Loading…
Reference in a new issue