From: Michal Sojka Date: Sat, 26 May 2018 21:49:16 +0000 (+0200) Subject: Update PREM test and main Makefile X-Git-Tag: 0.0~9 X-Git-Url: http://rtime.felk.cvut.cz/gitweb/hercules2020/jailhouse-build.git/commitdiff_plain/22b2abf73986e7089acdc9300fe6225cead9021c Update PREM test and main Makefile --- diff --git a/build/Makefile b/build/Makefile index 5922f4a..192c86a 100644 --- a/build/Makefile +++ b/build/Makefile @@ -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' diff --git a/test/Makefile b/test/Makefile index fa4a17b..ae44b67 100644 --- a/test/Makefile +++ b/test/Makefile @@ -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 diff --git a/test/prem-test.c b/test/prem-test.c index d90c95c..57c1a7e 100644 --- a/test/prem-test.c +++ b/test/prem-test.c @@ -1,23 +1,48 @@ -#include -#include +/* Run this as: for i in $(seq 0 5); do prem-test $i & done */ + #define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include +#include +#include +#include #include -#include /* 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; }