Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/sched_4bsd.c
Show First 20 Lines • Show All 1,159 Lines • ▼ Show 20 Lines | forward_wakeup(int cpunum) | ||||
me = PCPU_GET(cpuid); | me = PCPU_GET(cpuid); | ||||
/* Don't bother if we should be doing it ourself. */ | /* Don't bother if we should be doing it ourself. */ | ||||
if (CPU_ISSET(me, &idle_cpus_mask) && | if (CPU_ISSET(me, &idle_cpus_mask) && | ||||
(cpunum == NOCPU || me == cpunum)) | (cpunum == NOCPU || me == cpunum)) | ||||
return (0); | return (0); | ||||
CPU_SETOF(me, &dontuse); | CPU_SETOF(me, &dontuse); | ||||
CPU_OR(&dontuse, &stopped_cpus); | CPU_OR(&dontuse, &dontuse, &stopped_cpus); | ||||
CPU_OR(&dontuse, &hlt_cpus_mask); | CPU_OR(&dontuse, &dontuse, &hlt_cpus_mask); | ||||
CPU_ZERO(&map2); | CPU_ZERO(&map2); | ||||
if (forward_wakeup_use_loop) { | if (forward_wakeup_use_loop) { | ||||
STAILQ_FOREACH(pc, &cpuhead, pc_allcpu) { | STAILQ_FOREACH(pc, &cpuhead, pc_allcpu) { | ||||
id = pc->pc_cpuid; | id = pc->pc_cpuid; | ||||
if (!CPU_ISSET(id, &dontuse) && | if (!CPU_ISSET(id, &dontuse) && | ||||
pc->pc_curthread == pc->pc_idlethread) { | pc->pc_curthread == pc->pc_idlethread) { | ||||
CPU_SET(id, &map2); | CPU_SET(id, &map2); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
if (forward_wakeup_use_mask) { | if (forward_wakeup_use_mask) { | ||||
map = idle_cpus_mask; | CPU_ANDNOT(&map, &idle_cpus_mask, &dontuse); | ||||
CPU_ANDNOT(&map, &dontuse); | |||||
/* If they are both on, compare and use loop if different. */ | /* If they are both on, compare and use loop if different. */ | ||||
if (forward_wakeup_use_loop) { | if (forward_wakeup_use_loop) { | ||||
if (CPU_CMP(&map, &map2)) { | if (CPU_CMP(&map, &map2)) { | ||||
printf("map != map2, loop method preferred\n"); | printf("map != map2, loop method preferred\n"); | ||||
map = map2; | map = map2; | ||||
} | } | ||||
} | } | ||||
▲ Show 20 Lines • Show All 169 Lines • ▼ Show 20 Lines | #ifdef SMP | ||||
if (cpu != NOCPU) | if (cpu != NOCPU) | ||||
runq_length[cpu]++; | runq_length[cpu]++; | ||||
cpuid = PCPU_GET(cpuid); | cpuid = PCPU_GET(cpuid); | ||||
if (single_cpu && cpu != cpuid) { | if (single_cpu && cpu != cpuid) { | ||||
kick_other_cpu(td->td_priority, cpu); | kick_other_cpu(td->td_priority, cpu); | ||||
} else { | } else { | ||||
if (!single_cpu) { | if (!single_cpu) { | ||||
tidlemsk = idle_cpus_mask; | CPU_ANDNOT(&tidlemsk, &idle_cpus_mask, &hlt_cpus_mask); | ||||
CPU_ANDNOT(&tidlemsk, &hlt_cpus_mask); | |||||
CPU_CLR(cpuid, &tidlemsk); | CPU_CLR(cpuid, &tidlemsk); | ||||
if (!CPU_ISSET(cpuid, &idle_cpus_mask) && | if (!CPU_ISSET(cpuid, &idle_cpus_mask) && | ||||
((flags & SRQ_INTR) == 0) && | ((flags & SRQ_INTR) == 0) && | ||||
!CPU_EMPTY(&tidlemsk)) | !CPU_EMPTY(&tidlemsk)) | ||||
forwarded = forward_wakeup(cpu); | forwarded = forward_wakeup(cpu); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 445 Lines • Show Last 20 Lines |