version 1.43.4.3, 2006/11/18 21:29:18 |
version 1.44.2.1, 2010/12/10 22:14:57 |
Line 880 ENTRY(cpu_switch) |
|
Line 880 ENTRY(cpu_switch) |
|
sti |
sti |
idle_unlock: |
idle_unlock: |
#if defined(MULTIPROCESSOR) || defined(LOCKDEBUG) |
#if defined(MULTIPROCESSOR) || defined(LOCKDEBUG) |
pushl $_C_LABEL(sched_mutex) |
call _C_LABEL(sched_unlock_idle) |
call _C_LABEL(mutex_exit) |
|
addl $4,%esp |
|
#endif |
#endif |
/* Interrupts are okay again. */ |
/* Interrupts are okay again. */ |
pushl $IPL_NONE # spl0() |
pushl $IPL_NONE # spl0() |
|
|
movl $IPL_HIGH,CPUVAR(ILEVEL) # splhigh |
movl $IPL_HIGH,CPUVAR(ILEVEL) # splhigh |
sti |
sti |
#if defined(MULTIPROCESSOR) || defined(LOCKDEBUG) |
#if defined(MULTIPROCESSOR) || defined(LOCKDEBUG) |
pushl $_C_LABEL(sched_mutex) |
call _C_LABEL(sched_lock_idle) |
call _C_LABEL(mutex_enter) |
|
addl $4,%esp |
|
#endif |
#endif |
movl _C_LABEL(sched_whichqs),%ecx |
movl _C_LABEL(sched_whichqs),%ecx |
bsfl %ecx,%ebx |
bsfl %ecx,%ebx |
|
|
* we're running at splhigh(), but it's otherwise okay to take |
* we're running at splhigh(), but it's otherwise okay to take |
* interrupts here. |
* interrupts here. |
*/ |
*/ |
sti |
/*sti -- no it isn't! */ |
leal _C_LABEL(sched_qs)(,%ebx,8),%eax # select q |
leal _C_LABEL(sched_qs)(,%ebx,8),%eax # select q |
|
|
movl L_FORW(%eax),%edi # unlink from front of process q |
movl L_FORW(%eax),%edi # unlink from front of process q |
Line 1053 switch_restored: |
|
Line 1049 switch_restored: |
|
SET_CURPCB(%esi) |
SET_CURPCB(%esi) |
|
|
/* Interrupts are okay again. */ |
/* Interrupts are okay again. */ |
sti |
/*sti -- nope, not yet! */ |
|
|
/* |
/* |
* Check for restartable atomic sequences (RAS) |
* Check for restartable atomic sequences (RAS) |
Line 1067 switch_restored: |
|
Line 1063 switch_restored: |
|
|
|
switch_return: |
switch_return: |
#if defined(MULTIPROCESSOR) || defined(LOCKDEBUG) |
#if defined(MULTIPROCESSOR) || defined(LOCKDEBUG) |
pushl $_C_LABEL(sched_mutex) |
call _C_LABEL(sched_unlock_idle) |
call _C_LABEL(mutex_exit) |
|
addl $4,%esp |
|
#endif |
#endif |
|
sti /* NOW we can do this, after releasing sched_lock */ |
cmpl $0,CPUVAR(IPENDING) |
cmpl $0,CPUVAR(IPENDING) |
jz 3f |
jz 3f |
pushl $IPL_NONE # spl0() |
pushl $IPL_NONE # spl0() |
Line 1135 ENTRY(cpu_switchto) |
|
Line 1130 ENTRY(cpu_switchto) |
|
* We're running at splhigh(), but it's otherwise okay to take |
* We're running at splhigh(), but it's otherwise okay to take |
* interrupts here. |
* interrupts here. |
*/ |
*/ |
sti |
/*sti -- no it isn't! */ |
|
|
/* Jump into the middle of cpu_switch */ |
/* Jump into the middle of cpu_switch */ |
xorl %eax,%eax |
xorl %eax,%eax |