syscall offload regardless of mcexec life and death

Change-Id: I7db089993d3ee5ae6032f5085db2b67cef99fdfb
Refs: #1321
This commit is contained in:
Tomoki Shirasawa
2019-07-25 13:52:23 +09:00
committed by Masamichi Takagi
parent 0d3ef65092
commit 9b3450ee7e
5 changed files with 128 additions and 4 deletions

View File

@ -181,7 +181,6 @@ long do_syscall(struct syscall_request *req, int cpu)
struct syscall_response res;
long rc;
struct thread *thread = cpu_local_var(current);
struct process *proc = thread->proc;
struct ihk_os_cpu_monitor *monitor = cpu_local_var(monitor);
int mstatus = 0;
@ -204,9 +203,6 @@ long do_syscall(struct syscall_request *req, int cpu)
barrier();
if(req->number != __NR_exit_group){
if (proc->nohost) {// host is down
return -EPIPE;
}
++thread->in_syscall_offload;
}

29
test/issues/1321/C1321.sh Normal file
View File

@ -0,0 +1,29 @@
#!/bin/sh
USELTP=1
USEOSTEST=0
. ../../common.sh
################################################################################
for i in fork01:01 fork02:02 fork03:03 exit01:04 exit02:05 exit_group01:06 \
wait401:07 waitpid01:08 waitpid02:09 waitpid03:10; do
tp=`echo $i|sed 's/:.*//'`
id=`echo $i|sed 's/.*://'`
$IHKOSCTL 0 clear_kmsg
$MCEXEC $LTPBIN/$tp 2>&1 | tee $tp.txt
ok=`grep TPASS $tp.txt | wc -l`
ng=`grep TFAIL $tp.txt | wc -l`
err=`$IHKOSCTL 0 kmsg | grep fileobj_free | wc -l`
if [ $err != 0 ]; then
echo "--- C1321T$id: error"
$IHKOSCTL 0 kmsg | grep fileobj_free
ng=$((ng + 1))
else
echo "--- C1321T$id: no error"
fi
if [ $ng = 0 ]; then
echo "*** C1321T$id: $tp PASS ($ok)"
else
echo "*** C1321T$id: $tp FAIL (ok=$ok ng=%ng)"
fi
done

View File

@ -0,0 +1,48 @@
Script started on Tue Aug 6 16:36:14 2019
bash-4.2$ make test
mcstop+release.sh ... done
mcreboot.sh -c 1-7,9-15,17-23,25-31 -m 10G@0,10G@1 -r 1-7:0+9-15:8+17-23:16+25-31:24 ... done
fork01 1 TPASS : fork() returned 21466
fork01 2 TPASS : child pid and fork() return agree: 21466
--- C1321T01: no error
*** C1321T01: fork01 PASS (2)
fork02 0 TINFO : Inside parent
fork02 0 TINFO : Inside child
fork02 0 TINFO : exit status of wait 0
fork02 1 TPASS : test 1 PASSED
--- C1321T02: no error
*** C1321T02: fork02 PASS (1)
fork03 0 TINFO : process id in parent of child from fork : 21624
fork03 1 TPASS : test 1 PASSED
--- C1321T03: no error
*** C1321T03: fork03 PASS (1)
exit01 1 TPASS : exit() test PASSED
--- C1321T04: no error
*** C1321T04: exit01 PASS (1)
exit02 1 TPASS : exit() test PASSED
--- C1321T05: no error
*** C1321T05: exit02 PASS (1)
exit_group01 1 TPASS : exit_group() succeeded
--- C1321T06: no error
*** C1321T06: exit_group01 PASS (1)
wait401 1 TPASS : Received child pid as expected.
wait401 2 TPASS : wait401 call succeeded
--- C1321T07: no error
*** C1321T07: wait401 PASS (2)
waitpid01 1 TPASS : recieved expected pid
waitpid01 2 TPASS : recieved expected signal
--- C1321T08: no error
*** C1321T08: waitpid01 PASS (2)
waitpid02 1 TPASS : recieved expected pid
waitpid02 2 TPASS : recieved expected signal
waitpid02 3 TPASS : recieved expected exit value
--- C1321T09: no error
*** C1321T09: waitpid02 PASS (3)
waitpid03 1 TPASS : Got correct child PID
waitpid03 2 TPASS : Condition 2 test passed
--- C1321T10: no error
*** C1321T10: waitpid03 PASS (2)
bash-4.2$ exit
exit
Script done on Tue Aug 6 16:36:45 2019

14
test/issues/1321/Makefile Normal file
View File

@ -0,0 +1,14 @@
CC = gcc
TARGET=
CPPFLAGS =
LDFLAGS =
all:
test: all
@sh ./C1321.sh
clean:
rm -f $(TARGET) *.o

37
test/issues/1321/README Normal file
View File

@ -0,0 +1,37 @@
【Issue#1321 動作確認】
□ テスト内容
プロセス終了時に先に終了しているmcexecに対してシステムコールオフロードの発行を
抑止していたため、以下のメッセージがkmsgに出力されていた。
fileobj_free(xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx): free failed. -32
しかし、システムコールオフロードはmcctrlが処理するものも存在するため、単純に
抑止することはできない。上記メッセージはmcctrlが処理しないため出力されていた。
Issue#1321 の対策では既にmcexecが終了していた場合でもシステムコールオフロードを
発行するようにした。尚、mcexecが処理すべきシステムコールオフロードはmcctrlに
よってエラーリターンするため、抑止しなくて問題無い。
このため、動作確認としてプロセス関連のLTPを使用して、プロセス終了が正常に行わ
れることと、file_objfreeのメッセージがkmsgに出力されないことを確認する。
C1321T01 fork01がPASSし、fileobj_freeのログが出力されないこと。
C1321T02 fork02がPASSし、fileobj_freeのログが出力されないこと。
C1321T03 fork03がPASSし、fileobj_freeのログが出力されないこと。
C1321T04 exit01がPASSし、fileobj_freeのログが出力されないこと。
C1321T05 exit02がPASSし、fileobj_freeのログが出力されないこと。
C1321T06 exit_group01がPASSし、fileobj_freeのログが出力されないこと。
C1321T07 wait401がPASSし、fileobj_freeのログが出力されないこと。
C1321T08 waitpid01がPASSし、fileobj_freeのログが出力されないこと。
C1321T09 waitpid02がPASSし、fileobj_freeのログが出力されないこと。
C1321T10 waitpid03がPASSし、fileobj_freeのログが出力されないこと。
□ 実行手順
$ make test
McKernelのインストール先やLTPの配置場所は、$HOME/.mck_test_config を
参照している。
.mck_test_config は、McKernelをビルドした際に生成されるmck_test_config.sample
ファイルを $HOME にコピーし、適宜編集する
□ 実行結果
C1321.txt 参照。
すべての項目をPASSしていることを確認。