syscall offload regardless of mcexec life and death
Change-Id: I7db089993d3ee5ae6032f5085db2b67cef99fdfb Refs: #1321
This commit is contained in:
committed by
Masamichi Takagi
parent
0d3ef65092
commit
9b3450ee7e
@ -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
29
test/issues/1321/C1321.sh
Normal 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
|
||||
48
test/issues/1321/C1321.txt
Normal file
48
test/issues/1321/C1321.txt
Normal 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
14
test/issues/1321/Makefile
Normal 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
37
test/issues/1321/README
Normal 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していることを確認。
|
||||
Reference in New Issue
Block a user