From 228f8f853391b3dcf5e468e64a6c65b3ed87f192 Mon Sep 17 00:00:00 2001 From: Ken Sato Date: Tue, 6 Feb 2018 10:40:12 +0900 Subject: [PATCH] Wait for LWK to run at shutdown. refs #898 refs #928 --- arch/x86_64/kernel/interrupt.S | 6 +- executer/kernel/mcctrl/driver.c | 9 + kernel/include/init.h | 1 + kernel/init.c | 1 + test/mng_mod/issues/898_928/CT_001 | Bin 0 -> 13908 bytes test/mng_mod/issues/898_928/CT_001.c | 177 +++++++++++++++++ test/mng_mod/issues/898_928/CT_002 | Bin 0 -> 13826 bytes test/mng_mod/issues/898_928/CT_002.c | 177 +++++++++++++++++ test/mng_mod/issues/898_928/CT_003 | Bin 0 -> 14075 bytes test/mng_mod/issues/898_928/CT_003.c | 176 +++++++++++++++++ test/mng_mod/issues/898_928/CT_004 | Bin 0 -> 13961 bytes test/mng_mod/issues/898_928/CT_004.c | 177 +++++++++++++++++ test/mng_mod/issues/898_928/CT_005 | Bin 0 -> 13960 bytes test/mng_mod/issues/898_928/CT_005.c | 183 +++++++++++++++++ test/mng_mod/issues/898_928/CT_006 | Bin 0 -> 14124 bytes test/mng_mod/issues/898_928/CT_006.c | 187 ++++++++++++++++++ test/mng_mod/issues/898_928/CT_007 | Bin 0 -> 13835 bytes test/mng_mod/issues/898_928/CT_007.c | 177 +++++++++++++++++ test/mng_mod/issues/898_928/CT_008 | Bin 0 -> 14075 bytes test/mng_mod/issues/898_928/CT_008.c | 180 +++++++++++++++++ test/mng_mod/issues/898_928/CT_009 | Bin 0 -> 13908 bytes test/mng_mod/issues/898_928/CT_009.c | 177 +++++++++++++++++ test/mng_mod/issues/898_928/Makefile | 51 +++++ test/mng_mod/issues/898_928/README | 93 +++++++++ .../issues/898_928/force_shutdown.patch | 20 ++ test/mng_mod/issues/898_928/result.log | 58 ++++++ 26 files changed, 1848 insertions(+), 2 deletions(-) create mode 100755 test/mng_mod/issues/898_928/CT_001 create mode 100644 test/mng_mod/issues/898_928/CT_001.c create mode 100755 test/mng_mod/issues/898_928/CT_002 create mode 100644 test/mng_mod/issues/898_928/CT_002.c create mode 100755 test/mng_mod/issues/898_928/CT_003 create mode 100644 test/mng_mod/issues/898_928/CT_003.c create mode 100755 test/mng_mod/issues/898_928/CT_004 create mode 100644 test/mng_mod/issues/898_928/CT_004.c create mode 100755 test/mng_mod/issues/898_928/CT_005 create mode 100644 test/mng_mod/issues/898_928/CT_005.c create mode 100755 test/mng_mod/issues/898_928/CT_006 create mode 100644 test/mng_mod/issues/898_928/CT_006.c create mode 100755 test/mng_mod/issues/898_928/CT_007 create mode 100644 test/mng_mod/issues/898_928/CT_007.c create mode 100755 test/mng_mod/issues/898_928/CT_008 create mode 100644 test/mng_mod/issues/898_928/CT_008.c create mode 100755 test/mng_mod/issues/898_928/CT_009 create mode 100644 test/mng_mod/issues/898_928/CT_009.c create mode 100644 test/mng_mod/issues/898_928/Makefile create mode 100644 test/mng_mod/issues/898_928/README create mode 100644 test/mng_mod/issues/898_928/force_shutdown.patch create mode 100644 test/mng_mod/issues/898_928/result.log diff --git a/arch/x86_64/kernel/interrupt.S b/arch/x86_64/kernel/interrupt.S index fc94d16b..59802ccf 100644 --- a/arch/x86_64/kernel/interrupt.S +++ b/arch/x86_64/kernel/interrupt.S @@ -145,6 +145,8 @@ nmi: movq %rsp,%gs:PANIC_REGS+0x08 movl nmi_mode(%rip),%eax + cmp $3,%rax + je 4f cmp $1,%rax je 1f cmp $2,%rax @@ -199,9 +201,9 @@ nmi: movl %eax,%gs:PANIC_REGS+0xA0 movq $1,%gs:PANICED call ihk_mc_query_mem_areas -1: +4: hlt - jmp 1b + jmp 4b .globl x86_syscall x86_syscall: diff --git a/executer/kernel/mcctrl/driver.c b/executer/kernel/mcctrl/driver.c index 87065b44..390dac6c 100644 --- a/executer/kernel/mcctrl/driver.c +++ b/executer/kernel/mcctrl/driver.c @@ -27,6 +27,7 @@ #include #include #include +#include #include "mcctrl.h" #include @@ -169,6 +170,14 @@ error_cleanup_channels: int mcctrl_os_shutdown_notifier(int os_index) { if (os[os_index]) { + /* Wait for os running */ + if (ihk_os_wait_for_status(os[os_index], IHK_OS_STATUS_RUNNING, 0, 200) != 0) { + printk("IHK: OS does not become RUNNING in shutdown. Force shutdown.\n"); + /* send nmi to force shutdown */ + ihk_os_send_nmi(os[os_index], 3); + mdelay(200); + } + sysfsm_cleanup(os[os_index]); free_topology_info(os[os_index]); ihk_os_unregister_user_call_handlers(os[os_index], mcctrl_uc + os_index); diff --git a/kernel/include/init.h b/kernel/include/init.h index ed0b2c4e..874a7cbc 100644 --- a/kernel/include/init.h +++ b/kernel/include/init.h @@ -18,6 +18,7 @@ extern void mem_init(void); extern void ihk_ikc_master_init(void); extern void ap_init(void); extern void arch_ready(void); +extern void done_init(void); extern void mc_ikc_test_init(void); extern void cpu_local_var_init(void); extern void kmalloc_init(void); diff --git a/kernel/init.c b/kernel/init.c index 36f58d98..01c581e9 100644 --- a/kernel/init.c +++ b/kernel/init.c @@ -387,6 +387,7 @@ int main(void) futex_init(); + done_init(); kputs("IHK/McKernel booted.\n"); #ifdef DCFA_KMOD diff --git a/test/mng_mod/issues/898_928/CT_001 b/test/mng_mod/issues/898_928/CT_001 new file mode 100755 index 0000000000000000000000000000000000000000..f357781737ab8b0f1aa236e91a90f03aa0b58376 GIT binary patch literal 13908 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 H(S-j3zFG#{ literal 0 HcmV?d00001 diff --git a/test/mng_mod/issues/898_928/CT_001.c b/test/mng_mod/issues/898_928/CT_001.c new file mode 100644 index 00000000..9692e6a4 --- /dev/null +++ b/test/mng_mod/issues/898_928/CT_001.c @@ -0,0 +1,177 @@ +#include +#include +#include +#include +#include +#include + +#define MCK_DIR "/home/satoken/ppos" +static char prefix[256] = MCK_DIR; + +static char test_name[64] = "CT_001"; + +#define OKNG(cond, ...) \ + do { \ + if(cond) { \ + printf("[OK] "); \ + printf(__VA_ARGS__); \ + } else { \ + printf("[NG] "); \ + printf(__VA_ARGS__); \ + char buf[65536];\ + char cmd[256];\ + sprintf(cmd, "%s/sbin/ihkosctl 0 kmsg", prefix);\ + FILE* fp = popen(cmd, "r"); \ + size_t nread = fread(buf, 1, sizeof(buf), fp); \ + buf[nread] = 0; \ + printf("%s", buf); \ + goto fn_fail; \ + } \ + } while(0) + +int main(int argc, char** argv) { + int ret = 0, status, ret_ihklib; + FILE *fp; + char buf[65536]; + size_t nread; + + char cmd[1024]; + char fn[256]; + char kargs[256]; + + int cpus[4] = {6, 7, 8, 9}; + int num_cpus = 4; + + struct ihk_mem_chunk mem_chunks[4]; + int num_mem_chunks; + + printf("*** %s start *************************\n", test_name); + /*-------------------------------------------- + * Preparing + *--------------------------------------------*/ + sprintf(cmd, "%s/sbin/mcstop+release.sh", prefix); + status = system(cmd); + + // ihk_os_destroy_pseudofs + ret_ihklib = ihk_os_destroy_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + + sprintf(cmd, "insmod %s/kmod/ihk.ko", prefix); + status = system(cmd); + + sprintf(cmd, "insmod %s/kmod/ihk-smp-x86_64.ko ihk_start_irq=240 ihk_ikc_irq_core=0", prefix); + status = system(cmd); + + sprintf(cmd, "insmod %s/kmod/mcctrl.ko", prefix); + status = system(cmd); + + /*-------------------------------------------- + * Test + *--------------------------------------------*/ + // create 0 + ret_ihklib = ihk_create_os(0); + + // reserve cpus + ret_ihklib = ihk_reserve_cpu(0, cpus, num_cpus); + //OKNG(ret_ihklib == 0, "ihk_reserve_cpu\n"); + + // assign cpus + ret_ihklib = ihk_os_assign_cpu(0, cpus, num_cpus); + //OKNG(ret_ihklib == 0, "ihk_os_assign_cpu\n"); + + // reserve mem 128m@0,128m@1 + num_mem_chunks = 2; + mem_chunks[0].size = 128*1024*1024ULL; + mem_chunks[0].numa_node_number = 0; + mem_chunks[1].size = 128*1024*1024ULL; + mem_chunks[1].numa_node_number = 1; + ret_ihklib = ihk_reserve_mem(0, mem_chunks, num_mem_chunks); + //OKNG(ret_ihklib == 0, "ihk_reserve_mem (2)\n"); + + // assign mem 128m@0,128m@1 + num_mem_chunks = 2; + mem_chunks[0].size = 128*1024*1024ULL; + mem_chunks[0].numa_node_number = 0; + mem_chunks[1].size = 128*1024*1024ULL; + mem_chunks[1].numa_node_number = 1; + ret_ihklib = ihk_os_assign_mem(0, mem_chunks, num_mem_chunks); + //OKNG(ret_ihklib == 0, "ihk_os_assign_mem (2)\n"); + + // load + sprintf(fn, "%s/smp-x86/kernel/mckernel.img", prefix); + ret_ihklib = ihk_os_load(0, fn); + //OKNG(ret_ihklib == 0, "ihk_os_load\n"); + + // kargs + sprintf(kargs, "hidos ksyslogd=0"); + ret_ihklib = ihk_os_kargs(0, kargs); + //OKNG(ret_ihklib == 0, "ihk_os_kargs\n"); + + // boot + ret_ihklib = ihk_os_boot(0); +goto shutdown; + OKNG(ret_ihklib == 0, "ihk_os_boot\n"); + + /* Make sure that all initialization related transactions between McKernel and IHK finish + sysfs_init(void) (in mckernel/kernel/sysfs.c) + packet.msg = SCD_MSG_SYSFS_REQ_SETUP; + sysfsm_work_main() in (mckernel/executer/kernel/mcctrl/sysfs.c) + sysfsm_req_setup + sysfsm_setup */ + usleep(100*1000); + + // create pseudofs + ret_ihklib = ihk_os_create_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + //OKNG(ret_ihklib == 0 && + // strstr(buf, "/tmp/mcos/mcos0_sys") != NULL, "ihk_os_create_pseudofs()\n"); + + // mcexec + sprintf(cmd, "%s/bin/mcexec ls -l | grep Makefile", prefix); + fp = popen(cmd, "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + OKNG(strstr(buf, "Makefile") != NULL, "mcexec\n"); + + // shutdown +shutdown: + ret_ihklib = ihk_os_shutdown(0); + OKNG(ret_ihklib == 0, "shutdown immediately after boot returned 0\n"); + + // get status. Note that the smp_ihk_os_shutdown() transitions + // smp-x86 status to BUILTIN_OS_STATUS_SHUTDOWN + // and smp_ihk_os_query_status() transitions os status to IHK_OS_STATUS_NOT_BOOTED. + ret_ihklib = ihk_os_get_status(0); + //OKNG(ret_ihklib == IHK_STATUS_SHUTDOWN || + // ret_ihklib == IHK_STATUS_INACTIVE, "ihk_os_get_status (5) returned %d\n", ret_ihklib); + +destroy: + ret_ihklib = ihk_destroy_os(0, 0); + //OKNG(ret_ihklib == 0, "destroy immediately after boot\n"); + + sprintf(cmd, "rmmod %s/kmod/mcctrl.ko", prefix); + status = system(cmd); + + // destroy pseudofs + ret_ihklib = ihk_os_destroy_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + + sprintf(cmd, "rmmod %s/kmod/ihk-smp-x86_64.ko", prefix); + status = system(cmd); + + sprintf(cmd, "rmmod %s/kmod/ihk.ko", prefix); + status = system(cmd); + + printf("*** All tests finished\n\n"); + + fn_exit: + return ret; + fn_fail: + goto fn_exit; +} diff --git a/test/mng_mod/issues/898_928/CT_002 b/test/mng_mod/issues/898_928/CT_002 new file mode 100755 index 0000000000000000000000000000000000000000..b8d2dea336debda576d7fbdb2f433e7b42138e6b GIT binary patch literal 13826 zcmeHOeQX@Zb)UNvB}%f6Ct9^B$+6ZSN@N*4o@9w&6R5r;b<$F$J|a_!YKPuC-tCcR z-dAq-WKm60It&e+Rk>`CCW?VJLXZ|hn?KYqgON~?vQp7V-GWw|K!78FNbP`U%dnED zj%?YwzBe=PxVv}P2u9IA3J$UR=KbEsyq(#d*_(a*qj1j-x68$-xY_S9^7 zjy=R#iFL50EXeL>YuREz8sG?W2~trbdQ-Y4+9>rrKo`N$;TAxLJIE_U?-MX1N)aN( z_U21aRt5d$-GU{`n8E?H!&qlN#aW;cULm>VJB49?8>^={680Vc9pH$p0+pE_v z0U1A08i%%2vcG*xTPog~N@fa2T90(Jx3+Kb8(IHme%nSHXez z0Lq_#<rfCD|Y(_K8Xx`K`rtLbc?U#C8siQ7!0mTCCLZC5>vz-~ad@^Gu zSgv3iESJsc8DoTBJd@EOI5C?Sa6){sBEy{G`FKHV8N~HUxx*^&i_FRj%`y>EjX=JDBEYj z;le8AkOf~>L1BHe;5dg;8MNSc5ePJA!B<%DBNp7+ZzC4G$)bPEg3}s?;&BUZod-@@ zaQSM$y`8e)zhm*Qj$Uh2k2hSsM`7yNl-V%%1_;&BA2nVSO69GWK~!GA37laz} zgD5P`mZ7ZwG4eRnr5Vn@f;`@2r76yzMc#w_8P5M5@;KC`Q=I>6(lms*=L_XOPDs zD)~6yk30@diE;i(3@vUdweHSOdA0Ln# zeUm6E&o-?aL2Lp!(!X%i1Nv(574^c~kE^a3_4S(tFg}Zl>eyxTMxR=|BATdh7$DcLFXH&BquVB$LBYJg62htjle6#^2>RujzS19pNz*!3 zG6Y38PpHpbJH5osivRS*n;)0e;y>;KG9A8#VN8#m`rvjMhjV)D`%uGyoE|$3H5|g} zu^&JU2X8t&hxf$!*#{zQavb`KH$V68$K|qmV(iSV+vT&fa0{QGz-}x~3uzWQTuK3( zI|Ita@SBt1hs_zBnLU3Q3?{F@Y3>2kE{3nD#}8aVtMYANUx&_evGXo4K^MERy<&Jq zJ@IE;ejKW}VWse)+vzt(N4hkW7bP!-rIz9*ck-)EcM921O0QTm?J=HSC__2VR3l zP`T1b+y9;`Q@Fxz_>jhW#M%v`pdh7{_O*E<4C~xrGM+V*Aww;;sON@_RCXY~Eua<; zHC_t(_y}5q|K2U^_*v0i|16mC^VoR;lJe27%(AAj70?5d--UR@jdu{#Cr<-A_tA%y zTTtAfzp)1WZ=i=k!|jXrMiXyE-k_Jk656-ipd+aLTW-)FV0*vy2K6;tZqROf5HIj{ z-;`mApaWL@)pq?Sh5lq1bmmq7Q~ECU(N8O#(G8gBjQ2j^mm7h{U-k4WAEMV{cmkeDEG_@ zUijF9E92bNo6z>yyXO7mp{MwEPx1Zj;G?|iXX@xhm-@T!6yC-K^Qpej7ejrar$gGs z@%a{ieK9f4*I2ovy7*fd4~CyMZrrG>Hx&LttN>HHEMx19Hlsh8X-mfpGn;!fuc!2= zq5F+NmgjzAQB!Hl<+HK2bheN&4du(qKwi%&ZDu+LM(|#Ur+^0UnJk$x(%CpP+cpHW z4PV=bvNEJlIt#u?xV`ez^`q*;Oz|N+^|5 zO!%Q;DENEC7}VqZb}p#6 zY~u)fe9h-JKKAf~=mPb&!x4m-zP|`6A+PUwch`!=>Zr%_?M2W!U{Fve1;?u})#?az zdVPQ54trZ(^n|_2iA7=WhCgmly@BT!tKN>$CA+=Bl(!?~4TQWKI=xD#w*~Y&y^Z|( z{sGLdgCAUX7Ro{oEcC!a4=nV+LJutTz(Nl!^uR(7e3BkeU_Xr)qSA?ct*-1r6Q6U) zk2-kV^TtAZu+K{VE&*4*htQrbeFs@B<@9}Zt>oovH2;2w&=vVT72naZko>=Hm-$by zlkOnGm2bX>8U#;!-7{{%)86z;GCtaqZUI{?);(V2aRZhY*hIrZ@8D;oJ^h}bz4Lpy z7VLX33Gy1@s^lqdY7h7Dun-SFZTR(UkovG&$a&cuyDs@(Ee>+K|Em*y$9A^2Lw@Hv zC}~2{!;(HP>9-{PD@k9L^pd1MmGl>qzAx$GW#T&Tk@VA&woAH0(u0yZ+014fz6-%T6T7IeOB23U+EuFw)i{zTb0d$Oc_W$4*cc6Duv-*G16j+ZOy=j`QvIfW1nT^Ysz0CQ-x&S+ zpq9u-)4Dbo2V3HVg%-`{qr<|2>d(YL4ZKIw$rv;ZA3pKq=dB2j@X?a_V_DeB$(Wyf zXl#}^zv5g%^H_&F2;6*r4b86{gcHp>#6JWToYTm@*Bu0IK7U2w-24f*NUUWOFjjlh z9pqwDI((RO^CzeMb`Zf9O_tg}=?-$`lM?9Q-26JwD0w1#pt2kevZr-nMgqqq#dQO( zo$P6TJ_s1D31m;}%%KJVq0qV_xa$6U8U#3}lReGjzmf|T=09MO?keq&{t(D;jUb-Z zi4Ah0QP3EQGk$?GhU+%=DcRGyq)L0bPHNwI{a<(3(>fQC_OvddJ+A#u`xgPjex-Gp z@+5q6AzTA8YjKW$5rkIzfLtd6(w^_#SseIeo#;0m_LRRCkuL_TC@_Z|xqQiCPwz3N zY(R!V>b$Qj3{+0Rf$>xSkH8l;EF;qXDhe%y`j4Q~P_f!mzE`AKXlx-xNuB-ovcvvl zbC7GEl=dGUjtiwM{#s^9~ImgIS=9O&;|$f8_jF@eAa4z zLcaU#atNL6i&ko%JrG@oJ6I+3z|-Da6ZbH)CccQBtcf?UnVR@wM(Yr>6c4Plw7yti zxc){)>xLa)%4j{XBvLg0Du-`0;nPo2_8u%Yrt2zr?2; zcu3-Gxn2JYfV(Vl(({qvcy)iCkbWxr4Zvgh4je94JuVY~*Sf9?T)&0QQh&;ZUnTs3 z2-Fx0^0SzuYWcYgau?hu<9Cy$Fqq|db-$ssmY-`VfcR26}j zSf+y~E{GY|PMq<+Nl{QjlXr}drM{adMz`E*$L zH*BCUbDTrA)2nsxHvm^`nu2++j{dDWxDVFbmG0`i>-zw&<-Z;9TI0K&<2BZ!Sl%?u zLL%XhK^E|?uKik1_Y=L4LOq{ot(j>phN;$&?jUojEs&cf1S}Eo{ zal2ZT+Qgi3%Hig_Eh69BZXmM4?U-!OmR#=0RJWv>d@XKd zwZUj6jw$=yd!aYt$&6Mo^h$0z_AK8*;%VrVl5R;)=V|LQ9vLup0?&4LL{j6Q0Hh($ gub0{K4kHczuYm3y{D%X&U~F#rGn literal 0 HcmV?d00001 diff --git a/test/mng_mod/issues/898_928/CT_002.c b/test/mng_mod/issues/898_928/CT_002.c new file mode 100644 index 00000000..bdc9292d --- /dev/null +++ b/test/mng_mod/issues/898_928/CT_002.c @@ -0,0 +1,177 @@ +#include +#include +#include +#include +#include +#include + +#define MCK_DIR "/home/satoken/ppos" +static char prefix[256] = MCK_DIR; + +static char test_name[64] = "CT_002"; + +#define OKNG(cond, ...) \ + do { \ + if(cond) { \ + printf("[OK] "); \ + printf(__VA_ARGS__); \ + } else { \ + printf("[NG] "); \ + printf(__VA_ARGS__); \ + char buf[65536];\ + char cmd[256];\ + sprintf(cmd, "%s/sbin/ihkosctl 0 kmsg", prefix);\ + FILE* fp = popen(cmd, "r"); \ + size_t nread = fread(buf, 1, sizeof(buf), fp); \ + buf[nread] = 0; \ + printf("%s", buf); \ + goto fn_fail; \ + } \ + } while(0) + +int main(int argc, char** argv) { + int ret = 0, status, ret_ihklib; + FILE *fp; + char buf[65536]; + size_t nread; + + char cmd[1024]; + char fn[256]; + char kargs[256]; + + int cpus[4] = {6, 7, 8, 9}; + int num_cpus = 4; + + struct ihk_mem_chunk mem_chunks[4]; + int num_mem_chunks; + + printf("*** %s start *************************\n", test_name); + /*-------------------------------------------- + * Preparing + *--------------------------------------------*/ + sprintf(cmd, "%s/sbin/mcstop+release.sh", prefix); + status = system(cmd); + + // ihk_os_destroy_pseudofs + ret_ihklib = ihk_os_destroy_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + + sprintf(cmd, "insmod %s/kmod/ihk.ko", prefix); + status = system(cmd); + + sprintf(cmd, "insmod %s/kmod/ihk-smp-x86_64.ko ihk_start_irq=240 ihk_ikc_irq_core=0", prefix); + status = system(cmd); + + sprintf(cmd, "insmod %s/kmod/mcctrl.ko", prefix); + status = system(cmd); + + /*-------------------------------------------- + * Test + *--------------------------------------------*/ + // create 0 + ret_ihklib = ihk_create_os(0); + + // reserve cpus + ret_ihklib = ihk_reserve_cpu(0, cpus, num_cpus); + //OKNG(ret_ihklib == 0, "ihk_reserve_cpu\n"); + + // assign cpus + ret_ihklib = ihk_os_assign_cpu(0, cpus, num_cpus); + //OKNG(ret_ihklib == 0, "ihk_os_assign_cpu\n"); + + // reserve mem 128m@0,128m@1 + num_mem_chunks = 2; + mem_chunks[0].size = 128*1024*1024ULL; + mem_chunks[0].numa_node_number = 0; + mem_chunks[1].size = 128*1024*1024ULL; + mem_chunks[1].numa_node_number = 1; + ret_ihklib = ihk_reserve_mem(0, mem_chunks, num_mem_chunks); + //OKNG(ret_ihklib == 0, "ihk_reserve_mem (2)\n"); + + // assign mem 128m@0,128m@1 + num_mem_chunks = 2; + mem_chunks[0].size = 128*1024*1024ULL; + mem_chunks[0].numa_node_number = 0; + mem_chunks[1].size = 128*1024*1024ULL; + mem_chunks[1].numa_node_number = 1; + ret_ihklib = ihk_os_assign_mem(0, mem_chunks, num_mem_chunks); + //OKNG(ret_ihklib == 0, "ihk_os_assign_mem (2)\n"); + + // load + sprintf(fn, "%s/smp-x86/kernel/mckernel.img", prefix); + ret_ihklib = ihk_os_load(0, fn); + //OKNG(ret_ihklib == 0, "ihk_os_load\n"); + + // kargs + sprintf(kargs, "hidos ksyslogd=0"); + ret_ihklib = ihk_os_kargs(0, kargs); + //OKNG(ret_ihklib == 0, "ihk_os_kargs\n"); + + // boot + ret_ihklib = ihk_os_boot(0); +goto destroy; + OKNG(ret_ihklib == 0, "ihk_os_boot\n"); + + /* Make sure that all initialization related transactions between McKernel and IHK finish + sysfs_init(void) (in mckernel/kernel/sysfs.c) + packet.msg = SCD_MSG_SYSFS_REQ_SETUP; + sysfsm_work_main() in (mckernel/executer/kernel/mcctrl/sysfs.c) + sysfsm_req_setup + sysfsm_setup */ + usleep(100*1000); + + // create pseudofs + ret_ihklib = ihk_os_create_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + //OKNG(ret_ihklib == 0 && + // strstr(buf, "/tmp/mcos/mcos0_sys") != NULL, "ihk_os_create_pseudofs()\n"); + + // mcexec + sprintf(cmd, "%s/bin/mcexec ls -l | grep Makefile", prefix); + fp = popen(cmd, "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + OKNG(strstr(buf, "Makefile") != NULL, "mcexec\n"); + + // shutdown +shutdown: + ret_ihklib = ihk_os_shutdown(0); + //OKNG(ret_ihklib == 0, "shutdown immediately after boot\n"); + + // get status. Note that the smp_ihk_os_shutdown() transitions + // smp-x86 status to BUILTIN_OS_STATUS_SHUTDOWN + // and smp_ihk_os_query_status() transitions os status to IHK_OS_STATUS_NOT_BOOTED. + ret_ihklib = ihk_os_get_status(0); + //OKNG(ret_ihklib == IHK_STATUS_SHUTDOWN || + // ret_ihklib == IHK_STATUS_INACTIVE, "ihk_os_get_status (5) returned %d\n", ret_ihklib); + +destroy: + ret_ihklib = ihk_destroy_os(0, 0); + OKNG(ret_ihklib == 0, "destroy immediately after boot returned NOT 0\n"); + + sprintf(cmd, "rmmod %s/kmod/mcctrl.ko", prefix); + status = system(cmd); + + // destroy pseudofs + ret_ihklib = ihk_os_destroy_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + + sprintf(cmd, "rmmod %s/kmod/ihk-smp-x86_64.ko", prefix); + status = system(cmd); + + sprintf(cmd, "rmmod %s/kmod/ihk.ko", prefix); + status = system(cmd); + + printf("*** All tests finished\n\n"); + + fn_exit: + return ret; + fn_fail: + goto fn_exit; +} diff --git a/test/mng_mod/issues/898_928/CT_003 b/test/mng_mod/issues/898_928/CT_003 new file mode 100755 index 0000000000000000000000000000000000000000..4add0d1eb3bd79c51723a8b56fe1f357ecb7a38d GIT binary patch literal 14075 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 +#include +#include +#include +#include +#include + +#define MCK_DIR "/home/satoken/ppos" +static char prefix[256] = MCK_DIR; + +static char test_name[64] = "CT_003"; + +#define OKNG(cond, ...) \ + do { \ + if(cond) { \ + printf("[OK] "); \ + printf(__VA_ARGS__); \ + } else { \ + printf("[NG] "); \ + printf(__VA_ARGS__); \ + char buf[65536];\ + char cmd[256];\ + sprintf(cmd, "%s/sbin/ihkosctl 0 kmsg", prefix);\ + FILE* fp = popen(cmd, "r"); \ + size_t nread = fread(buf, 1, sizeof(buf), fp); \ + buf[nread] = 0; \ + printf("%s", buf); \ + goto fn_fail; \ + } \ + } while(0) + +int main(int argc, char** argv) { + int ret = 0, status, ret_ihklib; + FILE *fp; + char buf[65536]; + size_t nread; + + char cmd[1024]; + char fn[256]; + char kargs[256]; + + int cpus[4] = {6, 7, 8, 9}; + int num_cpus = 4; + + struct ihk_mem_chunk mem_chunks[4]; + int num_mem_chunks; + + printf("*** %s start *************************\n", test_name); + /*-------------------------------------------- + * Preparing + *--------------------------------------------*/ + sprintf(cmd, "%s/sbin/mcstop+release.sh", prefix); + status = system(cmd); + + // ihk_os_destroy_pseudofs + ret_ihklib = ihk_os_destroy_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + + sprintf(cmd, "insmod %s/kmod/ihk.ko", prefix); + status = system(cmd); + + sprintf(cmd, "insmod %s/kmod/ihk-smp-x86_64.ko ihk_start_irq=240 ihk_ikc_irq_core=0", prefix); + status = system(cmd); + + sprintf(cmd, "insmod %s/kmod/mcctrl.ko", prefix); + status = system(cmd); + + /*-------------------------------------------- + * Test + *--------------------------------------------*/ + // create 0 + ret_ihklib = ihk_create_os(0); + + // reserve cpus + ret_ihklib = ihk_reserve_cpu(0, cpus, num_cpus); + //OKNG(ret_ihklib == 0, "ihk_reserve_cpu\n"); + + // assign cpus + ret_ihklib = ihk_os_assign_cpu(0, cpus, num_cpus); + //OKNG(ret_ihklib == 0, "ihk_os_assign_cpu\n"); + + // reserve mem 128m@0,128m@1 + num_mem_chunks = 2; + mem_chunks[0].size = 128*1024*1024ULL; + mem_chunks[0].numa_node_number = 0; + mem_chunks[1].size = 128*1024*1024ULL; + mem_chunks[1].numa_node_number = 1; + ret_ihklib = ihk_reserve_mem(0, mem_chunks, num_mem_chunks); + //OKNG(ret_ihklib == 0, "ihk_reserve_mem (2)\n"); + + // assign mem 128m@0,128m@1 + num_mem_chunks = 2; + mem_chunks[0].size = 128*1024*1024ULL; + mem_chunks[0].numa_node_number = 0; + mem_chunks[1].size = 128*1024*1024ULL; + mem_chunks[1].numa_node_number = 1; + ret_ihklib = ihk_os_assign_mem(0, mem_chunks, num_mem_chunks); + //OKNG(ret_ihklib == 0, "ihk_os_assign_mem (2)\n"); + + // load + sprintf(fn, "%s/smp-x86/kernel/mckernel.img", prefix); + ret_ihklib = ihk_os_load(0, fn); + //OKNG(ret_ihklib == 0, "ihk_os_load\n"); + + // kargs + sprintf(kargs, "hidos ksyslogd=0"); + ret_ihklib = ihk_os_kargs(0, kargs); + //OKNG(ret_ihklib == 0, "ihk_os_kargs\n"); + + // boot + ret_ihklib = ihk_os_boot(0); + OKNG(ret_ihklib == 0, "ihk_os_boot\n"); + + /* Make sure that all initialization related transactions between McKernel and IHK finish + sysfs_init(void) (in mckernel/kernel/sysfs.c) + packet.msg = SCD_MSG_SYSFS_REQ_SETUP; + sysfsm_work_main() in (mckernel/executer/kernel/mcctrl/sysfs.c) + sysfsm_req_setup + sysfsm_setup */ + usleep(100*1000); + + // create pseudofs + ret_ihklib = ihk_os_create_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + //OKNG(ret_ihklib == 0 && + // strstr(buf, "/tmp/mcos/mcos0_sys") != NULL, "ihk_os_create_pseudofs()\n"); + + // mcexec + sprintf(cmd, "%s/bin/mcexec ls -l | grep Makefile", prefix); + fp = popen(cmd, "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + OKNG(strstr(buf, "Makefile") != NULL, "done mcexec\n"); + + // shutdown +shutdown: + ret_ihklib = ihk_os_shutdown(0); + OKNG(ret_ihklib == 0, "shutdown after mcexec returned 0\n"); + + // get status. Note that the smp_ihk_os_shutdown() transitions + // smp-x86 status to BUILTIN_OS_STATUS_SHUTDOWN + // and smp_ihk_os_query_status() transitions os status to IHK_OS_STATUS_NOT_BOOTED. + ret_ihklib = ihk_os_get_status(0); + //OKNG(ret_ihklib == IHK_STATUS_SHUTDOWN || + // ret_ihklib == IHK_STATUS_INACTIVE, "ihk_os_get_status (5) returned %d\n", ret_ihklib); + +destroy: + ret_ihklib = ihk_destroy_os(0, 0); + //OKNG(ret_ihklib == 0, "destroy immediately after boot\n"); + + sprintf(cmd, "rmmod %s/kmod/mcctrl.ko", prefix); + status = system(cmd); + + // destroy pseudofs + ret_ihklib = ihk_os_destroy_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + + sprintf(cmd, "rmmod %s/kmod/ihk-smp-x86_64.ko", prefix); + status = system(cmd); + + sprintf(cmd, "rmmod %s/kmod/ihk.ko", prefix); + status = system(cmd); + + printf("*** All tests finished\n\n"); + + fn_exit: + return ret; + fn_fail: + goto fn_exit; +} diff --git a/test/mng_mod/issues/898_928/CT_004 b/test/mng_mod/issues/898_928/CT_004 new file mode 100755 index 0000000000000000000000000000000000000000..cd22faf09edc8ccb451f53271f2cfcec85d36151 GIT binary patch literal 13961 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 l9ZDMfxdBZn{5u4?6KsElfM&{n4 +#include +#include +#include +#include +#include + +#define MCK_DIR "/home/satoken/ppos" +static char prefix[256] = MCK_DIR; + +static char test_name[64] = "CT_004"; + +#define OKNG(cond, ...) \ + do { \ + if(cond) { \ + printf("[OK] "); \ + printf(__VA_ARGS__); \ + } else { \ + printf("[NG] "); \ + printf(__VA_ARGS__); \ + char buf[65536];\ + char cmd[256];\ + sprintf(cmd, "%s/sbin/ihkosctl 0 kmsg", prefix);\ + FILE* fp = popen(cmd, "r"); \ + size_t nread = fread(buf, 1, sizeof(buf), fp); \ + buf[nread] = 0; \ + printf("%s", buf); \ + goto fn_fail; \ + } \ + } while(0) + +int main(int argc, char** argv) { + int ret = 0, status, ret_ihklib; + FILE *fp; + char buf[65536]; + size_t nread; + + char cmd[1024]; + char fn[256]; + char kargs[256]; + + int cpus[4] = {6, 7, 8, 9}; + int num_cpus = 4; + + struct ihk_mem_chunk mem_chunks[4]; + int num_mem_chunks; + + printf("*** %s start *************************\n", test_name); + /*-------------------------------------------- + * Preparing + *--------------------------------------------*/ + sprintf(cmd, "%s/sbin/mcstop+release.sh", prefix); + status = system(cmd); + + // ihk_os_destroy_pseudofs + ret_ihklib = ihk_os_destroy_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + + sprintf(cmd, "insmod %s/kmod/ihk.ko", prefix); + status = system(cmd); + + sprintf(cmd, "insmod %s/kmod/ihk-smp-x86_64.ko ihk_start_irq=240 ihk_ikc_irq_core=0", prefix); + status = system(cmd); + + sprintf(cmd, "insmod %s/kmod/mcctrl.ko", prefix); + status = system(cmd); + + /*-------------------------------------------- + * Test + *--------------------------------------------*/ + // create 0 + ret_ihklib = ihk_create_os(0); + + // reserve cpus + ret_ihklib = ihk_reserve_cpu(0, cpus, num_cpus); + //OKNG(ret_ihklib == 0, "ihk_reserve_cpu\n"); + + // assign cpus + ret_ihklib = ihk_os_assign_cpu(0, cpus, num_cpus); + //OKNG(ret_ihklib == 0, "ihk_os_assign_cpu\n"); + + // reserve mem 128m@0,128m@1 + num_mem_chunks = 2; + mem_chunks[0].size = 128*1024*1024ULL; + mem_chunks[0].numa_node_number = 0; + mem_chunks[1].size = 128*1024*1024ULL; + mem_chunks[1].numa_node_number = 1; + ret_ihklib = ihk_reserve_mem(0, mem_chunks, num_mem_chunks); + //OKNG(ret_ihklib == 0, "ihk_reserve_mem (2)\n"); + + // assign mem 128m@0,128m@1 + num_mem_chunks = 2; + mem_chunks[0].size = 128*1024*1024ULL; + mem_chunks[0].numa_node_number = 0; + mem_chunks[1].size = 128*1024*1024ULL; + mem_chunks[1].numa_node_number = 1; + ret_ihklib = ihk_os_assign_mem(0, mem_chunks, num_mem_chunks); + //OKNG(ret_ihklib == 0, "ihk_os_assign_mem (2)\n"); + + // load + sprintf(fn, "%s/smp-x86/kernel/mckernel.img", prefix); + ret_ihklib = ihk_os_load(0, fn); + //OKNG(ret_ihklib == 0, "ihk_os_load\n"); + + // kargs + sprintf(kargs, "hidos ksyslogd=0"); + ret_ihklib = ihk_os_kargs(0, kargs); + //OKNG(ret_ihklib == 0, "ihk_os_kargs\n"); + + // boot + ret_ihklib = ihk_os_boot(0); + OKNG(ret_ihklib == 0, "ihk_os_boot\n"); + + /* Make sure that all initialization related transactions between McKernel and IHK finish + sysfs_init(void) (in mckernel/kernel/sysfs.c) + packet.msg = SCD_MSG_SYSFS_REQ_SETUP; + sysfsm_work_main() in (mckernel/executer/kernel/mcctrl/sysfs.c) + sysfsm_req_setup + sysfsm_setup */ + usleep(100*1000); + + // create pseudofs + ret_ihklib = ihk_os_create_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + //OKNG(ret_ihklib == 0 && + // strstr(buf, "/tmp/mcos/mcos0_sys") != NULL, "ihk_os_create_pseudofs()\n"); + + // mcexec + sprintf(cmd, "%s/bin/mcexec ls -l | grep Makefile", prefix); + fp = popen(cmd, "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + OKNG(strstr(buf, "Makefile") != NULL, "do mcexec\n"); +goto destroy; + + // shutdown +shutdown: + ret_ihklib = ihk_os_shutdown(0); + //OKNG(ret_ihklib == 0, "shutdown after mcexec\n"); + + // get status. Note that the smp_ihk_os_shutdown() transitions + // smp-x86 status to BUILTIN_OS_STATUS_SHUTDOWN + // and smp_ihk_os_query_status() transitions os status to IHK_OS_STATUS_NOT_BOOTED. + ret_ihklib = ihk_os_get_status(0); + //OKNG(ret_ihklib == IHK_STATUS_SHUTDOWN || + // ret_ihklib == IHK_STATUS_INACTIVE, "ihk_os_get_status (5) returned %d\n", ret_ihklib); + +destroy: + ret_ihklib = ihk_destroy_os(0, 0); + OKNG(ret_ihklib == 0, "destroy after mcexec returned 0\n"); + + sprintf(cmd, "rmmod %s/kmod/mcctrl.ko", prefix); + status = system(cmd); + + // destroy pseudofs + ret_ihklib = ihk_os_destroy_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + + sprintf(cmd, "rmmod %s/kmod/ihk-smp-x86_64.ko", prefix); + status = system(cmd); + + sprintf(cmd, "rmmod %s/kmod/ihk.ko", prefix); + status = system(cmd); + + printf("*** All tests finished\n\n"); + + fn_exit: + return ret; + fn_fail: + goto fn_exit; +} diff --git a/test/mng_mod/issues/898_928/CT_005 b/test/mng_mod/issues/898_928/CT_005 new file mode 100755 index 0000000000000000000000000000000000000000..522159477c2adf58cf7fd35bebfc9df692a6a675 GIT binary patch literal 13960 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 F`!6Rabc+B0 literal 0 HcmV?d00001 diff --git a/test/mng_mod/issues/898_928/CT_005.c b/test/mng_mod/issues/898_928/CT_005.c new file mode 100644 index 00000000..ce454a7f --- /dev/null +++ b/test/mng_mod/issues/898_928/CT_005.c @@ -0,0 +1,183 @@ +#include +#include +#include +#include +#include +#include + +#define MCK_DIR "/home/satoken/ppos" +static char prefix[256] = MCK_DIR; + +static char test_name[64] = "CT_005"; + +#define OKNG(cond, ...) \ + do { \ + if(cond) { \ + printf("[OK] "); \ + printf(__VA_ARGS__); \ + } else { \ + printf("[NG] "); \ + printf(__VA_ARGS__); \ + char buf[65536];\ + char cmd[256];\ + sprintf(cmd, "%s/sbin/ihkosctl 0 kmsg", prefix);\ + FILE* fp = popen(cmd, "r"); \ + size_t nread = fread(buf, 1, sizeof(buf), fp); \ + buf[nread] = 0; \ + printf("%s", buf); \ + goto fn_fail; \ + } \ + } while(0) + +int main(int argc, char** argv) { + int ret = 0, status, ret_ihklib, pid; + FILE *fp; + char buf[65536]; + size_t nread; + + char cmd[1024]; + char fn[256]; + char kargs[256]; + + int cpus[4] = {6, 7, 8, 9}; + int num_cpus = 4; + + struct ihk_mem_chunk mem_chunks[4]; + int num_mem_chunks; + + printf("*** %s start *************************\n", test_name); + /*-------------------------------------------- + * Preparing + *--------------------------------------------*/ + sprintf(cmd, "%s/sbin/mcstop+release.sh", prefix); + status = system(cmd); + + // ihk_os_destroy_pseudofs + ret_ihklib = ihk_os_destroy_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + + sprintf(cmd, "insmod %s/kmod/ihk.ko", prefix); + status = system(cmd); + + sprintf(cmd, "insmod %s/kmod/ihk-smp-x86_64.ko ihk_start_irq=240 ihk_ikc_irq_core=0", prefix); + status = system(cmd); + + sprintf(cmd, "insmod %s/kmod/mcctrl.ko", prefix); + status = system(cmd); + + /*-------------------------------------------- + * Test + *--------------------------------------------*/ + // create 0 + ret_ihklib = ihk_create_os(0); + + // reserve cpus + ret_ihklib = ihk_reserve_cpu(0, cpus, num_cpus); + //OKNG(ret_ihklib == 0, "ihk_reserve_cpu\n"); + + // assign cpus + ret_ihklib = ihk_os_assign_cpu(0, cpus, num_cpus); + //OKNG(ret_ihklib == 0, "ihk_os_assign_cpu\n"); + + // reserve mem 128m@0,128m@1 + num_mem_chunks = 2; + mem_chunks[0].size = 128*1024*1024ULL; + mem_chunks[0].numa_node_number = 0; + mem_chunks[1].size = 128*1024*1024ULL; + mem_chunks[1].numa_node_number = 1; + ret_ihklib = ihk_reserve_mem(0, mem_chunks, num_mem_chunks); + //OKNG(ret_ihklib == 0, "ihk_reserve_mem (2)\n"); + + // assign mem 128m@0,128m@1 + num_mem_chunks = 2; + mem_chunks[0].size = 128*1024*1024ULL; + mem_chunks[0].numa_node_number = 0; + mem_chunks[1].size = 128*1024*1024ULL; + mem_chunks[1].numa_node_number = 1; + ret_ihklib = ihk_os_assign_mem(0, mem_chunks, num_mem_chunks); + //OKNG(ret_ihklib == 0, "ihk_os_assign_mem (2)\n"); + + // load + sprintf(fn, "%s/smp-x86/kernel/mckernel.img", prefix); + ret_ihklib = ihk_os_load(0, fn); + //OKNG(ret_ihklib == 0, "ihk_os_load\n"); + + // kargs + sprintf(kargs, "hidos ksyslogd=0"); + ret_ihklib = ihk_os_kargs(0, kargs); + //OKNG(ret_ihklib == 0, "ihk_os_kargs\n"); + + // boot + ret_ihklib = ihk_os_boot(0); + OKNG(ret_ihklib == 0, "ihk_os_boot\n"); + + /* Make sure that all initialization related transactions between McKernel and IHK finish + sysfs_init(void) (in mckernel/kernel/sysfs.c) + packet.msg = SCD_MSG_SYSFS_REQ_SETUP; + sysfsm_work_main() in (mckernel/executer/kernel/mcctrl/sysfs.c) + sysfsm_req_setup + sysfsm_setup */ + usleep(100*1000); + + // create pseudofs + ret_ihklib = ihk_os_create_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + //OKNG(ret_ihklib == 0 && + // strstr(buf, "/tmp/mcos/mcos0_sys") != NULL, "ihk_os_create_pseudofs()\n"); + + // mcexec + pid = fork(); + if (pid == 0) { + printf(" start long mcexec...\n"); + sprintf(cmd, "%s/bin/mcexec sleep 5", prefix); + fp = popen(cmd, "r"); + nread = fread(buf, 1, sizeof(buf), fp); + return 0; + } + usleep(100*1000); + + // shutdown +shutdown: + ret_ihklib = ihk_os_shutdown(0); + OKNG(ret_ihklib == 0, "shutdown during mcexec returned 0\n"); + printf(" (But, mcexec process remain due to #846)\n"); +goto done_test; + + // get status. Note that the smp_ihk_os_shutdown() transitions + // smp-x86 status to BUILTIN_OS_STATUS_SHUTDOWN + // and smp_ihk_os_query_status() transitions os status to IHK_OS_STATUS_NOT_BOOTED. + ret_ihklib = ihk_os_get_status(0); + //OKNG(ret_ihklib == IHK_STATUS_SHUTDOWN || + // ret_ihklib == IHK_STATUS_INACTIVE, "ihk_os_get_status (5) returned %d\n", ret_ihklib); + +destroy: + ret_ihklib = ihk_destroy_os(0, 0); + //OKNG(ret_ihklib == 0, "destroy immediately after boot\n"); + + sprintf(cmd, "rmmod %s/kmod/mcctrl.ko", prefix); + status = system(cmd); + + // destroy pseudofs + ret_ihklib = ihk_os_destroy_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + + sprintf(cmd, "rmmod %s/kmod/ihk-smp-x86_64.ko", prefix); + status = system(cmd); + + sprintf(cmd, "rmmod %s/kmod/ihk.ko", prefix); + status = system(cmd); + + done_test: + printf("*** All tests finished\n\n"); + + fn_exit: + return ret; + fn_fail: + goto fn_exit; +} diff --git a/test/mng_mod/issues/898_928/CT_006 b/test/mng_mod/issues/898_928/CT_006 new file mode 100755 index 0000000000000000000000000000000000000000..2ebc21f607d4a6a5acf3e42d964b22b98891b1fd GIT binary patch literal 14124 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 literal 0 HcmV?d00001 diff --git a/test/mng_mod/issues/898_928/CT_006.c b/test/mng_mod/issues/898_928/CT_006.c new file mode 100644 index 00000000..04b39611 --- /dev/null +++ b/test/mng_mod/issues/898_928/CT_006.c @@ -0,0 +1,187 @@ +#include +#include +#include +#include +#include +#include + +#define MCK_DIR "/home/satoken/ppos" +static char prefix[256] = MCK_DIR; + +static char test_name[64] = "CT_006"; + +#define OKNG(cond, ...) \ + do { \ + if(cond) { \ + printf("[OK] "); \ + printf(__VA_ARGS__); \ + } else { \ + printf("[NG] "); \ + printf(__VA_ARGS__); \ + char buf[65536];\ + char cmd[256];\ + sprintf(cmd, "%s/sbin/ihkosctl 0 kmsg", prefix);\ + FILE* fp = popen(cmd, "r"); \ + size_t nread = fread(buf, 1, sizeof(buf), fp); \ + buf[nread] = 0; \ + printf("%s", buf); \ + goto fn_fail; \ + } \ + } while(0) + +int main(int argc, char** argv) { + int ret = 0, status, ret_ihklib, pid; + FILE *fp; + char buf[65536]; + size_t nread; + + char cmd[1024]; + char fn[256]; + char kargs[256]; + + int cpus[4] = {6, 7, 8, 9}; + int num_cpus = 4; + + struct ihk_mem_chunk mem_chunks[4]; + int num_mem_chunks; + + printf("*** %s start *************************\n", test_name); + /*-------------------------------------------- + * Preparing + *--------------------------------------------*/ + sprintf(cmd, "%s/sbin/mcstop+release.sh", prefix); + status = system(cmd); + + // ihk_os_destroy_pseudofs + ret_ihklib = ihk_os_destroy_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + + sprintf(cmd, "insmod %s/kmod/ihk.ko", prefix); + status = system(cmd); + + sprintf(cmd, "insmod %s/kmod/ihk-smp-x86_64.ko ihk_start_irq=240 ihk_ikc_irq_core=0", prefix); + status = system(cmd); + + sprintf(cmd, "insmod %s/kmod/mcctrl.ko", prefix); + status = system(cmd); + + /*-------------------------------------------- + * Test + *--------------------------------------------*/ + // create 0 + ret_ihklib = ihk_create_os(0); + + // reserve cpus + ret_ihklib = ihk_reserve_cpu(0, cpus, num_cpus); + //OKNG(ret_ihklib == 0, "ihk_reserve_cpu\n"); + + // assign cpus + ret_ihklib = ihk_os_assign_cpu(0, cpus, num_cpus); + //OKNG(ret_ihklib == 0, "ihk_os_assign_cpu\n"); + + // reserve mem 128m@0,128m@1 + num_mem_chunks = 2; + mem_chunks[0].size = 128*1024*1024ULL; + mem_chunks[0].numa_node_number = 0; + mem_chunks[1].size = 128*1024*1024ULL; + mem_chunks[1].numa_node_number = 1; + ret_ihklib = ihk_reserve_mem(0, mem_chunks, num_mem_chunks); + //OKNG(ret_ihklib == 0, "ihk_reserve_mem (2)\n"); + + // assign mem 128m@0,128m@1 + num_mem_chunks = 2; + mem_chunks[0].size = 128*1024*1024ULL; + mem_chunks[0].numa_node_number = 0; + mem_chunks[1].size = 128*1024*1024ULL; + mem_chunks[1].numa_node_number = 1; + ret_ihklib = ihk_os_assign_mem(0, mem_chunks, num_mem_chunks); + //OKNG(ret_ihklib == 0, "ihk_os_assign_mem (2)\n"); + + // load + sprintf(fn, "%s/smp-x86/kernel/mckernel.img", prefix); + ret_ihklib = ihk_os_load(0, fn); + //OKNG(ret_ihklib == 0, "ihk_os_load\n"); + + // kargs + sprintf(kargs, "hidos ksyslogd=0"); + ret_ihklib = ihk_os_kargs(0, kargs); + //OKNG(ret_ihklib == 0, "ihk_os_kargs\n"); + + // boot + ret_ihklib = ihk_os_boot(0); + OKNG(ret_ihklib == 0, "ihk_os_boot\n"); + + /* Make sure that all initialization related transactions between McKernel and IHK finish + sysfs_init(void) (in mckernel/kernel/sysfs.c) + packet.msg = SCD_MSG_SYSFS_REQ_SETUP; + sysfsm_work_main() in (mckernel/executer/kernel/mcctrl/sysfs.c) + sysfsm_req_setup + sysfsm_setup */ + usleep(100*1000); + + // create pseudofs + ret_ihklib = ihk_os_create_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + //OKNG(ret_ihklib == 0 && + // strstr(buf, "/tmp/mcos/mcos0_sys") != NULL, "ihk_os_create_pseudofs()\n"); + + // mcexec + fflush(stdout); + pid = fork(); + if (pid == 0) { + printf(" start long mcexec...\n"); + sprintf(cmd, "%s/bin/mcexec sleep 5", prefix); + fp = popen(cmd, "r"); + nread = fread(buf, 1, sizeof(buf), fp); + return 0; + } + usleep(100*1000); +goto destroy; + + // shutdown +shutdown: + ret_ihklib = ihk_os_shutdown(0); + OKNG(ret_ihklib == 0, "shutdown during mcexec\n"); + + // get status. Note that the smp_ihk_os_shutdown() transitions + // smp-x86 status to BUILTIN_OS_STATUS_SHUTDOWN + // and smp_ihk_os_query_status() transitions os status to IHK_OS_STATUS_NOT_BOOTED. + ret_ihklib = ihk_os_get_status(0); + //OKNG(ret_ihklib == IHK_STATUS_SHUTDOWN || + // ret_ihklib == IHK_STATUS_INACTIVE, "ihk_os_get_status (5) returned %d\n", ret_ihklib); + +destroy: + ret_ihklib = ihk_destroy_os(0, 0); + OKNG(ret_ihklib != 0, "destroy during mcexec returned NOT 0\n"); + + // wait for child process + waitpid(pid, &status, 0); + usleep(100*1000); + + sprintf(cmd, "rmmod %s/kmod/mcctrl.ko", prefix); + status = system(cmd); + + // destroy pseudofs + ret_ihklib = ihk_os_destroy_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + + sprintf(cmd, "rmmod %s/kmod/ihk-smp-x86_64.ko", prefix); + status = system(cmd); + + sprintf(cmd, "rmmod %s/kmod/ihk.ko", prefix); + status = system(cmd); + + done_test: + printf("*** All tests finished\n\n"); + + fn_exit: + return ret; + fn_fail: + goto fn_exit; +} diff --git a/test/mng_mod/issues/898_928/CT_007 b/test/mng_mod/issues/898_928/CT_007 new file mode 100755 index 0000000000000000000000000000000000000000..f0bbbb46c6ab2b1f55460cea3b46810ee2015c6b GIT binary patch literal 13835 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 qyQ^+B{u@9V@<4kTE$=eY;U5fW65)Ry(A; +#include +#include +#include +#include +#include + +#define MCK_DIR "/home/satoken/ppos" +static char prefix[256] = MCK_DIR; + +static char test_name[64] = "CT_007"; + +#define OKNG(cond, ...) \ + do { \ + if(cond) { \ + printf("[OK] "); \ + printf(__VA_ARGS__); \ + } else { \ + printf("[NG] "); \ + printf(__VA_ARGS__); \ + char buf[65536];\ + char cmd[256];\ + sprintf(cmd, "%s/sbin/ihkosctl 0 kmsg", prefix);\ + FILE* fp = popen(cmd, "r"); \ + size_t nread = fread(buf, 1, sizeof(buf), fp); \ + buf[nread] = 0; \ + printf("%s", buf); \ + goto fn_fail; \ + } \ + } while(0) + +int main(int argc, char** argv) { + int ret = 0, status, ret_ihklib; + FILE *fp; + char buf[65536]; + size_t nread; + + char cmd[1024]; + char fn[256]; + char kargs[256]; + + int cpus[4] = {6, 7, 8, 9}; + int num_cpus = 4; + + struct ihk_mem_chunk mem_chunks[4]; + int num_mem_chunks; + + printf("*** %s start *************************\n", test_name); + /*-------------------------------------------- + * Preparing + *--------------------------------------------*/ + sprintf(cmd, "%s/sbin/mcstop+release.sh", prefix); + status = system(cmd); + + // ihk_os_destroy_pseudofs + ret_ihklib = ihk_os_destroy_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + + sprintf(cmd, "insmod %s/kmod/ihk.ko", prefix); + status = system(cmd); + + sprintf(cmd, "insmod %s/kmod/ihk-smp-x86_64.ko ihk_start_irq=240 ihk_ikc_irq_core=0", prefix); + status = system(cmd); + + sprintf(cmd, "insmod %s/kmod/mcctrl.ko", prefix); + status = system(cmd); + + /*-------------------------------------------- + * Test + *--------------------------------------------*/ + // create 0 + ret_ihklib = ihk_create_os(0); + + // reserve cpus + ret_ihklib = ihk_reserve_cpu(0, cpus, num_cpus); + //OKNG(ret_ihklib == 0, "ihk_reserve_cpu\n"); + + // assign cpus + ret_ihklib = ihk_os_assign_cpu(0, cpus, num_cpus); + //OKNG(ret_ihklib == 0, "ihk_os_assign_cpu\n"); + + // reserve mem 128m@0,128m@1 + num_mem_chunks = 2; + mem_chunks[0].size = 128*1024*1024ULL; + mem_chunks[0].numa_node_number = 0; + mem_chunks[1].size = 128*1024*1024ULL; + mem_chunks[1].numa_node_number = 1; + ret_ihklib = ihk_reserve_mem(0, mem_chunks, num_mem_chunks); + //OKNG(ret_ihklib == 0, "ihk_reserve_mem (2)\n"); + + // assign mem 128m@0,128m@1 + num_mem_chunks = 2; + mem_chunks[0].size = 128*1024*1024ULL; + mem_chunks[0].numa_node_number = 0; + mem_chunks[1].size = 128*1024*1024ULL; + mem_chunks[1].numa_node_number = 1; + ret_ihklib = ihk_os_assign_mem(0, mem_chunks, num_mem_chunks); + //OKNG(ret_ihklib == 0, "ihk_os_assign_mem (2)\n"); + + // load + sprintf(fn, "%s/smp-x86/kernel/mckernel.img", prefix); + ret_ihklib = ihk_os_load(0, fn); +goto shutdown; + //OKNG(ret_ihklib == 0, "ihk_os_load\n"); + + // kargs + sprintf(kargs, "hidos ksyslogd=0"); + ret_ihklib = ihk_os_kargs(0, kargs); + //OKNG(ret_ihklib == 0, "ihk_os_kargs\n"); + + // boot + ret_ihklib = ihk_os_boot(0); + OKNG(ret_ihklib == 0, "ihk_os_boot\n"); + + /* Make sure that all initialization related transactions between McKernel and IHK finish + sysfs_init(void) (in mckernel/kernel/sysfs.c) + packet.msg = SCD_MSG_SYSFS_REQ_SETUP; + sysfsm_work_main() in (mckernel/executer/kernel/mcctrl/sysfs.c) + sysfsm_req_setup + sysfsm_setup */ + usleep(100*1000); + + // create pseudofs + ret_ihklib = ihk_os_create_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + //OKNG(ret_ihklib == 0 && + // strstr(buf, "/tmp/mcos/mcos0_sys") != NULL, "ihk_os_create_pseudofs()\n"); + + // mcexec + sprintf(cmd, "%s/bin/mcexec ls -l | grep Makefile", prefix); + fp = popen(cmd, "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + OKNG(strstr(buf, "Makefile") != NULL, "mcexec\n"); + + // shutdown +shutdown: + ret_ihklib = ihk_os_shutdown(0); + OKNG(ret_ihklib == 0, "shutdown before boot returned 0\n"); + + // get status. Note that the smp_ihk_os_shutdown() transitions + // smp-x86 status to BUILTIN_OS_STATUS_SHUTDOWN + // and smp_ihk_os_query_status() transitions os status to IHK_OS_STATUS_NOT_BOOTED. + ret_ihklib = ihk_os_get_status(0); + //OKNG(ret_ihklib == IHK_STATUS_SHUTDOWN || + // ret_ihklib == IHK_STATUS_INACTIVE, "ihk_os_get_status (5) returned %d\n", ret_ihklib); + +destroy: + ret_ihklib = ihk_destroy_os(0, 0); + //OKNG(ret_ihklib == 0, "destroy immediately after boot\n"); + + sprintf(cmd, "rmmod %s/kmod/mcctrl.ko", prefix); + status = system(cmd); + + // destroy pseudofs + ret_ihklib = ihk_os_destroy_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + + sprintf(cmd, "rmmod %s/kmod/ihk-smp-x86_64.ko", prefix); + status = system(cmd); + + sprintf(cmd, "rmmod %s/kmod/ihk.ko", prefix); + status = system(cmd); + + printf("*** All tests finished\n\n"); + + fn_exit: + return ret; + fn_fail: + goto fn_exit; +} diff --git a/test/mng_mod/issues/898_928/CT_008 b/test/mng_mod/issues/898_928/CT_008 new file mode 100755 index 0000000000000000000000000000000000000000..cc9b9f2a68458e2bfa65f7dc09561a278fa045bb GIT binary patch literal 14075 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 +#include +#include +#include +#include +#include + +#define MCK_DIR "/home/satoken/ppos" +static char prefix[256] = MCK_DIR; + +static char test_name[64] = "CT_008"; + +#define OKNG(cond, ...) \ + do { \ + if(cond) { \ + printf("[OK] "); \ + printf(__VA_ARGS__); \ + } else { \ + printf("[NG] "); \ + printf(__VA_ARGS__); \ + char buf[65536];\ + char cmd[256];\ + sprintf(cmd, "%s/sbin/ihkosctl 0 kmsg", prefix);\ + FILE* fp = popen(cmd, "r"); \ + size_t nread = fread(buf, 1, sizeof(buf), fp); \ + buf[nread] = 0; \ + printf("%s", buf); \ + goto fn_fail; \ + } \ + } while(0) + +int main(int argc, char** argv) { + int ret = 0, status, ret_ihklib; + FILE *fp; + char buf[65536]; + size_t nread; + + char cmd[1024]; + char fn[256]; + char kargs[256]; + + int cpus[4] = {6, 7, 8, 9}; + int num_cpus = 4; + + struct ihk_mem_chunk mem_chunks[4]; + int num_mem_chunks; + + printf("*** %s start *************************\n", test_name); + /*-------------------------------------------- + * Preparing + *--------------------------------------------*/ + sprintf(cmd, "%s/sbin/mcstop+release.sh", prefix); + status = system(cmd); + + // ihk_os_destroy_pseudofs + ret_ihklib = ihk_os_destroy_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + + sprintf(cmd, "insmod %s/kmod/ihk.ko", prefix); + status = system(cmd); + + sprintf(cmd, "insmod %s/kmod/ihk-smp-x86_64.ko ihk_start_irq=240 ihk_ikc_irq_core=0", prefix); + status = system(cmd); + + sprintf(cmd, "insmod %s/kmod/mcctrl.ko", prefix); + status = system(cmd); + + /*-------------------------------------------- + * Test + *--------------------------------------------*/ + // create 0 + ret_ihklib = ihk_create_os(0); + + // reserve cpus + ret_ihklib = ihk_reserve_cpu(0, cpus, num_cpus); + //OKNG(ret_ihklib == 0, "ihk_reserve_cpu\n"); + + // assign cpus + ret_ihklib = ihk_os_assign_cpu(0, cpus, num_cpus); + //OKNG(ret_ihklib == 0, "ihk_os_assign_cpu\n"); + + // reserve mem 128m@0,128m@1 + num_mem_chunks = 2; + mem_chunks[0].size = 128*1024*1024ULL; + mem_chunks[0].numa_node_number = 0; + mem_chunks[1].size = 128*1024*1024ULL; + mem_chunks[1].numa_node_number = 1; + ret_ihklib = ihk_reserve_mem(0, mem_chunks, num_mem_chunks); + //OKNG(ret_ihklib == 0, "ihk_reserve_mem (2)\n"); + + // assign mem 128m@0,128m@1 + num_mem_chunks = 2; + mem_chunks[0].size = 128*1024*1024ULL; + mem_chunks[0].numa_node_number = 0; + mem_chunks[1].size = 128*1024*1024ULL; + mem_chunks[1].numa_node_number = 1; + ret_ihklib = ihk_os_assign_mem(0, mem_chunks, num_mem_chunks); + //OKNG(ret_ihklib == 0, "ihk_os_assign_mem (2)\n"); + + // load + sprintf(fn, "%s/smp-x86/kernel/mckernel.img", prefix); + ret_ihklib = ihk_os_load(0, fn); + //OKNG(ret_ihklib == 0, "ihk_os_load\n"); + + // kargs + sprintf(kargs, "hidos ksyslogd=0"); + ret_ihklib = ihk_os_kargs(0, kargs); + //OKNG(ret_ihklib == 0, "ihk_os_kargs\n"); + + // boot + ret_ihklib = ihk_os_boot(0); + OKNG(ret_ihklib == 0, "ihk_os_boot\n"); + + /* Make sure that all initialization related transactions between McKernel and IHK finish + sysfs_init(void) (in mckernel/kernel/sysfs.c) + packet.msg = SCD_MSG_SYSFS_REQ_SETUP; + sysfsm_work_main() in (mckernel/executer/kernel/mcctrl/sysfs.c) + sysfsm_req_setup + sysfsm_setup */ + usleep(100*1000); + + // create pseudofs + ret_ihklib = ihk_os_create_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + //OKNG(ret_ihklib == 0 && + // strstr(buf, "/tmp/mcos/mcos0_sys") != NULL, "ihk_os_create_pseudofs()\n"); + + // mcexec + sprintf(cmd, "%s/bin/mcexec ls -l | grep Makefile", prefix); + fp = popen(cmd, "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + OKNG(strstr(buf, "Makefile") != NULL, "do mcexec\n"); + + // shutdown +shutdown: + ret_ihklib = ihk_os_shutdown(0); + OKNG(ret_ihklib == 0, "shutdown after mcexec returned 0\n"); + + // get status. Note that the smp_ihk_os_shutdown() transitions + // smp-x86 status to BUILTIN_OS_STATUS_SHUTDOWN + // and smp_ihk_os_query_status() transitions os status to IHK_OS_STATUS_NOT_BOOTED. + ret_ihklib = ihk_os_get_status(0); + OKNG(ret_ihklib == IHK_STATUS_SHUTDOWN || + ret_ihklib == IHK_STATUS_INACTIVE, "ihk_os_get_status returned SHUTDOWN or INACTIVE\n"); + + // shutdown again + ret_ihklib = ihk_os_shutdown(0); + OKNG(ret_ihklib != 0, "shutdown after shutdown returned NOT 0\n"); + +destroy: + ret_ihklib = ihk_destroy_os(0, 0); + //OKNG(ret_ihklib == 0, "destroy immediately after boot\n"); + + sprintf(cmd, "rmmod %s/kmod/mcctrl.ko", prefix); + status = system(cmd); + + // destroy pseudofs + ret_ihklib = ihk_os_destroy_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + + sprintf(cmd, "rmmod %s/kmod/ihk-smp-x86_64.ko", prefix); + status = system(cmd); + + sprintf(cmd, "rmmod %s/kmod/ihk.ko", prefix); + status = system(cmd); + + printf("*** All tests finished\n\n"); + + fn_exit: + return ret; + fn_fail: + goto fn_exit; +} diff --git a/test/mng_mod/issues/898_928/CT_009 b/test/mng_mod/issues/898_928/CT_009 new file mode 100755 index 0000000000000000000000000000000000000000..221335fdb40dad399981d6b0bf006e45374ec1c4 GIT binary patch literal 13908 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 +#include +#include +#include +#include +#include + +#define MCK_DIR "/home/satoken/ppos" +static char prefix[256] = MCK_DIR; + +static char test_name[64] = "CT_009"; + +#define OKNG(cond, ...) \ + do { \ + if(cond) { \ + printf("[OK] "); \ + printf(__VA_ARGS__); \ + } else { \ + printf("[NG] "); \ + printf(__VA_ARGS__); \ + char buf[65536];\ + char cmd[256];\ + sprintf(cmd, "%s/sbin/ihkosctl 0 kmsg", prefix);\ + FILE* fp = popen(cmd, "r"); \ + size_t nread = fread(buf, 1, sizeof(buf), fp); \ + buf[nread] = 0; \ + printf("%s", buf); \ + goto fn_fail; \ + } \ + } while(0) + +int main(int argc, char** argv) { + int ret = 0, status, ret_ihklib; + FILE *fp; + char buf[65536]; + size_t nread; + + char cmd[1024]; + char fn[256]; + char kargs[256]; + + int cpus[4] = {6, 7, 8, 9}; + int num_cpus = 4; + + struct ihk_mem_chunk mem_chunks[4]; + int num_mem_chunks; + + printf("*** %s start *************************\n", test_name); + /*-------------------------------------------- + * Preparing + *--------------------------------------------*/ + sprintf(cmd, "%s/sbin/mcstop+release.sh", prefix); + status = system(cmd); + + // ihk_os_destroy_pseudofs + ret_ihklib = ihk_os_destroy_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + + sprintf(cmd, "insmod %s/kmod/ihk.ko", prefix); + status = system(cmd); + + sprintf(cmd, "insmod %s/kmod/ihk-smp-x86_64.ko ihk_start_irq=240 ihk_ikc_irq_core=0", prefix); + status = system(cmd); + + sprintf(cmd, "insmod %s/kmod/mcctrl.ko", prefix); + status = system(cmd); + + /*-------------------------------------------- + * Test + *--------------------------------------------*/ + // create 0 + ret_ihklib = ihk_create_os(0); + + // reserve cpus + ret_ihklib = ihk_reserve_cpu(0, cpus, num_cpus); + //OKNG(ret_ihklib == 0, "ihk_reserve_cpu\n"); + + // assign cpus + ret_ihklib = ihk_os_assign_cpu(0, cpus, num_cpus); + //OKNG(ret_ihklib == 0, "ihk_os_assign_cpu\n"); + + // reserve mem 128m@0,128m@1 + num_mem_chunks = 2; + mem_chunks[0].size = 128*1024*1024ULL; + mem_chunks[0].numa_node_number = 0; + mem_chunks[1].size = 128*1024*1024ULL; + mem_chunks[1].numa_node_number = 1; + ret_ihklib = ihk_reserve_mem(0, mem_chunks, num_mem_chunks); + //OKNG(ret_ihklib == 0, "ihk_reserve_mem (2)\n"); + + // assign mem 128m@0,128m@1 + num_mem_chunks = 2; + mem_chunks[0].size = 128*1024*1024ULL; + mem_chunks[0].numa_node_number = 0; + mem_chunks[1].size = 128*1024*1024ULL; + mem_chunks[1].numa_node_number = 1; + ret_ihklib = ihk_os_assign_mem(0, mem_chunks, num_mem_chunks); + //OKNG(ret_ihklib == 0, "ihk_os_assign_mem (2)\n"); + + // load + sprintf(fn, "%s/smp-x86/kernel/mckernel.img", prefix); + ret_ihklib = ihk_os_load(0, fn); + //OKNG(ret_ihklib == 0, "ihk_os_load\n"); + + // kargs + sprintf(kargs, "hidos ksyslogd=0"); + ret_ihklib = ihk_os_kargs(0, kargs); + //OKNG(ret_ihklib == 0, "ihk_os_kargs\n"); + + // boot + ret_ihklib = ihk_os_boot(0); +goto shutdown; + OKNG(ret_ihklib == 0, "ihk_os_boot\n"); + + /* Make sure that all initialization related transactions between McKernel and IHK finish + sysfs_init(void) (in mckernel/kernel/sysfs.c) + packet.msg = SCD_MSG_SYSFS_REQ_SETUP; + sysfsm_work_main() in (mckernel/executer/kernel/mcctrl/sysfs.c) + sysfsm_req_setup + sysfsm_setup */ + usleep(100*1000); + + // create pseudofs + ret_ihklib = ihk_os_create_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + //OKNG(ret_ihklib == 0 && + // strstr(buf, "/tmp/mcos/mcos0_sys") != NULL, "ihk_os_create_pseudofs()\n"); + + // mcexec + sprintf(cmd, "%s/bin/mcexec ls -l | grep Makefile", prefix); + fp = popen(cmd, "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + OKNG(strstr(buf, "Makefile") != NULL, "mcexec\n"); + + // shutdown +shutdown: + ret_ihklib = ihk_os_shutdown(0); + OKNG(ret_ihklib == 0, "force shutdown immediately after boot returned 0\n"); + + // get status. Note that the smp_ihk_os_shutdown() transitions + // smp-x86 status to BUILTIN_OS_STATUS_SHUTDOWN + // and smp_ihk_os_query_status() transitions os status to IHK_OS_STATUS_NOT_BOOTED. + ret_ihklib = ihk_os_get_status(0); + //OKNG(ret_ihklib == IHK_STATUS_SHUTDOWN || + // ret_ihklib == IHK_STATUS_INACTIVE, "ihk_os_get_status (5) returned %d\n", ret_ihklib); + +destroy: + ret_ihklib = ihk_destroy_os(0, 0); + //OKNG(ret_ihklib == 0, "destroy immediately after boot\n"); + + sprintf(cmd, "rmmod %s/kmod/mcctrl.ko", prefix); + status = system(cmd); + + // destroy pseudofs + ret_ihklib = ihk_os_destroy_pseudofs(0); + fp = popen("cat /proc/mounts | grep /tmp/mcos/mcos0_sys", "r"); + nread = fread(buf, 1, sizeof(buf), fp); + buf[nread] = 0; + + sprintf(cmd, "rmmod %s/kmod/ihk-smp-x86_64.ko", prefix); + status = system(cmd); + + sprintf(cmd, "rmmod %s/kmod/ihk.ko", prefix); + status = system(cmd); + + printf("*** All tests finished\n\n"); + + fn_exit: + return ret; + fn_fail: + goto fn_exit; +} diff --git a/test/mng_mod/issues/898_928/Makefile b/test/mng_mod/issues/898_928/Makefile new file mode 100644 index 00000000..01ae4ba2 --- /dev/null +++ b/test/mng_mod/issues/898_928/Makefile @@ -0,0 +1,51 @@ +CC = gcc +MCK_DIR=/home/satoken/ppos +TARGET=CT_001 CT_002 CT_003 CT_004 CT_005 CT_006 CT_007 CT_008 CT_009 + +CPPFLAGS = -I$(MCK_DIR)/include +LDFLAGS = -L$(MCK_DIR)/lib -lihk -Wl,-rpath -Wl,$(MCK_DIR)/lib -lbfd + +all: $(TARGET) + +CT_001: CT_001.c + $(CC) -o $@ $(CPPFLAGS) $(LDFLAGS) $^ + +CT_002: CT_002.c + $(CC) -o $@ $(CPPFLAGS) $(LDFLAGS) $^ + +CT_003: CT_003.c + $(CC) -o $@ $(CPPFLAGS) $(LDFLAGS) $^ + +CT_004: CT_004.c + $(CC) -o $@ $(CPPFLAGS) $(LDFLAGS) $^ + +CT_005: CT_005.c + $(CC) -o $@ $(CPPFLAGS) $(LDFLAGS) $^ + +CT_006: CT_006.c + $(CC) -o $@ $(CPPFLAGS) $(LDFLAGS) $^ + +CT_007: CT_007.c + $(CC) -o $@ $(CPPFLAGS) $(LDFLAGS) $^ + +CT_008: CT_008.c + $(CC) -o $@ $(CPPFLAGS) $(LDFLAGS) $^ + +CT_009: CT_009.c + $(CC) -o $@ $(CPPFLAGS) $(LDFLAGS) $^ + + +test:: $(TARGET) + -sudo ./CT_001 + -sudo ./CT_002 + -sudo ./CT_003 + -sudo ./CT_004 + #-sudo ./CT_005 + -sudo ./CT_006 + -sudo ./CT_007 + -sudo ./CT_008 + -sudo ./CT_009 + +clean: + rm -f $(TARGET) + diff --git a/test/mng_mod/issues/898_928/README b/test/mng_mod/issues/898_928/README new file mode 100644 index 00000000..f4ae14c4 --- /dev/null +++ b/test/mng_mod/issues/898_928/README @@ -0,0 +1,93 @@ +【Issue#898,#928 動作確認】 +Issue#898, #928が解決され、既存機能に影響がないことをihklibテストスイートを用いた確認(2項目)と、 +McKernelの起動/終了の基本動作確認(9項目)の計11項目のテストによって確認した。 + +①ihklibテストスイートを用いた確認 + ・Issue#898 + ihklibテストスイートのihklib001_lin.c を以下のように修正して1000回繰り返し実行し、 + すべての実行においてテストをパスすることを確認した。 + - McKernelのブート処理の直後にgoto文を追加し、シャットダウン処理の直前に移動する + + ・Issue#928 + ihklibテストスイートのihklib001_lin.c を以下のように修正して1000回繰り返し実行し、 + すべての実行においてテストをパスすることを確認した。 + - McKernelプロセス(mcexec)の実行直後にgoto文を追加し、シャットダウン処理の直前に移動する + +②McKernelの起動/終了の基本動作確認 +McKernelの状態と、終了処理(shutdown, destroy)の組み合わせで、 +9項目のテストを実施した。 + +基本動作確認の詳細を以下に示す。 + +1. ファイルの説明 + CT_xxx.c 各テスト項目のテストプログラム + force_shutdown.patch McKernelの状態がRUNNINGにならなかった場合に行う強制シャットダウン処理を + 発生させるパッチファイル + result.log テストプログラムの実行結果 + +2. テストの実行方法 + 以下の手順でテストを実行する + 1. Makefileの変数MCK_DIRの内容を、McKernelがインストールされているディレクトリに変更する + 2. CT_xxx.c の定数MCK_DIRの内容を、McKernelがインストールされているディレクトリに変更する + 3. sh make test を実行する + +3. テスト項目 +以下の条件でMcKernelの起動/終了が正常に行われることを確認する +なお、McKernelの起動、終了の操作はihklibを用いて実施する + +CT_001: + 1. McKernelを起動(ihk_os_boot)する + 2. 起動の直後にMcKernelを終了(ihk_os_shutdown)する + ⇒ ihk_os_shutdownが0を返す + +CT_002: + 1. McKernelを起動(ihk_os_boot)する + 2. 起動の直後に対象のIHK_OSインスタンスを破棄(ihk_os_destroy)する + ⇒ ihk_os_destroyが0を返す + +CT_003: + 1. McKernelを起動(ihk_os_boot)する + 2. McKernelプロセスを実行する + 3. McKernelプロセスの実行終了直後にMcKernelを終了(ihk_os_shutdown)する + ⇒ ihk_os_shutdownが0を返す + +CT_004: + 1. McKernelを起動(ihk_os_boot)する + 2. McKernelプロセスを実行する + 3. McKernelプロセスの実行終了直後に対象のIHK_OSインスタンスを破棄(ihk_os_destroy)する + ⇒ ihk_os_destroyが0を返す + +CT_005: + 1. McKernelを起動(ihk_os_boot)する + 2. McKernelプロセスを実行する + 3. McKernelプロセスの実行中にMcKernelを終了(ihk_os_shutdown)する + ⇒ ihk_os_shutdownが0を返す + +CT_006: + 1. McKernelを起動(ihk_os_boot)する + 2. McKernelプロセスを実行する + 3. McKernelプロセスの実行中に対象のIHK_OSインスタンスを破棄(ihk_os_destroy)する + ⇒ ihk_os_destroyが0以外を返す (ref_count != 0) + +CT_007: + 1. McKernelの起動処理の中の、カーネルイメージのロード(ihk_os_load)までを実施する + 2. McKernelを終了(ihk_os_shutdown)する + ⇒ ihk_os_shutdownが0を返す + +CT_008: + 1. McKernelを起動(ihk_os_boot)する + 2. McKernelプロセスを実行する + 3. McKernelプロセスの実行終了直後にMcKernelを終了(ihk_os_shutdown)する + 4. ihk_os_get_status がSHUTDOWNまたは、INACTIVEを返すことを確認する + 5. 終了したMcKernelに対して、再度終了(ihk_os_shutdown)する + ⇒ ihk_os_shutdownが0以外を返す + +CT_009: + 前提:force_shutdown.patch を適用してMcKernelをビルドする + 1. McKernelを起動(ihk_os_boot)する + 2. 起動の直後にMcKernelを終了(ihk_os_shutdown)する + ⇒ ihk_os_shutdownが0を返す + +4. 結果 +テストプログラムの実行結果はresult.log に出力される。 +上記9項目で[OK]が出力されていることを確認した。 diff --git a/test/mng_mod/issues/898_928/force_shutdown.patch b/test/mng_mod/issues/898_928/force_shutdown.patch new file mode 100644 index 00000000..8737484e --- /dev/null +++ b/test/mng_mod/issues/898_928/force_shutdown.patch @@ -0,0 +1,20 @@ +diff --git a/executer/kernel/mcctrl/driver.c b/executer/kernel/mcctrl/driver.c +index 390dac6..a87aa45 100644 +--- a/executer/kernel/mcctrl/driver.c ++++ b/executer/kernel/mcctrl/driver.c +@@ -171,12 +171,12 @@ int mcctrl_os_shutdown_notifier(int os_index) + { + if (os[os_index]) { + /* Wait for os running */ +- if (ihk_os_wait_for_status(os[os_index], IHK_OS_STATUS_RUNNING, 0, 200) != 0) { +- printk("IHK: OS does not become RUNNING in shutdown. Force shutdown.\n"); ++// if (ihk_os_wait_for_status(os[os_index], IHK_OS_STATUS_RUNNING, 0, 200) != 0) { ++// printk("IHK: OS does not become RUNNING in shutdown. Force shutdown.\n"); + /* send nmi to force shutdown */ + ihk_os_send_nmi(os[os_index], 3); + mdelay(200); +- } ++// } + + sysfsm_cleanup(os[os_index]); + free_topology_info(os[os_index]); diff --git a/test/mng_mod/issues/898_928/result.log b/test/mng_mod/issues/898_928/result.log new file mode 100644 index 00000000..e585c0f7 --- /dev/null +++ b/test/mng_mod/issues/898_928/result.log @@ -0,0 +1,58 @@ +sudo ./CT_001 +*** CT_001 start ************************* +[OK] shutdown immediately after boot returned 0 +*** All tests finished + +sudo ./CT_002 +*** CT_002 start ************************* +[OK] destroy immediately after boot returned NOT 0 +*** All tests finished + +sudo ./CT_003 +*** CT_003 start ************************* +[OK] ihk_os_boot +[OK] done mcexec +[OK] shutdown after mcexec returned 0 +*** All tests finished + +sudo ./CT_004 +*** CT_004 start ************************* +[OK] ihk_os_boot +[OK] do mcexec +[OK] destroy after mcexec returned 0 +*** All tests finished + +-sudo ./CT_005 +*** CT_005 start ************************* +[OK] ihk_os_boot + start long mcexec... +[OK] shutdown during mcexec returned 0 + (But, mcexec process remain due to #846) +*** All tests finished + +sudo ./CT_006 +*** CT_006 start ************************* +[OK] ihk_os_boot + start long mcexec... +[OK] destroy during mcexec returned NOT 0 +*** All tests finished + +sudo ./CT_007 +*** CT_007 start ************************* +[OK] shutdown before boot returned 0 +*** All tests finished + +sudo ./CT_008 +*** CT_008 start ************************* +[OK] ihk_os_boot +[OK] do mcexec +[OK] shutdown after mcexec returned 0 +[OK] ihk_os_get_status returned SHUTDOWN or INACTIVE +[OK] shutdown after shutdown returned NOT 0 +*** All tests finished + +sudo ./CT_009 +*** CT_009 start ************************* +[OK] force shutdown immediately after boot returned 0 +*** All tests finished +