diff --git a/test/mng_mod/issues/1029/1029.patch b/test/mng_mod/issues/1029/1029.patch index eeb73885..482f32a5 100644 --- a/test/mng_mod/issues/1029/1029.patch +++ b/test/mng_mod/issues/1029/1029.patch @@ -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; - } - } diff --git a/test/mng_mod/issues/1029/README b/test/mng_mod/issues/1029/README index f5f81ff8..f0995355 100644 --- a/test/mng_mod/issues/1029/README +++ b/test/mng_mod/issues/1029/README @@ -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. 結果 diff --git a/test/mng_mod/issues/1029/result.log b/test/mng_mod/issues/1029/result.log index e92c5464..f81a66f5 100644 --- a/test/mng_mod/issues/1029/result.log +++ b/test/mng_mod/issues/1029/result.log @@ -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