version 1.30, 2010/01/08 12:10:46 |
version 1.31, 2010/01/09 19:02:17 |
Line 721 softint_overlay(void) |
|
Line 721 softint_overlay(void) |
|
int s; |
int s; |
|
|
l = curlwp; |
l = curlwp; |
ci = l->l_cpu; |
|
si = ((softcpu_t *)ci->ci_data.cpu_softcpu)->sc_int; |
|
|
|
KASSERT((l->l_pflag & LP_INTR) == 0); |
KASSERT((l->l_pflag & LP_INTR) == 0); |
|
|
/* Arrange to elevate priority if the LWP blocks. */ |
/* |
|
* Arrange to elevate priority if the LWP blocks. Also, bind LWP |
|
* to the CPU. Note: disable kernel preemption before doing that. |
|
*/ |
s = splhigh(); |
s = splhigh(); |
|
ci = l->l_cpu; |
|
si = ((softcpu_t *)ci->ci_data.cpu_softcpu)->sc_int; |
|
|
obase = l->l_kpribase; |
obase = l->l_kpribase; |
l->l_kpribase = PRI_KERNEL_RT; |
l->l_kpribase = PRI_KERNEL_RT; |
oflag = l->l_pflag; |
oflag = l->l_pflag; |
l->l_pflag = oflag | LP_INTR | LP_BOUND; |
l->l_pflag = oflag | LP_INTR | LP_BOUND; |
|
|
while ((softints = ci->ci_data.cpu_softints) != 0) { |
while ((softints = ci->ci_data.cpu_softints) != 0) { |
if ((softints & (1 << SOFTINT_SERIAL)) != 0) { |
if ((softints & (1 << SOFTINT_SERIAL)) != 0) { |
ci->ci_data.cpu_softints &= ~(1 << SOFTINT_SERIAL); |
ci->ci_data.cpu_softints &= ~(1 << SOFTINT_SERIAL); |