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