From nobody Tue May 21 11:09:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1612193943; cv=none; d=zohomail.com; s=zohoarc; b=VW9+06b2FNTJTv9bIk+m/oqP8C0QPHTvm9aZ5aVXRNRfapQiA2IkQX3G1C75cnsDbtV9fzj78EwHMCPSbTdVlXvuguRiWkEndgcvIPA1v9uJK5+j7MhMo+fTgdWtfgwBmbJiqB+1i0CWGsCBOAxKe5O6Auwax0qbSchp8p0gYlg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612193943; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=dF+DNiXzOE5QV+MXlTEAPcImOxnJARCsewEVeGhWiIE=; b=dhMj6IpHhSxVD5RJREzk+Chr0cu1Gnw61zajsnrDYItFjY/gOTZ++zpZRRwfQANn4DrIPOthwqeid3CHk7BZHbS1bgJeUCUlgL+P6ujGPY0z+zGuG+LVGmvodp7j7UkLvF2SARC/l1ocO2TometOhSKL0qzEyyI5OerAIA4lEU8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612193943354978.142950578126; Mon, 1 Feb 2021 07:39:03 -0800 (PST) Received: from localhost ([::1]:52838 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l6bI6-0000IM-3j for importer@patchew.org; Mon, 01 Feb 2021 10:39:02 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39964) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l6bFu-00068y-UQ for qemu-devel@nongnu.org; Mon, 01 Feb 2021 10:36:47 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:37531) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l6bFq-0001wr-Bs for qemu-devel@nongnu.org; Mon, 01 Feb 2021 10:36:46 -0500 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-454-mfD5Ihs-Psy6Cy2bGmP-Bw-1; Mon, 01 Feb 2021 10:36:36 -0500 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 mimecast-mx01.redhat.com (Postfix) with ESMTPS id C77088030AE; Mon, 1 Feb 2021 15:36:35 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-114-195.ams2.redhat.com [10.36.114.195]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8BDAA5D6BA; Mon, 1 Feb 2021 15:36:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612193801; 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=dF+DNiXzOE5QV+MXlTEAPcImOxnJARCsewEVeGhWiIE=; b=jL+EH1QpzkogW7DN+JOPRwxCrJBSd0mZJi7WRvgG2yf/PB64C72DjBGw4si93Y0KnioPtt OBpvmmTfHCgKMNSGatNXxYeDfbseMzsSVyK31vui+sygt1OFztjj1Y9wSSvok9K2UACFki gRRolTXIEOcVbebLAfhMpctYRYZmm3o= X-MC-Unique: mfD5Ihs-Psy6Cy2bGmP-Bw-1 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Subject: [PATCH RFC 1/4] docs: add a table showing x86-64 ABI compatibility levels Date: Mon, 1 Feb 2021 15:36:03 +0000 Message-Id: <20210201153606.4158076-2-berrange@redhat.com> In-Reply-To: <20210201153606.4158076-1-berrange@redhat.com> References: <20210201153606.4158076-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=berrange@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=63.128.21.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.351, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Florian Weimer , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Eduardo Habkost , "Michael S. Tsirkin" , Richard Henderson , Cleber Rosa , Paolo Bonzini Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) It is useful to know which CPUs satisfy each x86-64 ABI compatibility level, when dealing with guest OS that require something newer than the baseline ABI. These ABI levels are defined in: https://gitlab.com/x86-psABIs/x86-64-ABI/ and supported by GCC, CLang, GLibC and more. Signed-off-by: Daniel P. Berrang=C3=A9 --- MAINTAINERS | 2 +- docs/system/cpu-models-x86-abi.csv | 121 +++++++++++++++++++++++++++++ docs/system/cpu-models-x86.rst.inc | 18 +++++ 3 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 docs/system/cpu-models-x86-abi.csv diff --git a/MAINTAINERS b/MAINTAINERS index fbb228ef2b..bb8d60c458 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -344,7 +344,7 @@ F: tests/tcg/i386/ F: tests/tcg/x86_64/ F: hw/i386/ F: disas/i386.c -F: docs/system/cpu-models-x86.rst.inc +F: docs/system/cpu-models-x86* T: git https://gitlab.com/ehabkost/qemu.git x86-next =20 Xtensa TCG CPUs diff --git a/docs/system/cpu-models-x86-abi.csv b/docs/system/cpu-models-x8= 6-abi.csv new file mode 100644 index 0000000000..4565e6a535 --- /dev/null +++ b/docs/system/cpu-models-x86-abi.csv @@ -0,0 +1,121 @@ +Model,baseline,v2,v3,v4 +486,,,, +486-v1,,,, +Broadwell,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Broadwell-IBRS,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Broadwell-noTSX,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Broadwell-noTSX-IBRS,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Broadwell-v1,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Broadwell-v2,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Broadwell-v3,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Broadwell-v4,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Cascadelake-Server,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +Cascadelake-Server-noTSX,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +Cascadelake-Server-v1,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +Cascadelake-Server-v2,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +Cascadelake-Server-v3,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +Cascadelake-Server-v4,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +Conroe,=E2=9C=85,,, +Conroe-v1,=E2=9C=85,,, +Cooperlake,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +Cooperlake-v1,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +Denverton,=E2=9C=85,=E2=9C=85,, +Denverton-v1,=E2=9C=85,=E2=9C=85,, +Denverton-v2,=E2=9C=85,=E2=9C=85,, +Dhyana,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Dhyana-v1,=E2=9C=85,=E2=9C=85,=E2=9C=85, +EPYC,=E2=9C=85,=E2=9C=85,=E2=9C=85, +EPYC-IBPB,=E2=9C=85,=E2=9C=85,=E2=9C=85, +EPYC-Rome,=E2=9C=85,=E2=9C=85,=E2=9C=85, +EPYC-Rome-v1,=E2=9C=85,=E2=9C=85,=E2=9C=85, +EPYC-v1,=E2=9C=85,=E2=9C=85,=E2=9C=85, +EPYC-v2,=E2=9C=85,=E2=9C=85,=E2=9C=85, +EPYC-v3,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Haswell,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Haswell-IBRS,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Haswell-noTSX,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Haswell-noTSX-IBRS,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Haswell-v1,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Haswell-v2,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Haswell-v3,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Haswell-v4,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Icelake-Client,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Icelake-Client-noTSX,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Icelake-Client-v1,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Icelake-Client-v2,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Icelake-Server,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +Icelake-Server-noTSX,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +Icelake-Server-v1,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +Icelake-Server-v2,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +Icelake-Server-v3,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +Icelake-Server-v4,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +IvyBridge,=E2=9C=85,=E2=9C=85,, +IvyBridge-IBRS,=E2=9C=85,=E2=9C=85,, +IvyBridge-v1,=E2=9C=85,=E2=9C=85,, +IvyBridge-v2,=E2=9C=85,=E2=9C=85,, +KnightsMill,=E2=9C=85,=E2=9C=85,=E2=9C=85, +KnightsMill-v1,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Nehalem,=E2=9C=85,=E2=9C=85,, +Nehalem-IBRS,=E2=9C=85,=E2=9C=85,, +Nehalem-v1,=E2=9C=85,=E2=9C=85,, +Nehalem-v2,=E2=9C=85,=E2=9C=85,, +Opteron_G1,=E2=9C=85,,, +Opteron_G1-v1,=E2=9C=85,,, +Opteron_G2,=E2=9C=85,,, +Opteron_G2-v1,=E2=9C=85,,, +Opteron_G3,=E2=9C=85,,, +Opteron_G3-v1,=E2=9C=85,,, +Opteron_G4,=E2=9C=85,=E2=9C=85,, +Opteron_G4-v1,=E2=9C=85,=E2=9C=85,, +Opteron_G5,=E2=9C=85,=E2=9C=85,, +Opteron_G5-v1,=E2=9C=85,=E2=9C=85,, +Penryn,=E2=9C=85,,, +Penryn-v1,=E2=9C=85,,, +SandyBridge,=E2=9C=85,=E2=9C=85,, +SandyBridge-IBRS,=E2=9C=85,=E2=9C=85,, +SandyBridge-v1,=E2=9C=85,=E2=9C=85,, +SandyBridge-v2,=E2=9C=85,=E2=9C=85,, +Skylake-Client,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Skylake-Client-IBRS,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Skylake-Client-noTSX-IBRS,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Skylake-Client-v1,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Skylake-Client-v2,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Skylake-Client-v3,=E2=9C=85,=E2=9C=85,=E2=9C=85, +Skylake-Server,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +Skylake-Server-IBRS,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +Skylake-Server-noTSX-IBRS,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +Skylake-Server-v1,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +Skylake-Server-v2,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +Skylake-Server-v3,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +Skylake-Server-v4,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +Snowridge,=E2=9C=85,=E2=9C=85,, +Snowridge-v1,=E2=9C=85,=E2=9C=85,, +Snowridge-v2,=E2=9C=85,=E2=9C=85,, +Westmere,=E2=9C=85,=E2=9C=85,, +Westmere-IBRS,=E2=9C=85,=E2=9C=85,, +Westmere-v1,=E2=9C=85,=E2=9C=85,, +Westmere-v2,=E2=9C=85,=E2=9C=85,, +athlon,,,, +athlon-v1,,,, +core2duo,=E2=9C=85,,, +core2duo-v1,=E2=9C=85,,, +coreduo,,,, +coreduo-v1,,,, +kvm32,,,, +kvm32-v1,,,, +kvm64,=E2=9C=85,,, +kvm64-v1,=E2=9C=85,,, +n270,,,, +n270-v1,,,, +pentium,,,, +pentium-v1,,,, +pentium2,,,, +pentium2-v1,,,, +pentium3,,,, +pentium3-v1,,,, +phenom,=E2=9C=85,,, +phenom-v1,=E2=9C=85,,, +qemu32,,,, +qemu32-v1,,,, +qemu64,=E2=9C=85,,, +qemu64-v1,=E2=9C=85,,, diff --git a/docs/system/cpu-models-x86.rst.inc b/docs/system/cpu-models-x8= 6.rst.inc index 9a2327828e..b964b29c78 100644 --- a/docs/system/cpu-models-x86.rst.inc +++ b/docs/system/cpu-models-x86.rst.inc @@ -39,6 +39,24 @@ CPU, as they would with "Host passthrough", but gives mu= ch of the benefit of passthrough, while making live migration safe. =20 =20 +ABI compatibility levels for CPU models +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The x86_64 architecture has a number of `ABI compatibility levels`_ +defined. Traditionally most operating systems and toolchains would +only target the original baseline ABI. It is expected that in +future OS and toolchains are likely to target newer ABIs. The +following table illustrates which ABI compatibility levels can be +satisfied by the QEMU CPU models + +.. _ABI compatibility levels: https://gitlab.com/x86-psABIs/x86-64-ABI/ + +.. csv-table:: x86-64 ABI compatibility levels + :file: cpu-models-x86-abi.csv + :widths: 40,15,15,15,15 + :header-rows: 1 + + Preferred CPU models for Intel x86 hosts ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ =20 --=20 2.29.2 From nobody Tue May 21 11:09:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1612194105; cv=none; d=zohomail.com; s=zohoarc; b=Z0xDyHmV2urJdUTaQqil9QKH4LA+BebEYj4M1wWuSPdiTfeULcP/Hhl1vfP70U7JYhlQ6LknBKkfVj/jHKzw6SnQ80kuPaLVW+YDci0Gg/BgWVkTNCf39F4vP3DEIhddcQWXnqi48wgAHGEs6As+5eWskedA5gnV2ETlSDd3LLM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612194105; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=mWu528xecRv249tVgdsac4Bymg6FumNA8ippcRa+Ldc=; b=QFwECdK9VI5RGFYH9Bn9SWgvkmppL/wz/KfeMGM6M68nV47GNzAoVTH0Lxw1QeUbuq0lA8/44Jg99CSorJhXKDI3Uc2eM5W506umG+AFHLGwKGGnDVKI09qHphAZwjrtRPxUQE+gU398mSaBJUXU2Ylqz8sV1lJtOgQC+vNrGPI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612194105876265.89715580148356; Mon, 1 Feb 2021 07:41:45 -0800 (PST) Received: from localhost ([::1]:60252 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l6bKi-0003V0-JH for importer@patchew.org; Mon, 01 Feb 2021 10:41:44 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39984) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l6bFw-00069Q-LH for qemu-devel@nongnu.org; Mon, 01 Feb 2021 10:36:48 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:48223) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l6bFr-0001x5-Im for qemu-devel@nongnu.org; Mon, 01 Feb 2021 10:36:47 -0500 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-551-lAs_dmjnP36QB2YjtEunPg-1; Mon, 01 Feb 2021 10:36:39 -0500 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 mimecast-mx01.redhat.com (Postfix) with ESMTPS id 292678049C0; Mon, 1 Feb 2021 15:36:38 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-114-195.ams2.redhat.com [10.36.114.195]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1FDCE5D6BA; Mon, 1 Feb 2021 15:36:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612193803; 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=mWu528xecRv249tVgdsac4Bymg6FumNA8ippcRa+Ldc=; b=KWIcq+xsbWqA3IyWCzzP0mWuiSKiVwG9r1ANt4B5HdPmJXrCvcCQph5s2mkM/alIroe7R0 5/WxfkZHtOfOAYuggWsAg3LFx29/cyyUktha/60kD+Fvxx+kZ7an8LPF4Cyw88H63nU1Nc fq1mC5C6OkZE+FQQzpGaPcZC2cNPQJU= X-MC-Unique: lAs_dmjnP36QB2YjtEunPg-1 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Subject: [PATCH RFC 2/4] target/i386: define CPU models to model x86-64 ABI levels Date: Mon, 1 Feb 2021 15:36:04 +0000 Message-Id: <20210201153606.4158076-3-berrange@redhat.com> In-Reply-To: <20210201153606.4158076-1-berrange@redhat.com> References: <20210201153606.4158076-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=berrange@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=216.205.24.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.351, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Florian Weimer , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Eduardo Habkost , "Michael S. Tsirkin" , Richard Henderson , Cleber Rosa , Paolo Bonzini Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) To paraphrase: https://developers.redhat.com/blog/2021/01/05/building-red-hat-enterprise= -linux-9-for-the-x86-64-v2-microarchitecture-level/ In 2020, AMD, Intel, Red Hat, and SUSE worked together to define three microarchitecture levels on top of the historical x86-64 baseline: * x86-64: original x86_64 baseline instruction set * x86-64-v2: vector instructions up to Streaming SIMD Extensions 4.2 (SSE4.2) and Supplemental Streaming SIMD Extensions 3 (SSSE3), the POPCNT instruction, and CMPXCHG16B * x86-64-v3: vector instructions up to AVX2, MOVBE, and additional bit-manipulation instructions. * x86-64-v4: vector instructions from some of the AVX-512 variants. This list of features is defined in the doc at: https://gitlab.com/x86-psABIs/x86-64-ABI/ QEMU has historically defaulted to the "qemu64" CPU model on x86_64 targets, which is approximately the x86-64 baseline ABI, with 'SVM' added. It is thought it might be desirable if QEMU could provide CPU models that closely correspond to the ABI levels, while offering portability across the maximum number of physical CPUs. Historically we've found that defining CPU models with an arbitrary combination of CPU features can be problematic, as some guest OS will not check all features they use, and instead assume that if they see feature "XX", then "YY" will always exist. This is reasonable in bare metal, but subject to breakage in virtualization. Thus in defining the CPI models for the ABI levels, this patch attempted to base them off an existing CPU model. While each x86-64-abiNNN has a designated vendor, they are designed to be vendor agnostic models. ie they are capable of running on any AMD or Intel physical CPU model that satisfies the ABI level. eg althgouh the x86-64-abi2 model is based on Nehalem, it should be able to run guests on an Opteron_G4/G5/EPYC host, since those CPUs support the features required by the x86-64 v2 ABI. More precisely the models were defined as: * x86-64-abi1: close match for Opteron_G1, minus vme * x86-64-abi2: perfect match for Nehalem * x86-64-abi3: close match of Haswell-noTSX, minus aes pcid erms invpcid tsc-deadline x2apic pclmulqdq * x86-64-abi4: close match of Skylake-Server-noTSX-IBRS, minus spec-ctrl None of the CPU models declare any VMX/SVM features. This would make them unable to support nested virtualization with live migration. Given their vendor agnostic design, these CPU models are primarily though to useful as the default CPU model for machine types. QEMU upstream is quite conservative in mandating new hardware features, but a downstream vendor may choose to mandate a newer x86-64 ABI level for downstream only machine types. Note that TCG is not capable of supporting the 2 newest ABI levels currently: * x86-64-abi3: CPUID.01H:ECX.fma [bit 12] CPUID.01H:ECX.avx [bit 28] CPUID.01H:ECX.f16c [bit 29] CPUID.07H:EBX.avx2 [bit 5] * x86-64-abi4: CPUID.01H:ECX.pcid [bit 17] CPUID.01H:ECX.x2apic [bit 21] CPUID.01H:ECX.tsc-deadline [bit 24] CPUID.07H:EBX.invpcid [bit 10] CPUID.07H:EBX.avx512f [bit 16] CPUID.07H:EBX.avx512dq [bit 17] CPUID.07H:EBX.rdseed [bit 18] CPUID.07H:EBX.avx512cd [bit 28] CPUID.07H:EBX.avx512bw [bit 30] CPUID.07H:EBX.avx512vl [bit 31] CPUID.80000001H:ECX.3dnowprefetch [bit 8] CPUID.0DH:EAX.xsavec [bit 1] Signed-off-by: Daniel P. Berrang=C3=A9 --- docs/system/cpu-models-x86-abi.csv | 8 ++ target/i386/cpu.c | 156 +++++++++++++++++++++++++++++ 2 files changed, 164 insertions(+) diff --git a/docs/system/cpu-models-x86-abi.csv b/docs/system/cpu-models-x8= 6-abi.csv index 4565e6a535..d34d95d485 100644 --- a/docs/system/cpu-models-x86-abi.csv +++ b/docs/system/cpu-models-x86-abi.csv @@ -119,3 +119,11 @@ qemu32,,,, qemu32-v1,,,, qemu64,=E2=9C=85,,, qemu64-v1,=E2=9C=85,,, +x86-64-abi1,=E2=9C=85,,, +x86-64-abi1-v1,=E2=9C=85,,, +x86-64-abi2,=E2=9C=85,=E2=9C=85,, +x86-64-abi2-v1,=E2=9C=85,=E2=9C=85,, +x86-64-abi3,=E2=9C=85,=E2=9C=85,=E2=9C=85, +x86-64-abi3-v1,=E2=9C=85,=E2=9C=85,=E2=9C=85, +x86-64-abi4,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 +x86-64-abi4-v1,=E2=9C=85,=E2=9C=85,=E2=9C=85,=E2=9C=85 diff --git a/target/i386/cpu.c b/target/i386/cpu.c index ae89024d36..87a775a5eb 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -1827,6 +1827,162 @@ static CPUCaches epyc_rome_cache_info =3D { */ =20 static X86CPUDefinition builtin_x86_defs[] =3D { + /* + * These first few CPU models are designed to satisfy the + * x86_64 ABI levels defined in: + * + * https://gitlab.com/x86-psABIs/x86-64-ABI/ + * + * They were constructed as follows: + * + * - Find all the CPU models which can satisfy the ABI + * - Calculate the lowest common denominator (LCD) of these + * models' features + * - Find the named model most closely matching the LCD + * - Strip its features back to the LCD + * + * The above spec uses the "x86-64-vNN" naming convention. + * This clashes with the "vNN" suffix QEMU uses for versioning. + * Thus we use "abiNNN" as a suffix. + */ + { + /* + * Derived from Opteron_G1, minus + * vme + */ + .name =3D "x86-64-abi1", + .level =3D 5, + .vendor =3D CPUID_VENDOR_AMD, + .family =3D 15, + .model =3D 6, + .stepping =3D 1, + .features[FEAT_1_EDX] =3D + CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | + CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_M= CA | + CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | + CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | + CPUID_DE | CPUID_FP87, + .features[FEAT_1_ECX] =3D + CPUID_EXT_SSE3, + .features[FEAT_8000_0001_EDX] =3D + CPUID_EXT2_LM | CPUID_EXT2_NX | CPUID_EXT2_SYSCALL, + .xlevel =3D 0x80000008, + .model_id =3D "QEMU x86-64 baseline ABI", + }, + { + /* Derived from Nehalem */ + .name =3D "x86-64-abi2", + .level =3D 11, + .vendor =3D CPUID_VENDOR_INTEL, + .family =3D 6, + .model =3D 26, + .stepping =3D 3, + .features[FEAT_1_EDX] =3D + CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | + CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_M= CA | + CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | + CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | + CPUID_DE | CPUID_FP87, + .features[FEAT_1_ECX] =3D + CPUID_EXT_POPCNT | CPUID_EXT_SSE42 | CPUID_EXT_SSE41 | + CPUID_EXT_CX16 | CPUID_EXT_SSSE3 | CPUID_EXT_SSE3, + .features[FEAT_8000_0001_EDX] =3D + CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX, + .features[FEAT_8000_0001_ECX] =3D + CPUID_EXT3_LAHF_LM, + .xlevel =3D 0x80000008, + .model_id =3D "QEMU x86-64-v2 ABI", + }, + { + /* + * Derived from Haswell-noTSX, minus + * aes pcid erms invpcid tsc-deadline x2apic pclmulqdq + */ + .name =3D "x86-64-abi3", + .level =3D 0xd, + .vendor =3D CPUID_VENDOR_INTEL, + .family =3D 6, + .model =3D 60, + .stepping =3D 1, + .features[FEAT_1_EDX] =3D + CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | + CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_M= CA | + CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | + CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | + CPUID_DE | CPUID_FP87, + .features[FEAT_1_ECX] =3D + CPUID_EXT_AVX | CPUID_EXT_XSAVE | + CPUID_EXT_POPCNT | CPUID_EXT_SSE42 | + CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_SSSE3 | + CPUID_EXT_SSE3 | + CPUID_EXT_FMA | CPUID_EXT_MOVBE | + CPUID_EXT_F16C | CPUID_EXT_RDRAND, + .features[FEAT_8000_0001_EDX] =3D + CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_NX | + CPUID_EXT2_SYSCALL, + .features[FEAT_8000_0001_ECX] =3D + CPUID_EXT3_ABM | CPUID_EXT3_LAHF_LM, + .features[FEAT_7_0_EBX] =3D + CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 | + CPUID_7_0_EBX_AVX2 | CPUID_7_0_EBX_SMEP | + CPUID_7_0_EBX_BMI2, + .features[FEAT_XSAVE] =3D + CPUID_XSAVE_XSAVEOPT, + .features[FEAT_6_EAX] =3D + CPUID_6_EAX_ARAT, + .xlevel =3D 0x80000008, + .model_id =3D "QEMU x86-64-v3 ABI", + }, + + { + /* + * Derived from Skylake-Server-noTSX-IBRS, minus: + * spec-ctrl + */ + .name =3D "x86-64-abi4", + .level =3D 0xd, + .vendor =3D CPUID_VENDOR_INTEL, + .family =3D 6, + .model =3D 85, + .stepping =3D 4, + .features[FEAT_1_EDX] =3D + CPUID_VME | CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | + CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_M= CA | + CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | + CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | + CPUID_DE | CPUID_FP87, + .features[FEAT_1_ECX] =3D + CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES | + CPUID_EXT_POPCNT | CPUID_EXT_X2APIC | CPUID_EXT_SSE42 | + CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_SSSE3 | + CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3 | + CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_FMA | CPUID_EXT_MOVBE= | + CPUID_EXT_PCID | CPUID_EXT_F16C | CPUID_EXT_RDRAND, + .features[FEAT_8000_0001_EDX] =3D + CPUID_EXT2_LM | CPUID_EXT2_PDPE1GB | CPUID_EXT2_RDTSCP | + CPUID_EXT2_NX | CPUID_EXT2_SYSCALL, + .features[FEAT_8000_0001_ECX] =3D + CPUID_EXT3_ABM | CPUID_EXT3_LAHF_LM | CPUID_EXT3_3DNOWPREFETCH, + .features[FEAT_7_0_EBX] =3D + CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 | + CPUID_7_0_EBX_AVX2 | CPUID_7_0_EBX_SMEP | + CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INVPCI= D | + CPUID_7_0_EBX_RDSEED | CPUID_7_0_EBX_ADX | + CPUID_7_0_EBX_SMAP | CPUID_7_0_EBX_CLWB | + CPUID_7_0_EBX_AVX512F | CPUID_7_0_EBX_AVX512DQ | + CPUID_7_0_EBX_AVX512BW | CPUID_7_0_EBX_AVX512CD | + CPUID_7_0_EBX_AVX512VL, + .features[FEAT_7_0_ECX] =3D + CPUID_7_0_ECX_PKU, + .features[FEAT_XSAVE] =3D + CPUID_XSAVE_XSAVEOPT | CPUID_XSAVE_XSAVEC | + CPUID_XSAVE_XGETBV1, + .features[FEAT_6_EAX] =3D + CPUID_6_EAX_ARAT, + .xlevel =3D 0x80000008, + .model_id =3D "QEMU x86-64-v4 ABI", + }, + { .name =3D "qemu64", .level =3D 0xd, --=20 2.29.2 From nobody Tue May 21 11:09:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1612194200; cv=none; d=zohomail.com; s=zohoarc; b=CffdMzE+tTiyBscJY/kqtH7i/YXXXygRvQVuWD+xohkB7aOVpflR74zp/CJoGrYioeBeD/EMJzOIgiOVwrMyMRxiYgOPShcgxodkohdaQn2glkhjHYuenPB7I8KS+A/bQV9RT1Mz6J+rqt8ofeo9ie/QKzhWegv1QtwbWEeuPuw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612194200; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=cQmf6Y9P+GDqVnu/dGTDDJ0xu42HmxVndw8BdoX6gO4=; b=F2OzHJqxZ6eETYgXMT/c9LJP01IJP4aeRcbV3ziOsqXNgdyDoPRhQYsoxq75uBk/OI0CM2LX0ll6KL+oxRTCGGrjwKiiEiSioYcuMWWDgOyCA8lnPOQrMelDxSSvJWiCpel8nTHuxgJKJf5PRaC9OFf4cn6hffVVhONw5x/wd2Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16121942003081019.6632952507852; Mon, 1 Feb 2021 07:43:20 -0800 (PST) Received: from localhost ([::1]:36634 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l6bMF-0005Rg-9C for importer@patchew.org; Mon, 01 Feb 2021 10:43:19 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39986) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l6bFw-00069e-QA for qemu-devel@nongnu.org; Mon, 01 Feb 2021 10:36:48 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:36192) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l6bFu-0001yQ-8N for qemu-devel@nongnu.org; Mon, 01 Feb 2021 10:36:48 -0500 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-34-8y3CTZISNzitbWheG2V-JA-1; Mon, 01 Feb 2021 10:36:41 -0500 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 mimecast-mx01.redhat.com (Postfix) with ESMTPS id 801318049CA; Mon, 1 Feb 2021 15:36:40 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-114-195.ams2.redhat.com [10.36.114.195]) by smtp.corp.redhat.com (Postfix) with ESMTP id 76C805D756; Mon, 1 Feb 2021 15:36:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612193804; 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=cQmf6Y9P+GDqVnu/dGTDDJ0xu42HmxVndw8BdoX6gO4=; b=M+ria2ajddbETghqHlslj9oB2aKQs5oY9LQIwUlk2T56bw/2Xq4l9rlUoP/09sPkvlsbQN Y3t09KIYG6fjT1sPFsTBqOBLAuzmaKRMWuf/GqeaIHpgHE6v97/D5Fp6RIduOzxUzYW2nN YJdujW9t0SKxlrzg8Oca9lGDy83IlHg= X-MC-Unique: 8y3CTZISNzitbWheG2V-JA-1 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Subject: [PATCH RFC 3/4] NOT FOR MERGE target/i386: use x86-64-abi1 CPU model as default on x86_64 Date: Mon, 1 Feb 2021 15:36:05 +0000 Message-Id: <20210201153606.4158076-4-berrange@redhat.com> In-Reply-To: <20210201153606.4158076-1-berrange@redhat.com> References: <20210201153606.4158076-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=berrange@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=63.128.21.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.351, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Florian Weimer , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Eduardo Habkost , "Michael S. Tsirkin" , Richard Henderson , Cleber Rosa , Paolo Bonzini Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) The only differences between x86-64-abi1 and qemu64 is that the former does not have the 'vme' or 'svm' flags. In practice I don't think we should make this change, because it doesn't especially add any value as-is. The only possible case is around 'svm' because KVM already masks that feature, but TCG allows it. Thus using x86-64-abi1 would mean that KVM and TCG expose a more consistent feature set. Also note that while libvirt can cope with default CPUs changing now, it can't with the default CPU being a model name that it does not already know about. Signed-off-by: Daniel P. Berrang=C3=A9 --- hw/i386/pc_piix.c | 3 +++ hw/i386/pc_q35.c | 3 +++ target/i386/cpu.h | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index 6188c3e97e..c4c003599f 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -445,6 +445,9 @@ static void pc_i440fx_5_2_machine_options(MachineClass = *m) m->is_default =3D false; compat_props_add(m->compat_props, hw_compat_5_2, hw_compat_5_2_len); compat_props_add(m->compat_props, pc_compat_5_2, pc_compat_5_2_len); +#ifdef TARGET_X86_64 + m->default_cpu_type =3D X86_CPU_TYPE_NAME("qemu64"); +#endif } =20 DEFINE_I440FX_MACHINE(v5_2, "pc-i440fx-5.2", NULL, diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index 0a212443aa..606ac4f1f4 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -361,6 +361,9 @@ static void pc_q35_5_2_machine_options(MachineClass *m) m->alias =3D NULL; compat_props_add(m->compat_props, hw_compat_5_2, hw_compat_5_2_len); compat_props_add(m->compat_props, pc_compat_5_2, pc_compat_5_2_len); +#ifdef TARGET_X86_64 + m->default_cpu_type =3D X86_CPU_TYPE_NAME("qemu64"); +#endif } =20 DEFINE_Q35_MACHINE(v5_2, "pc-q35-5.2", NULL, diff --git a/target/i386/cpu.h b/target/i386/cpu.h index d23a5b340a..0a436b575f 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1956,7 +1956,7 @@ uint64_t cpu_get_tsc(CPUX86State *env); #define CPU_RESOLVING_TYPE TYPE_X86_CPU =20 #ifdef TARGET_X86_64 -#define TARGET_DEFAULT_CPU_TYPE X86_CPU_TYPE_NAME("qemu64") +#define TARGET_DEFAULT_CPU_TYPE X86_CPU_TYPE_NAME("x86-64-abi1") #else #define TARGET_DEFAULT_CPU_TYPE X86_CPU_TYPE_NAME("qemu32") #endif --=20 2.29.2 From nobody Tue May 21 11:09:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1612194069; cv=none; d=zohomail.com; s=zohoarc; b=lfRkZs5P2FcBGcCcpXFMTCCn8Og9H0zWr4QoLzGBzHfMCEqW8DUN6fyPCPkxkqItHuVLWQQTxmzqOIkqFxVma+8+dEcBSr2BpdPzPaEwEZhpmDiiXzy8WPVeDt+CiVp6F9cH12DykXHJ/wNl3qALdNxDCBNoafFwuKZ2a/SfrSk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612194069; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=f2EJSODB5LAHljHyR+fSWCk101JbX5colyD/l0sZhgo=; b=etq70HZrKA3rWPMd2k35I/AYm1t3arV6xhhMZ4zm/iu6DBmh6xoCTGU5MpIFyxoti3hOY9XAMj8HmKHHdF2SSyK6FfjvYuXOlLtg2ggzjqqYnV6tB5en0DMdIXkqk/91NdMyxojmosN6Z4apMRDnhl8ewIblu/wi6yCiQZeH/NA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612194069191963.9960245305452; Mon, 1 Feb 2021 07:41:09 -0800 (PST) Received: from localhost ([::1]:58620 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l6bK7-0002hX-N2 for importer@patchew.org; Mon, 01 Feb 2021 10:41:07 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39988) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l6bFx-0006B8-9B for qemu-devel@nongnu.org; Mon, 01 Feb 2021 10:36:49 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:33839) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l6bFu-0001yY-LE for qemu-devel@nongnu.org; Mon, 01 Feb 2021 10:36:49 -0500 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-245-V03-vsoYNY-dwKls3e1uXA-1; Mon, 01 Feb 2021 10:36:44 -0500 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 mimecast-mx01.redhat.com (Postfix) with ESMTPS id 07AB01800D50; Mon, 1 Feb 2021 15:36:43 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-114-195.ams2.redhat.com [10.36.114.195]) by smtp.corp.redhat.com (Postfix) with ESMTP id CC6925D6BA; Mon, 1 Feb 2021 15:36:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612193805; 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=f2EJSODB5LAHljHyR+fSWCk101JbX5colyD/l0sZhgo=; b=VEROJpvGgBH9Oir0Hu3CnVXCcLavSlsDMieQnPyIPEamHnIjolIKZkNCtVn0lN0DAKHceR pTW9IF5qSTGYr/ZUDTYEqCfOplgwvXKCt6huPu8Cud5FIT1shxl/kAy9Oe9ah41I23W+rT QjhP2Litt3nnQDsuz+9lBXJKxH9k8Ck= X-MC-Unique: V03-vsoYNY-dwKls3e1uXA-1 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Subject: [PATCH RFC 4/4] NOT FOR MERGE: script for CPU model stuff related to x86-64 ABI levels Date: Mon, 1 Feb 2021 15:36:06 +0000 Message-Id: <20210201153606.4158076-5-berrange@redhat.com> In-Reply-To: <20210201153606.4158076-1-berrange@redhat.com> References: <20210201153606.4158076-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=berrange@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=216.205.24.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.351, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Florian Weimer , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Eduardo Habkost , "Michael S. Tsirkin" , Richard Henderson , Cleber Rosa , Paolo Bonzini Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) This script is something that I wrote in order to help with creation of the first two patches. Since those patches are essentially static data once created, I don't intend for this script to be called repeatedly in future. I've just included here as a reference to show how I came up with content. Signed-off-by: Daniel P. Berrang=C3=A9 --- scripts/cpu-x86-uarch-abi.py | 194 +++++++++++++++++++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 scripts/cpu-x86-uarch-abi.py diff --git a/scripts/cpu-x86-uarch-abi.py b/scripts/cpu-x86-uarch-abi.py new file mode 100644 index 0000000000..8ef6d3ea08 --- /dev/null +++ b/scripts/cpu-x86-uarch-abi.py @@ -0,0 +1,194 @@ +#!/usr/bin/python3 + +from qemu import qmp +import sys + +# Mandatory CPUID features for each microarch ABI level +levels =3D [ + [ # x86-64 baseline + "cmov", + "cx8", + "fpu", + "fxsr", + "mmx", + "syscall", + "sse", + "sse2", + ], + [ # x86-64-v2 + "cx16", + "lahf-lm", + "popcnt", + "pni", + "sse4.1", + "sse4.2", + "ssse3", + ], + [ # x86-64-v3 + "avx", + "avx2", + "bmi1", + "bmi2", + "f16c", + "fma", + "abm", + "movbe", + ], + [ # x86-64-v4 + "avx512f", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512vl", + ], +] + +# Assumes externally launched process such as +# +# qemu-system-x86_64 -qmp unix:/tmp/qmp,server,nowait -display none -acc= el kvm +# +# Note different results will be obtained with TCG, as +# TCG masks out certain features otherwise present in +# the CPU model definitions, as does KVM. + + +sock =3D sys.argv[1] +cmd =3D sys.argv[2] +shell =3D qmp.QEMUMonitorProtocol(sock) +shell.connect() + +models =3D shell.cmd("query-cpu-definitions") + +# These QMP props don't correspond to CPUID fatures +# so ignore them +skip =3D [ + "family", + "min-level", + "min-xlevel", + "vendor", + "model", + "model-id", + "stepping", +] + +names =3D [model["name"] for model in models["return"]] + +models =3D {} + +for name in sorted(names): + cpu =3D shell.cmd("query-cpu-model-expansion", + { "type": "static", + "model": { "name": name }}) + + got =3D {} + for (feature, present) in cpu["return"]["model"]["props"].items(): + if present and feature not in skip: + got[feature] =3D True + + if name in ["host", "max", "base"]: + continue + + models[name] =3D { + # Dict of all present features in this CPU model + "features": got, + + # Whether each x86-64 ABI level is satisfied + "levels": [False, False, False, False], + + # Number of extra CPUID features compared to the x86-64 ABI level + "distance":[-1, -1, -1, -1], + + # CPUID features present in model, but not in ABI level + "delta":[[], [], [], []], + } + + +# Calculate whether the CPU models satisfy each ABI level +for name in models.keys(): + for level in range(len(levels)): + match =3D True + for feat in levels[level]: + if feat not in models[name]["features"]: + match =3D False + models[name]["levels"][level] =3D match + +# Cache list of CPU models satisfying each ABI level +abi_models =3D [ + [], + [], + [], + [], +] + +for name in models.keys(): + for level in range(len(levels)): + if models[name]["levels"][level]: + abi_models[level].append(name) + + +for level in range(len(abi_models)): + # Find the union of features in all CPU models satisfying this ABI + allfeatures =3D {} + for name in abi_models[level]: + for feat in models[name]["features"]: + allfeatures[feat] =3D True + + # Find the intersection of features in all CPU models satisfying this = ABI + commonfeatures =3D [] + for feat in allfeatures: + present =3D True + for name in models.keys(): + if not models[name]["levels"][level]: + continue + if feat not in models[name]["features"]: + present =3D False + if present: + commonfeatures.append(feat) + + # Determine how many extra features are present compared to the lowest + # common denominator + for name in models.keys(): + if not models[name]["levels"][level]: + continue + + delta =3D set(models[name]["features"].keys()) - set(commonfeature= s) + models[name]["distance"][level] =3D len(delta) + models[name]["delta"][level] =3D delta + +def print_uarch_abi_csv(): + print("Model,baseline,v2,v3,v4") + for name in models.keys(): + print(name, end=3D"") + for level in range(len(levels)): + if models[name]["levels"][level]: + print(",=E2=9C=85", end=3D"") + else: + print(",", end=3D"") + print() + +def find_closest_abi_models(): + for level in range(len(abi_models)): + # Determine which CPU model(s) are the "best" match for the lowest + # common denominator. One of these will be used as the basis for + # defining the generic CPU model for this ABI level + distance =3D -1 + for name in models.keys(): + if not models[name]["levels"][level]: + continue + + this =3D models[name]["distance"][level] + if distance =3D=3D -1 or this < distance: + distance =3D this + best =3D name + + for name in models: + if models[name]["distance"][level] =3D=3D distance: + print(" >> Level %d match %s (distance %d)" % ( + level, name, models[name]["distance"][level])) + print(" Remove features: %s" % + " ".join(models[name]["delta"][level])) + +if cmd =3D=3D "abi-table": + print_uarch_abi_csv() +elif cmd =3D=3D "abi-model": + find_closest_abi_models() --=20 2.29.2