From patchwork Fri Feb 1 12:37:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andre Przywara X-Patchwork-Id: 10792657 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0D27B746 for ; Fri, 1 Feb 2019 12:37:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F068F3201A for ; Fri, 1 Feb 2019 12:37:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E50A332020; Fri, 1 Feb 2019 12:37:25 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6CDEA2F29B for ; Fri, 1 Feb 2019 12:37:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729646AbfBAMhX (ORCPT ); Fri, 1 Feb 2019 07:37:23 -0500 Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:59242 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727691AbfBAMhX (ORCPT ); Fri, 1 Feb 2019 07:37:23 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 90CCA15BF; Fri, 1 Feb 2019 04:37:22 -0800 (PST) Received: from donnerap.arm.com (donnerap.cambridge.arm.com [10.1.197.44]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id A52E43F59C; Fri, 1 Feb 2019 04:37:21 -0800 (PST) From: Andre Przywara To: Will Deacon Cc: kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu Subject: [PATCH v2 1/4] arm: fdt: add stdout-path to /chosen node Date: Fri, 1 Feb 2019 12:37:13 +0000 Message-Id: <20190201123716.92901-2-andre.przywara@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190201123716.92901-1-andre.przywara@arm.com> References: <20190201123716.92901-1-andre.przywara@arm.com> Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The DT spec describes the stdout-path property in the /chosen node to contain the DT path for a default device usable for outputting characters. The Linux kernel uses this for earlycon (without further parameters), other DT users might rely on this as well. Add a stdout-path property pointing to the "serial0" alias, then add an aliases node at the end of the FDT, containing the actual path. This allows the FDT generation code in hw/serial.c to set this string. Even when we use the virtio console, the serial console is still there and works, so we can expose this unconditionally. Putting the virtio console path in there will not work anyway. Signed-off-by: Andre Przywara --- arm/fdt.c | 10 ++++++++++ hw/serial.c | 9 +++++++++ include/kvm/fdt.h | 2 ++ 3 files changed, 21 insertions(+) diff --git a/arm/fdt.c b/arm/fdt.c index 7c50464a..624dbace 100644 --- a/arm/fdt.c +++ b/arm/fdt.c @@ -145,6 +145,7 @@ static int setup_fdt(struct kvm *kvm) kvm->cfg.real_cmdline)); _FDT(fdt_property_u64(fdt, "kaslr-seed", kvm->cfg.arch.kaslr_seed)); + _FDT(fdt_property_string(fdt, "stdout-path", "serial0")); /* Initrd */ if (kvm->arch.initrd_size != 0) { @@ -210,6 +211,15 @@ static int setup_fdt(struct kvm *kvm) _FDT(fdt_property_cell(fdt, "migrate", fns->migrate)); _FDT(fdt_end_node(fdt)); + if (fdt_stdout_path) { + _FDT(fdt_begin_node(fdt, "aliases")); + _FDT(fdt_property_string(fdt, "serial0", fdt_stdout_path)); + _FDT(fdt_end_node(fdt)); + + free(fdt_stdout_path); + fdt_stdout_path = NULL; + } + /* Finalise. */ _FDT(fdt_end_node(fdt)); _FDT(fdt_finish(fdt)); diff --git a/hw/serial.c b/hw/serial.c index 2f19ba80..13c4663e 100644 --- a/hw/serial.c +++ b/hw/serial.c @@ -366,6 +366,9 @@ static bool serial8250_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, } #ifdef CONFIG_HAS_LIBFDT + +char *fdt_stdout_path = NULL; + #define DEVICE_NAME_MAX_LEN 32 static void serial8250_generate_fdt_node(struct ioport *ioport, void *fdt, @@ -383,6 +386,12 @@ void serial8250_generate_fdt_node(struct ioport *ioport, void *fdt, snprintf(dev_name, DEVICE_NAME_MAX_LEN, "U6_16550A@%llx", addr); + if (!fdt_stdout_path) { + fdt_stdout_path = malloc(strlen(dev_name) + 2); + /* Assumes that this node is a child of the root node. */ + sprintf(fdt_stdout_path, "/%s", dev_name); + } + _FDT(fdt_begin_node(fdt, dev_name)); _FDT(fdt_property_string(fdt, "compatible", "ns16550a")); _FDT(fdt_property(fdt, "reg", reg_prop, sizeof(reg_prop))); diff --git a/include/kvm/fdt.h b/include/kvm/fdt.h index beadc7f3..4e615725 100644 --- a/include/kvm/fdt.h +++ b/include/kvm/fdt.h @@ -25,6 +25,8 @@ enum irq_type { IRQ_TYPE_LEVEL_MASK = (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH), }; +extern char *fdt_stdout_path; + /* Helper for the various bits of code that generate FDT nodes */ #define _FDT(exp) \ do { \ From patchwork Fri Feb 1 12:37:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andre Przywara X-Patchwork-Id: 10792659 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1A717186E for ; Fri, 1 Feb 2019 12:37:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0BC052F29B for ; Fri, 1 Feb 2019 12:37:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 001D932021; Fri, 1 Feb 2019 12:37:25 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A724E318F2 for ; Fri, 1 Feb 2019 12:37:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729764AbfBAMhY (ORCPT ); Fri, 1 Feb 2019 07:37:24 -0500 Received: from foss.arm.com ([217.140.101.70]:59250 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727691AbfBAMhY (ORCPT ); Fri, 1 Feb 2019 07:37:24 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id B964380D; Fri, 1 Feb 2019 04:37:23 -0800 (PST) Received: from donnerap.arm.com (donnerap.cambridge.arm.com [10.1.197.44]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id CDDF13F59C; Fri, 1 Feb 2019 04:37:22 -0800 (PST) From: Andre Przywara To: Will Deacon Cc: kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu Subject: [PATCH v2 2/4] Makefile: support -s switch Date: Fri, 1 Feb 2019 12:37:14 +0000 Message-Id: <20190201123716.92901-3-andre.przywara@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190201123716.92901-1-andre.przywara@arm.com> References: <20190201123716.92901-1-andre.przywara@arm.com> Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP "make -s" suppresses normal output, just shows warnings and errors. But since we explicitly override the make output with our fancy concise version, we miss out on this feature. Do as the kernel does and explicitly suppress every normal output when -s is given. This helps to spot warnings that scroll out of the terminal window too quickly. Signed-off-by: Andre Przywara --- Makefile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c4faff66..ec75cd99 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,11 @@ # ifeq ($(strip $(V)),) - E = @echo + ifeq ($(findstring s,$(filter-out --%,$(MAKEFLAGS))),) + E = @echo + else + E = @\# + endif Q = @ else E = @\# From patchwork Fri Feb 1 12:37:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andre Przywara X-Patchwork-Id: 10792661 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8B2B1746 for ; Fri, 1 Feb 2019 12:37:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7D0252F29B for ; Fri, 1 Feb 2019 12:37:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 71A583201A; Fri, 1 Feb 2019 12:37:27 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2B0D52F29B for ; Fri, 1 Feb 2019 12:37:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729870AbfBAMh0 (ORCPT ); Fri, 1 Feb 2019 07:37:26 -0500 Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:59258 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729860AbfBAMhZ (ORCPT ); Fri, 1 Feb 2019 07:37:25 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id E22DF1650; Fri, 1 Feb 2019 04:37:24 -0800 (PST) Received: from donnerap.arm.com (donnerap.cambridge.arm.com [10.1.197.44]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 023B03F59C; Fri, 1 Feb 2019 04:37:23 -0800 (PST) From: Andre Przywara To: Will Deacon Cc: kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu Subject: [PATCH v2 3/4] Makefile: Remove echoing of kvmtools version file Date: Fri, 1 Feb 2019 12:37:15 +0000 Message-Id: <20190201123716.92901-4-andre.przywara@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190201123716.92901-1-andre.przywara@arm.com> References: <20190201123716.92901-1-andre.przywara@arm.com> Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP On every build we report the kvmtool "version" number, which isn't meaningful at all anymore. Remove the line from the KVMTOOLS-VERSION-GEN script to drop a pointless message. Signed-off-by: Andre Przywara --- util/KVMTOOLS-VERSION-GEN | 1 - 1 file changed, 1 deletion(-) diff --git a/util/KVMTOOLS-VERSION-GEN b/util/KVMTOOLS-VERSION-GEN index f0dcfdea..91ee2c2f 100755 --- a/util/KVMTOOLS-VERSION-GEN +++ b/util/KVMTOOLS-VERSION-GEN @@ -35,6 +35,5 @@ else VC=unset fi test "$VN" = "$VC" || { - echo >&2 "KVMTOOLS_VERSION = $VN" echo "KVMTOOLS_VERSION = $VN" >$GVF } From patchwork Fri Feb 1 12:37:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andre Przywara X-Patchwork-Id: 10792663 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3517B746 for ; Fri, 1 Feb 2019 12:37:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 255D92F29B for ; Fri, 1 Feb 2019 12:37:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 19BE83201A; Fri, 1 Feb 2019 12:37:29 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A8DC52F29B for ; Fri, 1 Feb 2019 12:37:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729884AbfBAMh1 (ORCPT ); Fri, 1 Feb 2019 07:37:27 -0500 Received: from foss.arm.com ([217.140.101.70]:59266 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729877AbfBAMh0 (ORCPT ); Fri, 1 Feb 2019 07:37:26 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 16F1E80D; Fri, 1 Feb 2019 04:37:26 -0800 (PST) Received: from donnerap.arm.com (donnerap.cambridge.arm.com [10.1.197.44]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2B2D73F59C; Fri, 1 Feb 2019 04:37:25 -0800 (PST) From: Andre Przywara To: Will Deacon Cc: kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu Subject: [PATCH v2 4/4] arm: Auto-detect guest GIC type Date: Fri, 1 Feb 2019 12:37:16 +0000 Message-Id: <20190201123716.92901-5-andre.przywara@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190201123716.92901-1-andre.przywara@arm.com> References: <20190201123716.92901-1-andre.przywara@arm.com> Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP At the moment kvmtool always tries to instantiate a virtual GICv2 for the guest, and fails with some scary error message if that doesn't work. The user has then to manually specify "--irqchip=gicv3", which is not really obvious. With the advent of more GICv3-only machines, let's try to be more clever and implement some auto-detection of the GIC type needed: We try gicv3-its, gicv3, gicv2m and gicv2, in that order. That first one succeeding wins. For GICv2 machines the first two will always fail. For GICv2-backwards compatible GICv3 machines GICv3 is probably the better choice these days. This algorithm is in effect is there is no explicit --irqchip parameter on the command line. We still allow the GIC type to be set explicitly. Signed-off-by: Andre Przywara --- arm/gic.c | 25 +++++++++++++++++++++++++ arm/include/arm-common/gic.h | 1 + 2 files changed, 26 insertions(+) diff --git a/arm/gic.c b/arm/gic.c index abcbcc09..a86da20e 100644 --- a/arm/gic.c +++ b/arm/gic.c @@ -182,6 +182,8 @@ static int gic__create_device(struct kvm *kvm, enum irqchip_type type) gic_device.type = KVM_DEV_TYPE_ARM_VGIC_V3; dist_attr.attr = KVM_VGIC_V3_ADDR_TYPE_DIST; break; + case IRQCHIP_AUTO: + return -ENODEV; } err = ioctl(kvm->vm_fd, KVM_CREATE_DEVICE, &gic_device); @@ -199,6 +201,8 @@ static int gic__create_device(struct kvm *kvm, enum irqchip_type type) case IRQCHIP_GICV3: err = ioctl(gic_fd, KVM_SET_DEVICE_ATTR, &redist_attr); break; + case IRQCHIP_AUTO: + return -ENODEV; } if (err) goto out_err; @@ -249,9 +253,30 @@ static int gic__create_irqchip(struct kvm *kvm) int gic__create(struct kvm *kvm, enum irqchip_type type) { + enum irqchip_type try; int err; switch (type) { + case IRQCHIP_AUTO: + try = IRQCHIP_GICV3_ITS; + err = gic__create(kvm, try); + if (err) { + try = IRQCHIP_GICV3; + err = gic__create(kvm, try); + } + if (err) { + try = IRQCHIP_GICV2M; + err = gic__create(kvm, try); + } + if (err) { + try = IRQCHIP_GICV2; + err = gic__create(kvm, try); + } + if (err) + return err; + + kvm->cfg.arch.irqchip = try; + return 0; case IRQCHIP_GICV2M: gic_msi_size = KVM_VGIC_V2M_SIZE; gic_msi_base = ARM_GIC_CPUI_BASE - gic_msi_size; diff --git a/arm/include/arm-common/gic.h b/arm/include/arm-common/gic.h index 1125d601..ec9cf31a 100644 --- a/arm/include/arm-common/gic.h +++ b/arm/include/arm-common/gic.h @@ -24,6 +24,7 @@ #define KVM_VGIC_V2M_SIZE 0x1000 enum irqchip_type { + IRQCHIP_AUTO, IRQCHIP_GICV2, IRQCHIP_GICV2M, IRQCHIP_GICV3,