From mboxrd@z Thu Jan 1 00:00:00 1970 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 3ECC0C3F2D2 for ; Mon, 2 Mar 2020 10:58:29 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0997D22B48 for ; Mon, 2 Mar 2020 10:58:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="XWoybm8I" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0997D22B48 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:58524 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j8imK-0004GS-9N for qemu-devel@archiver.kernel.org; Mon, 02 Mar 2020 05:58:28 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:57805) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j8ija-00084A-Ou for qemu-devel@nongnu.org; Mon, 02 Mar 2020 05:55:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j8ijZ-00045J-Eo for qemu-devel@nongnu.org; Mon, 02 Mar 2020 05:55:38 -0500 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:38875 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j8ijZ-000455-BI for qemu-devel@nongnu.org; Mon, 02 Mar 2020 05:55:37 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1583146537; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=T6nJe3eQ8rW2+21nG+AcWSCiN0SMuEbkmlN6bWatc18=; b=XWoybm8IKhhW7kJUwAB8qSWu9w1QTt/fxmDvt0UwG9gWZxCNJQJvRFy8CEooemNEBxpsmj QnFwv7tHO8mXbZNtOUEgko92WDhUpW3uEuoTGCMdk5P3yARbL4TBW6l1ichjQRZjYRs723 twGPAfm6vN1q/ncu7P+1MzpWgkfQBYg= 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-404-JWGKAbg-OsWKoJkTSRrqAQ-1; Mon, 02 Mar 2020 05:55:33 -0500 X-MC-Unique: JWGKAbg-OsWKoJkTSRrqAQ-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 6798210509AD; Mon, 2 Mar 2020 10:55:32 +0000 (UTC) Received: from laptop.redhat.com (ovpn-116-59.ams2.redhat.com [10.36.116.59]) by smtp.corp.redhat.com (Postfix) with ESMTP id 96810385; Mon, 2 Mar 2020 10:55:30 +0000 (UTC) From: Eric Auger To: eric.auger.pro@gmail.com, eric.auger@redhat.com, qemu-devel@nongnu.org, qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v3 4/6] target/arm/kvm: Let kvm_arm_vgic_probe() return a bitmap Date: Mon, 2 Mar 2020 11:55:14 +0100 Message-Id: <20200302105516.5972-5-eric.auger@redhat.com> In-Reply-To: <20200302105516.5972-1-eric.auger@redhat.com> References: <20200302105516.5972-1-eric.auger@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 205.139.110.61 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: maz@kernel.org, drjones@redhat.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Convert kvm_arm_vgic_probe() so that it returns a bitmap of supported in-kernel emulation VGIC versions instead of the max version: at the moment values can be v2 and v3. This allows to expose the case where the host GICv3 also supports GICv2 emulation. This will be useful to choose the default version in KVM accelerated mode. Signed-off-by: Eric Auger Reviewed-by: Andrew Jones Reviewed-by: Richard Henderson --- hw/arm/virt.c | 11 +++++++++-- target/arm/kvm.c | 14 ++++++++------ target/arm/kvm_arm.h | 3 +++ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 338d56999f..eb8c57c85e 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -1553,11 +1553,18 @@ static void finalize_gic_version(VirtMachineState *= vms) vms->gic_version =3D VIRT_GIC_VERSION_3; } } else { - vms->gic_version =3D kvm_arm_vgic_probe(); - if (!vms->gic_version) { + int probe_bitmap =3D kvm_arm_vgic_probe(); + + if (!probe_bitmap) { error_report( "Unable to determine GIC version supported by host"); exit(1); + } else { + if (probe_bitmap & KVM_ARM_VGIC_V3) { + vms->gic_version =3D VIRT_GIC_VERSION_3; + } else { + vms->gic_version =3D VIRT_GIC_VERSION_2; + } } } } else if (vms->gic_version =3D=3D VIRT_GIC_VERSION_NOSEL) { diff --git a/target/arm/kvm.c b/target/arm/kvm.c index 85860e6f95..390077c518 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -874,15 +874,17 @@ int kvm_arch_irqchip_create(KVMState *s) =20 int kvm_arm_vgic_probe(void) { + int val =3D 0; + if (kvm_create_device(kvm_state, KVM_DEV_TYPE_ARM_VGIC_V3, true) =3D=3D 0) { - return 3; - } else if (kvm_create_device(kvm_state, - KVM_DEV_TYPE_ARM_VGIC_V2, true) =3D=3D 0)= { - return 2; - } else { - return 0; + val |=3D KVM_ARM_VGIC_V3; } + if (kvm_create_device(kvm_state, + KVM_DEV_TYPE_ARM_VGIC_V2, true) =3D=3D 0) { + val |=3D KVM_ARM_VGIC_V2; + } + return val; } =20 int kvm_arm_set_irq(int cpu, int irqtype, int irq, int level) diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h index ae9e075d75..48bf5e16d5 100644 --- a/target/arm/kvm_arm.h +++ b/target/arm/kvm_arm.h @@ -15,6 +15,9 @@ #include "exec/memory.h" #include "qemu/error-report.h" =20 +#define KVM_ARM_VGIC_V2 (1 << 0) +#define KVM_ARM_VGIC_V3 (1 << 1) + /** * kvm_arm_vcpu_init: * @cs: CPUState --=20 2.20.1