sched_setaffinity: Check migration after decrementing in_interrupt
refs: #1180 Change-Id: I2b3fb03066812ecc802406297084977e757092fe
This commit is contained in:
committed by
Masamichi Takagi
parent
dd58d366c3
commit
c862b29d65
@@ -1007,6 +1007,12 @@ void handle_interrupt(int vector, struct x86_user_context *regs)
|
|||||||
set_cputime(interrupt_from_user(regs)? 0: 1);
|
set_cputime(interrupt_from_user(regs)? 0: 1);
|
||||||
|
|
||||||
--v->in_interrupt;
|
--v->in_interrupt;
|
||||||
|
|
||||||
|
/* for migration by IPI */
|
||||||
|
if (v->flags & CPU_FLAG_NEED_MIGRATE) {
|
||||||
|
schedule();
|
||||||
|
check_signal(0, regs, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void gpe_handler(struct x86_user_context *regs)
|
void gpe_handler(struct x86_user_context *regs)
|
||||||
|
|||||||
56
test/issues/1180/C1180.sh
Normal file
56
test/issues/1180/C1180.sh
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
USELTP=0
|
||||||
|
USEOSTEST=1
|
||||||
|
|
||||||
|
. ../../common.sh
|
||||||
|
|
||||||
|
tid=001
|
||||||
|
echo "*** RT_$tid start *******************************"
|
||||||
|
sudo ${MCEXEC} ${TESTMCK} -s sched_setaffinity -n 8 -- -p 20 2>&1 | tee ./RT_${tid}.txt
|
||||||
|
if grep -v "RESULT: TP failed" ./RT_${tid}.txt > /dev/null 2>&1 ; then
|
||||||
|
echo "*** RT_$tid: PASSED"
|
||||||
|
else
|
||||||
|
echo "*** RT_$tid: FAILED"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
tid=002
|
||||||
|
echo "*** RT_$tid start *******************************"
|
||||||
|
sudo ${MCEXEC} ${TESTMCK} -s sched_setaffinity -n 1 -- -p 20 2>&1 | tee ./RT_${tid}.txt
|
||||||
|
if grep -v "RESULT: TP failed" ./RT_${tid}.txt > /dev/null 2>&1 ; then
|
||||||
|
echo "*** RT_$tid: PASSED"
|
||||||
|
else
|
||||||
|
echo "*** RT_$tid: FAILED"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
tid=003
|
||||||
|
echo "*** RT_$tid start *******************************"
|
||||||
|
sudo ${MCEXEC} ${TESTMCK} -s sched_setaffinity -n 2 -- -p 20 2>&1 | tee ./RT_${tid}.txt
|
||||||
|
if grep -v "RESULT: TP failed" ./RT_${tid}.txt > /dev/null 2>&1 ; then
|
||||||
|
echo "*** RT_$tid: PASSED"
|
||||||
|
else
|
||||||
|
echo "*** RT_$tid: FAILED"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
tid=004
|
||||||
|
echo "*** RT_$tid start *******************************"
|
||||||
|
sudo ${MCEXEC} ${TESTMCK} -s sched_setaffinity -n 9 -- -p 20 2>&1 | tee ./RT_${tid}.txt
|
||||||
|
if grep -v "RESULT: TP failed" ./RT_${tid}.txt > /dev/null 2>&1 ; then
|
||||||
|
echo "*** RT_$tid: PASSED"
|
||||||
|
else
|
||||||
|
echo "*** RT_$tid: FAILED"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
tid=005
|
||||||
|
echo "*** RT_$tid start *******************************"
|
||||||
|
sudo ${MCEXEC} ${TESTMCK} -s sched_setaffinity -n 10 -- -p 20 2>&1 | tee ./RT_${tid}.txt
|
||||||
|
if grep -v "RESULT: TP failed" ./RT_${tid}.txt > /dev/null 2>&1 ; then
|
||||||
|
echo "*** RT_$tid: PASSED"
|
||||||
|
else
|
||||||
|
echo "*** RT_$tid: FAILED"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
14
test/issues/1180/Makefile
Normal file
14
test/issues/1180/Makefile
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
CC = gcc
|
||||||
|
TARGET=
|
||||||
|
|
||||||
|
CPPFLAGS =
|
||||||
|
LDFLAGS =
|
||||||
|
|
||||||
|
all: $(TARGET)
|
||||||
|
|
||||||
|
test: all
|
||||||
|
@sh ./C1180.sh
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(TARGET) *.o
|
||||||
|
|
||||||
29
test/issues/1180/README
Normal file
29
test/issues/1180/README
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
【Issue#1180 動作確認】
|
||||||
|
□ テスト内容
|
||||||
|
1. Issueで報告された再現プログラムでの確認
|
||||||
|
RT_001: ostest_sched_setaffinity.008
|
||||||
|
親プロセスが子プロセスに対して、子プロセスが実行中のCPUを除いたcpusetを
|
||||||
|
指定したsched_setaffinity()を実行し、即座にマイグレートすることを確認
|
||||||
|
|
||||||
|
2. 既存のマイグレーション機能に影響がないことをOSTESTを用いて確認
|
||||||
|
RT_002: ostest_sched_setaffinity.001
|
||||||
|
自プロセスをマイグレートできることを確認
|
||||||
|
RT_003: ostest_sched_setaffinity.002
|
||||||
|
マイグレートした自プロセスのレジスタの値が保持されていることを確認
|
||||||
|
RT_004: ostest_sched_setaffinity.009
|
||||||
|
マイグレートした子プロセスのレジスタの値が保持されていることを確認
|
||||||
|
RT_005: ostest_sched_setaffinity.010
|
||||||
|
複数の子プロセスを同一のCPU上にマイグレートしても、
|
||||||
|
それぞれのレジスタの値が保持されていることを確認
|
||||||
|
|
||||||
|
□ 実行手順
|
||||||
|
$ make test
|
||||||
|
|
||||||
|
McKernelのインストール先や、OSTEST, LTPの配置場所は、
|
||||||
|
$HOME/.mck_test_config を参照している
|
||||||
|
.mck_test_config は、McKernelをビルドした際に生成されるmck_test_config.sample ファイルを
|
||||||
|
$HOMEにコピーし、適宜編集する
|
||||||
|
|
||||||
|
□ 実行結果
|
||||||
|
result.log 参照
|
||||||
|
すべての項目をPASSしていることを確認
|
||||||
40
test/issues/1180/result.log
Normal file
40
test/issues/1180/result.log
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
*** RT_001 start *******************************
|
||||||
|
TEST_SUITE: sched_setaffinity
|
||||||
|
TEST_NUMBER: 8
|
||||||
|
ARGS: -p 20
|
||||||
|
RESULT: ok
|
||||||
|
*** RT_001: PASSED
|
||||||
|
|
||||||
|
*** RT_002 start *******************************
|
||||||
|
TEST_SUITE: sched_setaffinity
|
||||||
|
TEST_NUMBER: 1
|
||||||
|
ARGS: -p 20
|
||||||
|
RESULT: ok
|
||||||
|
*** RT_002: PASSED
|
||||||
|
|
||||||
|
*** RT_003 start *******************************
|
||||||
|
TEST_SUITE: sched_setaffinity
|
||||||
|
TEST_NUMBER: 2
|
||||||
|
ARGS: -p 20
|
||||||
|
==before migrate process==
|
||||||
|
f0 = 3.140000, f1 = 42.195000, f2 = 53.849998, f3 = 909.908997
|
||||||
|
==after migrate process==
|
||||||
|
f0 = 3.140000, f1 = 42.195000, f2 = 53.849998, f3 = 909.908997
|
||||||
|
RESULT: ok
|
||||||
|
*** RT_003: PASSED
|
||||||
|
|
||||||
|
*** RT_004 start *******************************
|
||||||
|
TEST_SUITE: sched_setaffinity
|
||||||
|
TEST_NUMBER: 9
|
||||||
|
ARGS: -p 20
|
||||||
|
==Please check migrated child process keep datas==
|
||||||
|
RESULT: ok
|
||||||
|
*** RT_004: PASSED
|
||||||
|
|
||||||
|
*** RT_005 start *******************************
|
||||||
|
TEST_SUITE: sched_setaffinity
|
||||||
|
TEST_NUMBER: 10
|
||||||
|
ARGS: -p 20
|
||||||
|
==Please check migrated child process keep datas==
|
||||||
|
RESULT: ok
|
||||||
|
*** RT_005: PASSED
|
||||||
Reference in New Issue
Block a user