Add EjectCpu(), which handles the CPU ejection, and provides a holding area for said CPUs. It is called via SmmCpuFeaturesRendezvousExit(), at the tail end of the SMI handling. Also UnplugCpus() now stashes QEMU Selectors of CPUs which need to be ejected in CPU_HOT_EJECT_DATA.QemuSelectorMap. This is used by EjectCpu() to identify CPUs marked for ejection. Cc: Laszlo Ersek <lersek@redhat.com> Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Ard Biesheuvel <ard.biesheuvel@arm.com> Cc: Igor Mammedov <imammedo@redhat.com> Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com> Cc: Aaron Young <aaron.young@oracle.com> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3132 Signed-off-by: Ankur Arora <ankur.a.arora@oracle.com> Message-Id: <20210312062656.2477515-9-ankur.a.arora@oracle.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com>
67 lines
1.6 KiB
INI
67 lines
1.6 KiB
INI
## @file
|
|
# Root SMI handler for VCPU hotplug SMIs.
|
|
#
|
|
# Copyright (c) 2020, Red Hat, Inc.
|
|
#
|
|
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
##
|
|
|
|
[Defines]
|
|
INF_VERSION = 1.29
|
|
PI_SPECIFICATION_VERSION = 0x00010046 # PI-1.7.0
|
|
BASE_NAME = CpuHotplugSmm
|
|
FILE_GUID = 84EEA114-C6BE-4445-8F90-51D97863E363
|
|
MODULE_TYPE = DXE_SMM_DRIVER
|
|
ENTRY_POINT = CpuHotplugEntry
|
|
|
|
#
|
|
# The following information is for reference only and not required by the build
|
|
# tools.
|
|
#
|
|
# VALID_ARCHITECTURES = IA32 X64
|
|
#
|
|
|
|
[Sources]
|
|
ApicId.h
|
|
CpuHotplug.c
|
|
FirstSmiHandler.nasm
|
|
FirstSmiHandlerContext.h
|
|
PostSmmPen.nasm
|
|
QemuCpuhp.c
|
|
QemuCpuhp.h
|
|
Smbase.c
|
|
Smbase.h
|
|
|
|
[Packages]
|
|
MdePkg/MdePkg.dec
|
|
OvmfPkg/OvmfPkg.dec
|
|
UefiCpuPkg/UefiCpuPkg.dec
|
|
|
|
[LibraryClasses]
|
|
BaseLib
|
|
BaseMemoryLib
|
|
CpuLib
|
|
DebugLib
|
|
LocalApicLib
|
|
MmServicesTableLib
|
|
PcdLib
|
|
SafeIntLib
|
|
SynchronizationLib
|
|
UefiDriverEntryPoint
|
|
|
|
[Protocols]
|
|
gEfiMmCpuIoProtocolGuid ## CONSUMES
|
|
gEfiSmmCpuServiceProtocolGuid ## CONSUMES
|
|
|
|
[Pcd]
|
|
gUefiCpuPkgTokenSpaceGuid.PcdCpuHotPlugDataAddress ## CONSUMES
|
|
gUefiOvmfPkgTokenSpaceGuid.PcdCpuHotEjectDataAddress ## CONSUMES
|
|
gUefiOvmfPkgTokenSpaceGuid.PcdQ35SmramAtDefaultSmbase ## CONSUMES
|
|
|
|
[FeaturePcd]
|
|
gUefiOvmfPkgTokenSpaceGuid.PcdSmmSmramRequire ## CONSUMES
|
|
|
|
[Depex]
|
|
gEfiMmCpuIoProtocolGuid AND
|
|
gEfiSmmCpuServiceProtocolGuid
|