Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 63295C4332B for ; Fri, 20 Mar 2020 09:25:37 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 384B820739 for ; Fri, 20 Mar 2020 09:25:37 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="UaIX3WLR" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727226AbgCTJZg (ORCPT ); Fri, 20 Mar 2020 05:25:36 -0400 Received: from us-smtp-delivery-74.mimecast.com ([216.205.24.74]:26246 "EHLO us-smtp-delivery-74.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727025AbgCTJZg (ORCPT ); Fri, 20 Mar 2020 05:25:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1584696335; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CnmHcvAzlYerfEhzxJ/5Dt9qcTxe4wP+0MOD1yMQ9wI=; b=UaIX3WLRFurpyjyhaBvk0j+cuXv6LTxBVZ/mLbUzPnVT+JWndcWZ4kEKA5YMrLKwhCkX9a q7rqZFD9dvd4ZC3SUyhh7y3MPsL0Nfj6YHSZ7imtk5wesyM3tDG6kn/JjGZCrhjQm6QSA6 jJyIlV9TqdLIdWON5phcc6wKZO269u4= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-227-FFPPheyIMTe6Vfnau2IYEQ-1; Fri, 20 Mar 2020 05:25:31 -0400 X-MC-Unique: FFPPheyIMTe6Vfnau2IYEQ-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id B00E3800D4E; Fri, 20 Mar 2020 09:25:29 +0000 (UTC) Received: from laptop.redhat.com (ovpn-113-142.ams2.redhat.com [10.36.113.142]) by smtp.corp.redhat.com (Postfix) with ESMTP id BE40F5C1D8; Fri, 20 Mar 2020 09:25:26 +0000 (UTC) From: Eric Auger To: eric.auger.pro@gmail.com, eric.auger@redhat.com, maz@kernel.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, qemu-devel@nongnu.org, qemu-arm@nongnu.org Cc: drjones@redhat.com, andre.przywara@arm.com, peter.maydell@linaro.org, yuzenghui@huawei.com, alexandru.elisei@arm.com, thuth@redhat.com Subject: [kvm-unit-tests PATCH v7 11/13] arm/run: Allow Migration tests Date: Fri, 20 Mar 2020 10:24:26 +0100 Message-Id: <20200320092428.20880-12-eric.auger@redhat.com> In-Reply-To: <20200320092428.20880-1-eric.auger@redhat.com> References: <20200320092428.20880-1-eric.auger@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Content-Transfer-Encoding: quoted-printable Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org 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 --- v3 -> v4: - remove space around Elvis operator - rename ___getchar into do_getchar v2 -> v3: - take the lock - assert if more than 16 chars - removed Thomas' R-b --- arm/Makefile.common | 2 +- arm/run | 2 +- lib/arm/io.c | 28 ++++++++++++++++++++++++++++ 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 +=3D -I $(SRCDIR)/lib -I $(SRCDIR)/lib/libfdt -I= lib asm-offsets =3D lib/$(ARCH)/asm-offsets.h include $(SRCDIR)/scripts/asm-offsets.mak =20 -cflatobjs +=3D lib/util.o +cflatobjs +=3D lib/util.o lib/getchar.o cflatobjs +=3D lib/alloc_phys.o cflatobjs +=3D lib/alloc_page.o cflatobjs +=3D 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+=3D",accel=3D$ACCEL" command=3D"$qemu -nodefaults $M -cpu $processor $chr_testdev $pci_testde= v" command+=3D" -display none -serial stdio -kernel" -command=3D"$(timeout_cmd) $command" +command=3D"$(migration_cmd) $(timeout_cmd) $command" =20 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); } =20 +static int do_getchar(void) +{ + int c; + + spin_lock(&uart_lock); + c =3D 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 =3D do_getchar(); + static int count; + + if (c !=3D -1) + ++count; + + assert(count < 16); + + return c; +} =20 /* * Defining halt to take 'code' as an argument guarantees that it will --=20 2.20.1