aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Auger <eric.auger@redhat.com>2020-04-02 16:52:25 +0200
committerAndrew Jones <drjones@redhat.com>2020-04-03 10:03:45 +0200
commit41c0f78ce664c49cbdc8f4125c4e210239e01f32 (patch)
tree2652fee0c7e540c99237f815663d743e8ab62e6e
parent0ef02cd6cbaaf6e41cdc429fd8b08e86c65dfb94 (diff)
downloadkvm-unit-tests-41c0f78ce664c49cbdc8f4125c4e210239e01f32.tar.gz
arm/run: Allow Migration tests
Let's link getchar.o to use puts and getchar from the tests. Then allow tests belonging to the migration group to trigger the migration from the test code by putting "migrate" into the uart. Then the code can wait for the migration completion by using getchar(). The __getchar implement is minimalist as it just reads the data register. It is just meant to read the single character emitted at the end of the migration by the runner script. It is not meant to read more data (FIFOs are not enabled). Signed-off-by: Eric Auger <eric.auger@redhat.com> Signed-off-by: Andrew Jones <drjones@redhat.com>
-rw-r--r--arm/Makefile.common2
-rwxr-xr-xarm/run2
-rw-r--r--lib/arm/io.c28
3 files changed, 30 insertions, 2 deletions
diff --git a/arm/Makefile.common b/arm/Makefile.common
index b8988f2..a123e85 100644
--- a/arm/Makefile.common
+++ b/arm/Makefile.common
@@ -32,7 +32,7 @@ CFLAGS += -I $(SRCDIR)/lib -I $(SRCDIR)/lib/libfdt -I lib
asm-offsets = lib/$(ARCH)/asm-offsets.h
include $(SRCDIR)/scripts/asm-offsets.mak
-cflatobjs += lib/util.o
+cflatobjs += lib/util.o lib/getchar.o
cflatobjs += lib/alloc_phys.o
cflatobjs += lib/alloc_page.o
cflatobjs += lib/vmalloc.o
diff --git a/arm/run b/arm/run
index 277db9b..a390ca5 100755
--- a/arm/run
+++ b/arm/run
@@ -61,6 +61,6 @@ fi
M+=",accel=$ACCEL"
command="$qemu -nodefaults $M -cpu $processor $chr_testdev $pci_testdev"
command+=" -display none -serial stdio -kernel"
-command="$(timeout_cmd) $command"
+command="$(migration_cmd) $(timeout_cmd) $command"
run_qemu $command "$@"
diff --git a/lib/arm/io.c b/lib/arm/io.c
index 99fd315..343e108 100644
--- a/lib/arm/io.c
+++ b/lib/arm/io.c
@@ -87,6 +87,34 @@ void puts(const char *s)
spin_unlock(&uart_lock);
}
+static int do_getchar(void)
+{
+ int c;
+
+ spin_lock(&uart_lock);
+ c = readb(uart0_base);
+ spin_unlock(&uart_lock);
+
+ return c ?: -1;
+}
+
+/*
+ * Minimalist implementation for migration completion detection.
+ * Without FIFOs enabled on the QEMU UART device we just read
+ * the data register: we cannot read more than 16 characters.
+ */
+int __getchar(void)
+{
+ int c = do_getchar();
+ static int count;
+
+ if (c != -1)
+ ++count;
+
+ assert(count < 16);
+
+ return c;
+}
/*
* Defining halt to take 'code' as an argument guarantees that it will