From patchwork Sun May 12 08:36:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jones X-Patchwork-Id: 10939943 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 3013A933 for ; Sun, 12 May 2019 08:45:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1E08120564 for ; Sun, 12 May 2019 08:45:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0EA3B232A7; Sun, 12 May 2019 08:45:56 +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=-5.2 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id AC85720564 for ; Sun, 12 May 2019 08:45:55 +0000 (UTC) Received: from localhost ([127.0.0.1]:40610 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hPk7H-0002ky-2J for patchwork-qemu-devel@patchwork.kernel.org; Sun, 12 May 2019 04:45:55 -0400 Received: from eggs.gnu.org ([209.51.188.92]:38365) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hPjzW-0004I5-6E for qemu-devel@nongnu.org; Sun, 12 May 2019 04:37:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hPjzU-0003kD-Ff for qemu-devel@nongnu.org; Sun, 12 May 2019 04:37:54 -0400 Received: from mx1.redhat.com ([209.132.183.28]:52478) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hPjz1-0003UD-Lz; Sun, 12 May 2019 04:37:49 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A24F03084248; Sun, 12 May 2019 08:37:21 +0000 (UTC) Received: from kamzik.brq.redhat.com (ovpn-116-87.ams2.redhat.com [10.36.116.87]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3754E5D706; Sun, 12 May 2019 08:37:16 +0000 (UTC) From: Andrew Jones To: qemu-devel@nongnu.org, qemu-arm@nongnu.org Date: Sun, 12 May 2019 10:36:21 +0200 Message-Id: <20190512083624.8916-11-drjones@redhat.com> In-Reply-To: <20190512083624.8916-1-drjones@redhat.com> References: <20190512083624.8916-1-drjones@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.40]); Sun, 12 May 2019 08:37:21 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 10/13] target/arm/monitor: kvm: only return valid sve vector sets X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, richard.henderson@linaro.org, armbru@redhat.com, abologna@redhat.com, alex.bennee@linaro.org, Dave.Martin@arm.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP While the TCG SVE implementation can implement all vector lengths which are a quadword multiple, up to some maximum length, KVM can only provide what the host supports, and not all multiples are required to be supported by the architecture. With this patch we extend the QMP query to ask KVM for the valid vectors when KVM is enabled. Signed-off-by: Andrew Jones --- target/arm/monitor.c | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/target/arm/monitor.c b/target/arm/monitor.c index 8b2afa255c92..3e13dd7c7b7a 100644 --- a/target/arm/monitor.c +++ b/target/arm/monitor.c @@ -84,6 +84,41 @@ GICCapabilityList *qmp_query_gic_capabilities(Error **errp) return head; } +#ifdef CONFIG_KVM +static SVEVectorLengths *qmp_kvm_sve_vls_get(void) +{ + CPUArchState *env = mon_get_cpu_env(); + ARMCPU *cpu = arm_env_get_cpu(env); + uint64_t sve_vls[KVM_ARM64_SVE_VLS_WORDS]; + SVEVectorLengths *vls = g_new(SVEVectorLengths, 1); + intList **v = &vls->vls; + int ret, i; + + ret = kvm_arm_get_sve_vls(CPU(cpu), sve_vls); + if (ret <= 0) { + *v = g_new0(intList, 1); /* one vl of 0 means none supported */ + return vls; + } + + for (i = KVM_ARM64_SVE_VQ_MIN; i <= ret; ++i) { + int bitval = (sve_vls[(i - KVM_ARM64_SVE_VQ_MIN) / 64] >> + ((i - KVM_ARM64_SVE_VQ_MIN) % 64)) & 1; + if (bitval) { + *v = g_new0(intList, 1); + (*v)->value = i; + v = &(*v)->next; + } + } + + return vls; +} +#else +static SVEVectorLengths *qmp_kvm_sve_vls_get(void) +{ + return NULL; +} +#endif + static SVEVectorLengths *qmp_sve_vls_get(void) { CPUArchState *env = mon_get_cpu_env(); @@ -130,7 +165,13 @@ static SVEVectorLengths *qmp_sve_vls_dup_and_truncate(SVEVectorLengths *vls) SVEVectorLengthsList *qmp_query_sve_vector_lengths(Error **errp) { SVEVectorLengthsList *vls_list = g_new0(SVEVectorLengthsList, 1); - SVEVectorLengths *vls = qmp_sve_vls_get(); + SVEVectorLengths *vls; + + if (kvm_enabled()) { + vls = qmp_kvm_sve_vls_get(); + } else { + vls = qmp_sve_vls_get(); + } while (vls) { vls_list->value = vls;