]> rtime.felk.cvut.cz Git - hercules2020/jailhouse-build.git/commitdiff
Update PREM test and main Makefile
authorMichal Sojka <michal.sojka@cvut.cz>
Sat, 26 May 2018 21:49:16 +0000 (23:49 +0200)
committerMichal Sojka <michal.sojka@cvut.cz>
Sat, 26 May 2018 22:18:55 +0000 (00:18 +0200)
build/Makefile
test/Makefile
test/prem-test.c

index 5922f4a1774b0cd0eabf7e8adb881201facc9784..192c86a1a2f04999ae0d5d55dfdf374c2057bd95 100644 (file)
@@ -9,8 +9,12 @@ image.fit: buildroot/images/rootfs.cpio.uboot linux-4.4/vmlinux
 buildroot/images/rootfs.cpio.uboot: ./buildroot/.config
 buildroot/images/rootfs.cpio.uboot: rootfs-overlay/lib/firmware/jailhouse.bin rootfs-overlay/lib/modules/4.4.38+/modules.dep
 buildroot/images/rootfs.cpio.uboot: $(shell find rootfs-overlay)
+buildroot/images/rootfs.cpio.uboot: rootfs-overlay/bin/prem-test
        $(MAKE) -j1 -C buildroot ROOTFS_CPIO_COMPRESS_CMD="gzip --fast -c"
 
+rootfs-overlay/bin/prem-test: ../test/prem-test
+       cp $< $@
+
 rootfs-overlay/lib/firmware/jailhouse.bin: ../jailhouse/hypervisor/jailhouse.bin
 rootfs-overlay/lib/firmware/jailhouse.bin: $(wildcard ../jailhouse/configs/arm64/*.cell)
        $(MAKE) -C ../jailhouse -j$(NPROC) install KDIR=$(CURDIR)/linux-4.4 ARCH=arm64 DESTDIR=$(CURDIR)/rootfs-overlay  prefix=/usr
@@ -19,6 +23,8 @@ rootfs-overlay/lib/firmware/jailhouse.bin: $(wildcard ../jailhouse/configs/arm64
        cp ../jailhouse/configs/arm64/jetson-tx2.cell rootfs-overlay/jailhouse/configs/
        cp ../jailhouse/configs/arm64/jetson-tx2-demo.cell rootfs-overlay/jailhouse/configs/
 
+jailhouse: ../jailhouse/hypervisor/jailhouse.bin
+
 ../jailhouse/hypervisor/jailhouse.bin: ../jailhouse/include/jailhouse/config.h
 ../jailhouse/hypervisor/jailhouse.bin: linux-4.4/vmlinux
 ../jailhouse/hypervisor/jailhouse.bin: $(addprefix ../jailhouse/,$(shell cd ../jailhouse && git ls-files))
@@ -37,5 +43,16 @@ rootfs-overlay/lib/modules/4.4.38+/modules.dep: linux-4.4/vmlinux
 linux-4.4/vmlinux:
        $(MAKE) -C $(@D) -j$(NPROC)
 
+.PHONY: FORCE
+
+../test/prem-test: FORCE
+       $(MAKE) -C ../test
+
 clean:
        rm buildroot/images/rootfs.cpio.uboot linux-4.4/vmlinux
+
+deploy: ../test/prem-test
+#deploy: ../jailhouse/hypervisor/jailhouse.bin
+       scp ../test/prem-test tx2:/bin
+#      scp ../jailhouse/hypervisor/jailhouse.bin tx2:/lib/firmware
+#      ssh tx2 'sh /etc/init.d/S20jailhouse.sh stop && sh /etc/init.d/S20jailhouse.sh start'
index fa4a17b4641730648533eefbac5687b689ce86c7..ae44b675e0a38f014f2d4b7973157a106117d034 100644 (file)
@@ -1,4 +1,4 @@
 CC = /opt/OSELAS.Toolchain-2014.12.2/aarch64-v8a-linux-gnu/gcc-4.9.2-glibc-2.20-binutils-2.24-kernel-3.16-sanitized/bin/aarch64-v8a-linux-gnu-gcc
-CFLAGS = -Wall -O2 -g
+CFLAGS = -Wall -O2 -g -std=gnu99
 
 all: prem-test
index d90c95cb91c0ab37025917bdd8e68ce7536567c4..57c1a7ea3bd91012ffe7ef912f7ff8cfc154552e 100644 (file)
@@ -1,23 +1,48 @@
-#include <stdio.h>
-#include <stdint.h>
+/* Run this as: for i in $(seq 0 5); do prem-test $i & done */
+
 #define _GNU_SOURCE         /* See feature_test_macros(7) */
+#include <err.h>
+#include <sched.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
 #include <unistd.h>
-#include <sys/syscall.h>   /* For SYS_xxx definitions */
 
 #ifndef SYS_prem_guard_set
 #define SYS_prem_guard_set 792
 #endif
 
+enum prem_phase {
+       PREM_COMPATIBLE = 0,
+       PREM_MEMORY     = 1,
+       PREM_COMPUTE    = 2,
+};
 
-unsigned long prem_guard_set(unsigned long arg1,
-                            unsigned long arg2,
-                            unsigned long arg3)
+long prem_guard_set(enum prem_phase phase,
+                   unsigned long memory_budget,
+                   unsigned long timeout)
 {
-       return syscall(SYS_prem_guard_set, arg1, arg2, arg3);
+       return syscall(SYS_prem_guard_set, phase, memory_budget, timeout);
 }
 
 int main(int argc, char *argv[])
 {
-       printf("hvc result: %lu\n", prem_guard_set(11, 22, 33));
+       cpu_set_t set;
+       int cpu = 0;
+
+       if (argc > 1)
+               cpu = atoi(argv[1]);
+
+       /* Ensure that memory phase starts and ends on the same CPU */
+       CPU_ZERO(&set);
+       CPU_SET(cpu, &set);
+       if (sched_setaffinity(getpid(), sizeof(set), &set) < 0)
+               err(1, "sched_setaffinity");
+       printf("Pinned to CPU %d\n", cpu);
+
+       prem_guard_set(PREM_MEMORY, 22, 33);
+       for (int i = 0; i < 100; i++)
+               printf("Memory phase PID %d\n", getpid());
+       prem_guard_set(PREM_COMPATIBLE, 44, 55);
        return 0;
 }