From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: redhat.com, ip: 209.132.183.28, mailfrom: lersek@redhat.com) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by groups.io with SMTP; Tue, 08 Oct 2019 04:27:19 -0700 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9B227C057F31; Tue, 8 Oct 2019 11:27:18 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-120-109.rdu2.redhat.com [10.10.120.109]) by smtp.corp.redhat.com (Postfix) with ESMTP id AAB48600CE; Tue, 8 Oct 2019 11:27:16 +0000 (UTC) From: "Laszlo Ersek" To: edk2-devel-groups-io Cc: Anthony Perard , Ard Biesheuvel , Eric Dong , Igor Mammedov , Jordan Justen , Julien Grall , Ray Ni Subject: [PATCH 0/4] UefiCpuPkg, OvmfPkg: separate PCDs for boot CPU count vs. max CPU count Date: Tue, 8 Oct 2019 13:27:10 +0200 Message-Id: <20191008112714.6215-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Tue, 08 Oct 2019 11:27:18 +0000 (UTC) Content-Transfer-Encoding: quoted-printable Repo: https://github.com/lersek/edk2.git Branch: max_cpus_bz_1515 Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1515 UefiCpuPkg/MpInitLib currently lacks support for the following use case: - time-limited AP enumeration is not reliable on the platform (individual AP check-in may take arbitrarily long), and - APs may finish the wakeup routine, and report in to the BSP, in any sequence whatsoever, and - the number of boot CPUs (which is known in advance) is strictly less than the number of maximum CPUs (which is also known in advance). In the above case, the platform cannot tell UefiCpuPkg/MpInitLib to wait exactly until all boot APs check in. That is, the platform can't request that the AP enumeration never time out, but also not wait for too long. For supporting this use case, the patch series introduces PcdCpuBootLogicalProcessorNumber to UefiCpuPkg, and makes MpInitLib wait for exactly that many CPUs (=3D BSP + APs) to show up during CPU enumeration. Working towards VCPU hotplug with OVMF, OvmfPkg/PlatformPei fetches both the boot and the max CPU counts from QEMU, co-operating with the following QEMU patch set: [qemu-devel] [PATCH 0/4] hw/i386: pass "MachineState.smp.max_cpus" to O= VMF http://mid.mail-archive.com/20191008105259.5378-1-lersek@redhat.com and passes them to UefiCpuPkg via PcdCpuBootLogicalProcessorNumber and PcdCpuMaxLogicalProcessorNumber. As a result, PcdCpuApInitTimeOutInMicroSeconds becomes irrelevant for, and unused by, OVMF -- time-limited AP enumeration is never going to be used. When OVMF is built with -D SMM_REQUIRE, this patch series is just a small building block, towards the full VCPU hotplug feature. However, when OVMF is built without -D SMM_REQUIRE, this series (together with the counterpart patch set for QEMU) completes the VCPU hotplug feature: it allows S3 resume to work with VCPUs hot-plugged previously (at OS runtime, of course). Cc: Anthony Perard Cc: Ard Biesheuvel Cc: Eric Dong Cc: Igor Mammedov Cc: Jordan Justen Cc: Julien Grall Cc: Ray Ni Thanks Laszlo Laszlo Ersek (4): UefiCpuPkg/MpInitLib: honor the platform's boot CPU count in AP detection OvmfPkg/OvmfXen.dsc: remove PcdCpu* dynamic defaults OvmfPkg/IndustryStandard: define FW_CFG_X86_TOPOLOGY structure type OvmfPkg/PlatformPei: rewrite MaxCpuCountInitialization() for CPU hotplug OvmfPkg/Include/IndustryStandard/QemuFwCfg.h | 22 ++++++ OvmfPkg/OvmfPkgIa32.dsc | 2 +- OvmfPkg/OvmfPkgIa32X64.dsc | 2 +- OvmfPkg/OvmfPkgX64.dsc | 2 +- OvmfPkg/OvmfXen.dsc | 4 - OvmfPkg/PlatformPei/Platform.c | 83 +++++++++++++------- OvmfPkg/PlatformPei/PlatformPei.inf | 2 +- UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf | 1 + UefiCpuPkg/Library/MpInitLib/MpLib.c | 42 ++++++---- UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf | 3 +- UefiCpuPkg/UefiCpuPkg.dec | 11 +++ UefiCpuPkg/UefiCpuPkg.uni | 4 + 12 files changed, 125 insertions(+), 53 deletions(-) --=20 2.19.1.3.g30247aa5d201