update Test for Issue#1029
This commit is contained in:
@ -132,7 +132,7 @@ index cdd4ab3..a3e6c8a 100644
|
||||
+ // switch to idle
|
||||
+ if (!cases[case_num]) {
|
||||
+ if (next == &cpu_local_var(idle)) {
|
||||
+ kprintf("[OK] CT_%03d switch to idle %d => %d\n", case_num,
|
||||
+ kprintf("[OK] CT_%03d %d => %d\n", case_num,
|
||||
+ prev ? prev->tid : 0, next ? next->tid : 0);
|
||||
+ } else {
|
||||
+ kprintf("[NG] CT_%03d %d => %d\n", case_num, prev->tid, next->tid);
|
||||
@ -163,11 +163,3 @@ index cdd4ab3..a3e6c8a 100644
|
||||
if (switch_ctx) {
|
||||
dkprintf("schedule: %d => %d \n",
|
||||
prev ? prev->tid : 0, next ? next->tid : 0);
|
||||
@@ -3260,6 +3373,7 @@ redo:
|
||||
|
||||
/* Have we migrated to another core meanwhile? */
|
||||
if (v != get_this_cpu_local_var()) {
|
||||
+ switch_ctx = 0;
|
||||
goto redo;
|
||||
}
|
||||
}
|
||||
|
||||
@ -35,33 +35,33 @@ schedule()が想定どおりの動作をすることを確認する。
|
||||
◆prevがidleのケース
|
||||
CT_001: runqが空
|
||||
⇒ コンテキストスイッチを行わない
|
||||
CT_002: runqに実行開始前のthreadが存在する
|
||||
CT_002: runqに実行待ちのthreadが存在し、且つ、そのthreadが1度も実行状態になっていない
|
||||
⇒ 非idleのthreadにスイッチする
|
||||
CT_003: runqに実行開始前のthreadが存在しない
|
||||
CT_003: runqに実行待ちのthreadが存在し、且つ、そのthreadが実行状態になったことがある
|
||||
⇒ 非idleのthreadにスイッチする
|
||||
|
||||
◆schedule時点で当該CPUのCPU_FLAGS_NEED_MIGRATEが活性化しているケース
|
||||
CT_004: runqが空
|
||||
⇒ idleにスイッチする
|
||||
CT_005: runqに実行開始前のthreadが存在する
|
||||
CT_005: runqに実行待ちのthreadが存在し、且つ、そのthreadが1度も実行状態になっていない
|
||||
⇒ idleにスイッチする
|
||||
CT_006: runqに実行開始前のthreadが存在しない
|
||||
CT_006: runqに実行待ちのthreadが存在し、且つ、そのthreadが実行状態になったことがある
|
||||
⇒ idleにスイッチする
|
||||
|
||||
◆prevがidle以外で、statusがPS_EXITED以外:
|
||||
CT_007: runqが空
|
||||
⇒ idleにスイッチする
|
||||
CT_008: runqに実行開始前のthreadが存在する
|
||||
CT_008: runqに実行待ちのthreadが存在し、且つ、そのthreadが1度も実行状態になっていない
|
||||
⇒ 非idleのthreadにスイッチする
|
||||
CT_009: runqに実行開始前のthreadが存在しない
|
||||
CT_009: runqに実行待ちのthreadが存在し、且つ、そのthreadが実行状態になったことがある
|
||||
⇒ 非idleのthreadにスイッチする
|
||||
|
||||
◆prevがidle以外で、statusがPS_EXITED:
|
||||
CT_010: runqが空
|
||||
⇒ idleにスイッチする
|
||||
CT_011: runqに実行開始前のthreadが存在する
|
||||
CT_011: runqに実行待ちのthreadが存在し、且つ、そのthreadが1度も実行状態になっていない
|
||||
⇒ idleにスイッチする
|
||||
CT_012: runqに実行開始前のthreadが存在しない
|
||||
CT_012: runqに実行待ちのthreadが存在し、且つ、そのthreadが実行状態になったことがある
|
||||
⇒ idleにスイッチする
|
||||
|
||||
4. 結果
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
[OK] CT_001 not_switch
|
||||
[OK] CT_002 0 => 16997
|
||||
[OK] CT_003 1 => 17007
|
||||
[OK] CT_004 switch to idle 17017 => 2
|
||||
[OK] CT_005 switch to idle 17047 => 1
|
||||
[OK] CT_006 switch to idle 17018 => 1
|
||||
[OK] CT_007 switch to idle 16997 => 0
|
||||
[OK] CT_004 17017 => 2
|
||||
[OK] CT_005 17047 => 1
|
||||
[OK] CT_006 17018 => 1
|
||||
[OK] CT_007 16997 => 0
|
||||
[OK] CT_008 17007 => 17018
|
||||
[OK] CT_009 17017 => 17018
|
||||
[OK] CT_010 switch to idle 17017 => 1
|
||||
[OK] CT_011 switch to idle 17047 => 1
|
||||
[OK] CT_012 switch to idle 17018 => 1
|
||||
[OK] CT_010 17017 => 1
|
||||
[OK] CT_011 17047 => 1
|
||||
[OK] CT_012 17018 => 1
|
||||
|
||||
Reference in New Issue
Block a user