Acidanthera UEFI Development Kit based on EDK II edk2-stable202311
Go to file
Laszlo Ersek cbccf99592 OvmfPkg/CpuHotplugSmm: fix CPU hotplug race just after SMI broadcast
The "virsh setvcpus" (plural) command may hot-plug several VCPUs in quick
succession -- it means a series of "device_add" QEMU monitor commands,
back-to-back.

If a "device_add" occurs *just after* ACPI raises the broadcast SMI, then:

- the CPU_FOREACH() loop in QEMU's ich9_apm_ctrl_changed() cannot make the
  SMI pending for the new CPU -- at that time, the new CPU doesn't even
  exist yet,

- OVMF will find the new CPU however (in the CPU hotplug register block),
  in QemuCpuhpCollectApicIds().

As a result, when the firmware sends an INIT-SIPI-SIPI to the new CPU in
SmbaseRelocate(), expecting it to boot into SMM (due to the pending SMI),
the new CPU instead boots straight into the post-RSM (normal mode) "pen",
skipping its initial SMI handler.

The CPU halts nicely in the pen, but its SMBASE is never relocated, and
the SMRAM message exchange with the BSP falls apart -- the BSP gets stuck
in the following loop:

  //
  // Wait until the hot-added CPU is just about to execute RSM.
  //
  while (Context->AboutToLeaveSmm == 0) {
    CpuPause ();
  }

because the new CPU's initial SMI handler never sets the flag to nonzero.

Fix this by sending a directed SMI to the new CPU just before sending it
the INIT-SIPI-SIPI. The various scenarios are documented in the code --
the cases affected by the patch are documented under point (2).

Note that this is not considered a security patch, as for a malicious
guest OS, the issue is not exploitable -- the symptom is a hang on the
BSP, in the above-noted loop in SmbaseRelocate(). Instead, the patch fixes
behavior for a benign guest OS.

Cc: Ard Biesheuvel <ard.biesheuvel@arm.com>
Cc: Igor Mammedov <imammedo@redhat.com>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Philippe Mathieu-Daudé <philmd@redhat.com>
Fixes: 51a6fb4118
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=2929
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Message-Id: <20200826222129.25798-3-lersek@redhat.com>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
2020-08-27 18:01:00 +00:00
.azurepipelines .azurepipelines: Add DynamicTablesPkg to CI matrix 2020-08-19 09:17:26 +00:00
.mergify .mergify: Add Mergify YML pull request rules configuration file 2019-11-11 13:02:51 -08:00
.pytool .pytool/EccCheck: Disable Ecc error code 10014 for open CI 2020-08-24 02:47:29 +00:00
ArmPkg ArmPkg/ArmMmuLib: Fix implicit cast 2020-06-27 09:00:57 +00:00
ArmPlatformPkg ArmPlatformPkg/PL011UartLib: Check PID2 if FiFoDepth is zero 2020-07-02 07:11:26 +00:00
ArmVirtPkg ArmVirtPkg/ArmVirtPkg.ci.yaml: Add configuration for Ecc check 2020-08-17 03:28:09 +00:00
BaseTools BaseTools: Fix the issue in VS2017/VS2019 setting 2020-08-14 03:07:59 +00:00
Conf BaseTools:Delete FrameworkDatabase from BaseTools/Conf 2019-05-09 15:03:30 +08:00
CryptoPkg CryptoPkg/CryptoPkg.ci.yaml: Add configuration for Ecc check 2020-08-17 03:28:09 +00:00
DynamicTablesPkg DynamicTablesPkg: Add SSDT Serial port for DBG2 2020-08-13 18:00:06 +00:00
EmbeddedPkg EmbeddedPkg/libfdt: Add strncmp macro to use AsciiStrnCmp 2020-08-24 17:19:33 +00:00
EmulatorPkg EmulatorPkg: Fix spelling mistake for occurred 2020-08-19 00:54:23 +00:00
FatPkg FatPkg/FatPkg.ci.yaml: Add configuration for Ecc check 2020-08-17 03:28:09 +00:00
FmpDevicePkg FmpDevicePkg/FmpDevicePkg.ci.yaml: Add configuration for Ecc check 2020-08-17 03:28:09 +00:00
IntelFsp2Pkg IntelFsp2Pkg/Tools/GenCfgOpt.py: Fix a bug about parse macro 2020-07-24 07:07:30 +00:00
IntelFsp2WrapperPkg IntelFsp2WrapperPkg/dsc: add HashLib, Tpm2CommandLib and Tpm2DeviceLib 2020-08-26 15:56:11 +00:00
MdeModulePkg MdeModulePkg: Fix spelling mistake for occurred 2020-08-19 00:54:23 +00:00
MdePkg MdePkg/Include: Add missing definition of SMBIOS type 42h in SmBios.h 2020-08-25 01:16:23 +00:00
NetworkPkg NetworkPkg/NetworkPkg.ci.yaml: Add configuration for Ecc check 2020-08-17 03:28:09 +00:00
OvmfPkg OvmfPkg/CpuHotplugSmm: fix CPU hotplug race just after SMI broadcast 2020-08-27 18:01:00 +00:00
PcAtChipsetPkg PcAtChipsetPkg/PcAtChipsetPkg.ci.yaml: Add configuration for Ecc check 2020-08-17 03:28:09 +00:00
SecurityPkg SecurityPkg/Tcg2: handle PRE HASH and LOG ONLY 2020-08-26 15:56:11 +00:00
ShellPkg ShellPkg: Fix spelling mistake for occurred 2020-08-19 00:54:23 +00:00
SignedCapsulePkg SignedCapsulePkg: Address NULL pointer dereference case. 2020-07-16 08:41:33 +00:00
SourceLevelDebugPkg SourceLevelDebugPkg: SourceLevelDebugPkg.dsc add UefiCpuLib LibraryClass 2020-07-07 23:25:16 +00:00
StandaloneMmPkg StandaloneMmPkg/StandaloneMmCoreEntryPoint: relocate StMM core on the fly 2020-06-16 16:15:00 +00:00
UefiCpuPkg UefiCpuPkg/MpInitLib: Always initialize the DoDecrement variable 2020-08-24 19:02:40 +00:00
UefiPayloadPkg UefiPayloadPkg: Prepare UefiPayloadPkg to use the VmgExitLib library 2020-08-16 16:45:42 +00:00
UnitTestFrameworkPkg UnitTestFrameworkPkg: Add configuration for Ecc check in yaml file 2020-08-17 03:28:09 +00:00
.gitignore .gitignore: Ignore python compiled files, extdeps, and vscode 2019-11-11 13:01:25 -08:00
.gitmodules .gitmodules: ignore untracked files in brotli 2020-04-29 03:43:42 +00:00
.mailmap .mailmap: add entry for Eugene Cohen reflecting email change 2020-04-09 09:56:14 +00:00
CONTRIBUTING.md Add a stub CONTRIBUTING.md pointing to the wiki 2020-08-18 18:07:43 +00:00
License-History.txt edk2: Add License-History.txt 2019-04-09 09:10:18 -07:00
License.txt edk2: Change License.txt from 2-Clause BSD to BSD+Patent 2019-04-09 09:10:18 -07:00
Maintainers.txt Maintainers.txt: Update Liming mail address 2020-08-24 19:24:17 +00:00
ReadMe.rst Readme.rst: List submodules and links to licenses 2020-08-06 20:20:40 +00:00
edksetup.bat edksetup.bat: Simplify the step to use CLANGPDB 2020-01-07 00:44:04 +00:00
edksetup.sh edksetup.sh: remove redundant -?, -h and --help in options parsing 2019-07-23 10:41:55 +02:00
pip-requirements.txt pip-requirements.txt: Add Ecc required lib 2020-08-17 03:28:09 +00:00

ReadMe.rst

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

==============

EDK II Project

==============



A modern, feature-rich, cross-platform firmware development

environment for the UEFI and PI specifications from www.uefi.org.



Core CI Build Status

--------------------



============================= ================= =============== ===================

 Host Type & Toolchain        Build Status      Test Status     Code Coverage

============================= ================= =============== ===================

Windows_VS2019_               |WindowsCiBuild|  |WindowsCiTest| |WindowsCiCoverage|

Ubuntu_GCC5_                  |UbuntuCiBuild|   |UbuntuCiTest|  |UbuntuCiCoverage|

============================= ================= =============== ===================



`More CI Build information <.pytool/Readme.md>`__



Platform CI Build Status

------------------------



Microsoft Windows VS2019

````````````````````````



============================= ================= ============= ============= ==============

 Toolchain                    CONFIG            DEBUG         RELEASE       NOOPT

============================= ================= ============= ============= ==============

EmulatorPkg_Win_VS2019_       | IA32            |em32d|       |em32r|       |em32n|

|                             | X64             |em64d|       |em64r|       |em64n|

OvmfPkg_Win_VS2019_           | IA32            |op32d|       |op32r|       |op32n|

|                             | X64             |op64d|       |op64r|       |op64n|

|                             | IA32 X64        |op3264d|     |op3264r|     |op3264n|

|                             | IA32 X64 FULL   |op3264fd|    |op3264fr|    |op3264fn|

============================= ================= ============= ============= ==============



Ubuntu 18.04 GCC5

`````````````````



============================= ================= ============= ============= ==============

 Toolchain                    CONFIG            DEBUG         RELEASE       NOOPT

============================= ================= ============= ============= ==============

ArmVirtPkg_Ubuntu_GCC5_       | AARCH64         |avAArch64du| |avAArch64ru| |avAArch64nu|

|                             | ARM             |avArmdu|     |avArmru|     |avArmnu|

EmulatorPkg_Ubuntu_GCC5_      | IA32            |em32du|      |em32ru|      |em32nu|

|                             | X64             |em64du|      |em64ru|      |em64nu|

OvmfPkg_Ubuntu_GCC5_          | IA32            |op32du|      |op32ru|      |op32nu|

|                             | X64             |op64du|      |op64ru|      |op64nu|

|                             | IA32 X64        |op3264du|    |op3264ru|    |op3264nu|

|                             | IA32 X64 FULL   |op3264fdu|   |op3264fru|   |op3264fru|

============================= ================= ============= ============= ==============



|TCBZ_2668|_ - EmulatorPkg Ubuntu GCC5 Segfaults during execution.



|TCBZ_2639|_ - EmulatorPkg Ubuntu GCC5 Segfaults during execution.



`More ArmVirtPkg CI Build Information <ArmVirtPkg/PlatformCI/ReadMe.md>`__



`More EmulatorPkg CI Build Information <EmulatorPkg/PlatformCI/ReadMe.md>`__



`More OvmfPkg CI Build Information <OvmfPkg/PlatformCI/ReadMe.md>`__





License Details

---------------



The majority of the content in the EDK II open source project uses a

`BSD-2-Clause Plus Patent License <License.txt>`__. The EDK II open

source project contains the following components that are covered by additional

licenses:



-  `BaseTools/Source/C/LzmaCompress <BaseTools/Source/C/LzmaCompress/LZMA-SDK-README.txt>`__

-  `BaseTools/Source/C/VfrCompile/Pccts <BaseTools/Source/C/VfrCompile/Pccts/RIGHTS>`__

-  `CryptoPkg\Library\BaseCryptLib\SysCall\inet_pton.c <CryptoPkg\Library\BaseCryptLib\SysCall\inet_pton.c>`__

-  `CryptoPkg\Library\Include\crypto\dso_conf.h <https://github.com/openssl/openssl/blob/e2e09d9fba1187f8d6aafaa34d4172f56f1ffb72/LICENSE>`__

-  `CryptoPkg\Library\Include\openssl\opensslconf.h <https://github.com/openssl/openssl/blob/e2e09d9fba1187f8d6aafaa34d4172f56f1ffb72/LICENSE>`__

-  `EmbeddedPkg/Library/FdtLib <EmbeddedPkg/Library/FdtLib/fdt.c>`__.  (EDK II uses BSD License)

-  `EmbeddedPkg/Include/fdt.h <EmbeddedPkg/Include/fdt.h>`__.  (EDK II uses BSD Licence)

-  `EmbeddedPkg/Include/libfdt.h <EmbeddedPkg/Include/libfdt.h>`__.  (EDK II uses BSD License)

-  `MdeModulePkg/Library/LzmaCustomDecompressLib <MdeModulePkg/Library/LzmaCustomDecompressLib/LZMA-SDK-README.txt>`__

-  `OvmfPkg <OvmfPkg/License.txt>`__



The EDK II open source project uses content from upstream projects as git submodules

that are covered by additional licenses.



-  `ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3 <https://github.com/ucb-bar/berkeley-softfloat-3/blob/b64af41c3276f97f0e181920400ee056b9c88037/COPYING.txt>`__

-  `BaseTools/Source/C/BrotliCompress/brotli <https://github.com/google/brotli/blob/666c3280cc11dc433c303d79a83d4ffbdd12cc8d/LICENSE>`__

-  `CryptoPkg/Library/OpensslLib/openssl <https://github.com/openssl/openssl/blob/e2e09d9fba1187f8d6aafaa34d4172f56f1ffb72/LICENSE>`__

-  `MdeModulePkg/Library/BrotliCustomDecompressLib/brotli <https://github.com/google/brotli/blob/666c3280cc11dc433c303d79a83d4ffbdd12cc8d/LICENSE>`__

-  `MdeModulePkg/Universal/RegularExpressionDxe/oniguruma <https://github.com/kkos/oniguruma/blob/abfc8ff81df4067f309032467785e06975678f0d/COPYING>`__

-  `UnitTestFrameworkPkg/Library/CmockaLib/cmocka <https://git.cryptomilk.org/projects/cmocka.git/tree/COPYING?h=cmocka-1.1.5&id=f5e2cd77c88d9f792562888d2b70c5a396bfbf7a>`__



The EDK II Project is composed of packages. The maintainers for each package

are listed in `Maintainers.txt <Maintainers.txt>`__.



Resources

---------



-  `TianoCore <http://www.tianocore.org>`__

-  `EDK

   II <https://github.com/tianocore/tianocore.github.io/wiki/EDK-II>`__

-  `Getting Started with EDK

   II <https://github.com/tianocore/tianocore.github.io/wiki/Getting-Started-with-EDK-II>`__

-  `Mailing

   Lists <https://github.com/tianocore/tianocore.github.io/wiki/Mailing-Lists>`__

-  `TianoCore Bugzilla <https://bugzilla.tianocore.org>`__

-  `How To

   Contribute <https://github.com/tianocore/tianocore.github.io/wiki/How-To-Contribute>`__

-  `Release

   Planning <https://github.com/tianocore/tianocore.github.io/wiki/EDK-II-Release-Planning>`__



Code Contributions

------------------



To make a contribution to a TianoCore project, follow these steps.



#. Create a change description in the format specified below to

    use in the source control commit log.

#. Your commit message must include your ``Signed-off-by`` signature

#. Submit your code to the TianoCore project using the process

    that the project documents on its web page. If the process is

    not documented, then submit the code on development email list

    for the project.

#. It is preferred that contributions are submitted using the same

    copyright license as the base project. When that is not possible,

    then contributions using the following licenses can be accepted:



-  BSD (2-clause): http://opensource.org/licenses/BSD-2-Clause

-  BSD (3-clause): http://opensource.org/licenses/BSD-3-Clause

-  MIT: http://opensource.org/licenses/MIT

-  Python-2.0: http://opensource.org/licenses/Python-2.0

-  Zlib: http://opensource.org/licenses/Zlib



For documentation:



-  FreeBSD Documentation License

    https://www.freebsd.org/copyright/freebsd-doc-license.html



Contributions of code put into the public domain can also be accepted.



Contributions using other licenses might be accepted, but further

review will be required.



Developer Certificate of Origin

-------------------------------



Your change description should use the standard format for a

commit message, and must include your ``Signed-off-by`` signature.



In order to keep track of who did what, all patches contributed must

include a statement that to the best of the contributor's knowledge

they have the right to contribute it under the specified license.



The test for this is as specified in the `Developer's Certificate of

Origin (DCO) 1.1 <https://developercertificate.org/>`__. The contributor

certifies compliance by adding a line saying



Signed-off-by: Developer Name developer@example.org



where ``Developer Name`` is the contributor's real name, and the email

address is one the developer is reachable through at the time of

contributing.



::



    Developer's Certificate of Origin 1.1



    By making a contribution to this project, I certify that:



    (a) The contribution was created in whole or in part by me and I

        have the right to submit it under the open source license

        indicated in the file; or



    (b) The contribution is based upon previous work that, to the best

        of my knowledge, is covered under an appropriate open source

        license and I have the right under that license to submit that

        work with modifications, whether created in whole or in part

        by me, under the same open source license (unless I am

        permitted to submit under a different license), as indicated

        in the file; or



    (c) The contribution was provided directly to me by some other

        person who certified (a), (b) or (c) and I have not modified

        it.



    (d) I understand and agree that this project and the contribution

        are public and that a record of the contribution (including all

        personal information I submit with it, including my sign-off) is

        maintained indefinitely and may be redistributed consistent with

        this project or the open source license(s) involved.



Sample Change Description / Commit Message

------------------------------------------



::



    From: Contributor Name <contributor@example.com>

    Subject: [Repository/Branch PATCH] Pkg-Module: Brief-single-line-summary



    Full-commit-message



    Signed-off-by: Contributor Name <contributor@example.com>



Notes for sample patch email

````````````````````````````



-  The first line of commit message is taken from the email's subject

   line following ``[Repository/Branch PATCH]``. The remaining portion

   of the commit message is the email's content.

-  ``git format-patch`` is one way to create this format



Definitions for sample patch email

``````````````````````````````````



-  ``Repository`` is the identifier of the repository the patch applies.

    This identifier should only be provided for repositories other than

    ``edk2``. For example ``edk2-BuildSpecification`` or ``staging``.

-  ``Branch`` is the identifier of the branch the patch applies. This

    identifier should only be provided for branches other than

   ``edk2/master``.

    For example ``edk2/UDK2015``,

   ``edk2-BuildSpecification/release/1.27``, or

    ``staging/edk2-test``.

-  ``Module`` is a short identifier for the affected code or

   documentation. For example ``MdePkg``, ``MdeModulePkg/UsbBusDxe``, ``Introduction``, or

    ``EDK II INF File Format``.

-  ``Brief-single-line-summary`` is a short summary of the change.

-  The entire first line should be less than ~70 characters.

-  ``Full-commit-message`` a verbose multiple line comment describing

    the change. Each line should be less than ~70 characters.

-  ``Signed-off-by`` is the contributor's signature identifying them

    by their real/legal name and their email address.



Submodules

----------



Submodule in EDK II is allowed but submodule chain should be avoided

as possible as we can. Currently EDK II contains the following submodules



-  CryptoPkg/Library/OpensslLib/openssl

-  ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3

-  MdeModulePkg/Universal/RegularExpressionDxe/oniguruma

-  MdeModulePkg/Library/BrotliCustomDecompressLib/brotli

-  BaseTools/Source/C/BrotliCompress/brotli



ArmSoftFloatLib is actually required by OpensslLib. It's inevitable

in openssl-1.1.1 (since stable201905) for floating point parameter

conversion, but should be dropped once there's no such need in future

release of openssl.



To get a full, buildable EDK II repository, use following steps of git

command



.. code-block:: bash



  git clone https://github.com/tianocore/edk2.git

  cd edk2

  git submodule update --init

  cd ..



If there's update for submodules, use following git commands to get

the latest submodules code.



.. code-block:: bash



  cd edk2

  git pull

  git submodule update



Note: When cloning submodule repos, '--recursive' option is not

recommended. EDK II itself will not use any code/feature from

submodules in above submodules. So using '--recursive' adds a

dependency on being able to reach servers we do not actually want

any code from, as well as needlessly downloading code we will not

use.



.. ===================================================================

.. This is a bunch of directives to make the README file more readable

.. ===================================================================



.. CoreCI



.. _Windows_VS2019: https://dev.azure.com/tianocore/edk2-ci/_build/latest?definitionId=32&branchName=master

.. |WindowsCiBuild| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/Windows%20VS2019%20CI?branchName=master

.. |WindowsCiTest| image:: https://img.shields.io/azure-devops/tests/tianocore/edk2-ci/32.svg

.. |WindowsCiCoverage| image:: https://img.shields.io/badge/coverage-coming_soon-blue



.. _Ubuntu_GCC5: https://dev.azure.com/tianocore/edk2-ci/_build/latest?definitionId=31&branchName=master

.. |UbuntuCiBuild| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/Ubuntu%20GCC5%20CI?branchName=master

.. |UbuntuCiTest| image:: https://img.shields.io/azure-devops/tests/tianocore/edk2-ci/31.svg

.. |UbuntuCiCoverage| image:: https://img.shields.io/badge/coverage-coming_soon-blue



.. ArmVirtPkg



.. _ArmVirtPkg_Ubuntu_GCC5: https://dev.azure.com/tianocore/edk2-ci/_build/latest?definitionId=46&branchName=master

.. |avAArch64du| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_ArmVirtPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20QEMU_AARCH64_DEBUG

.. |avAArch64ru| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_ArmVirtPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20QEMU_AARCH64_RELEASE

.. |avAArch64nu| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_ArmVirtPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20QEMU_AARCH64_NOOPT



.. |avArmdu| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_ArmVirtPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20QEMU_ARM_DEBUG

.. |avArmru| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_ArmVirtPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20QEMU_ARM_RELEASE

.. |avArmnu| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_ArmVirtPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20QEMU_ARM_NOOPT



.. EmulatorPkg



.. |TCBZ_2668| image:: https://img.shields.io/bugzilla/2668?baseUrl=https%3A%2F%2Fbugzilla.tianocore.org

.. _TCBZ_2668: https://bugzilla.tianocore.org/show_bug.cgi?id=2668



.. |TCBZ_2639| image:: https://img.shields.io/bugzilla/2639?baseUrl=https%3A%2F%2Fbugzilla.tianocore.org

.. _TCBZ_2639: https://bugzilla.tianocore.org/show_bug.cgi?id=2639



.. _EmulatorPkg_Win_VS2019:  https://dev.azure.com/tianocore/edk2-ci/_build/latest?definitionId=44&branchName=master

.. _EmulatorPkg_Ubuntu_GCC5: https://dev.azure.com/tianocore/edk2-ci/_build/latest?definitionId=43&branchName=master



.. |em32d| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_EmulatorPkg_Windows_VS2019_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20EmulatorPkg_IA32_DEBUG

.. |em32du| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_EmulatorPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20EmulatorPkg_IA32_DEBUG

.. |em32r| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_EmulatorPkg_Windows_VS2019_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20EmulatorPkg_IA32_RELEASE

.. |em32ru| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_EmulatorPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20EmulatorPkg_IA32_RELEASE

.. |em32n| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_EmulatorPkg_Windows_VS2019_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20EmulatorPkg_IA32_NOOPT

.. |em32nu| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_EmulatorPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20EmulatorPkg_IA32_NOOPT



.. |em64d| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_EmulatorPkg_Windows_VS2019_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20EmulatorPkg_X64_DEBUG

.. |em64du| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_EmulatorPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20EmulatorPkg_X64_DEBUG

.. |em64r| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_EmulatorPkg_Windows_VS2019_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20EmulatorPkg_X64_RELEASE

.. |em64ru| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_EmulatorPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20EmulatorPkg_X64_RELEASE

.. |em64n| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_EmulatorPkg_Windows_VS2019_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20EmulatorPkg_X64_NOOPT

.. |em64nu| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_EmulatorPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20EmulatorPkg_X64_NOOPT



.. OvmfPkg



.. |TCBZ_2661| image:: https://img.shields.io/bugzilla/2661?baseUrl=https%3A%2F%2Fbugzilla.tianocore.org

.. _TCBZ_2661: https://bugzilla.tianocore.org/show_bug.cgi?id=2661



.. _OvmfPkg_Win_VS2019:  https://dev.azure.com/tianocore/edk2-ci/_build/latest?definitionId=50&branchName=master

.. _OvmfPkg_Ubuntu_GCC5: https://dev.azure.com/tianocore/edk2-ci/_build/latest?definitionId=48&branchName=master



.. |op32d| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Windows_VS2019_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_IA32_DEBUG

.. |op32du| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_IA32_DEBUG

.. |op32r| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Windows_VS2019_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_IA32_RELEASE

.. |op32ru| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_IA32_RELEASE

.. |op32n| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Windows_VS2019_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_IA32_NOOPT

.. |op32nu| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_IA32_NOOPT



.. |op64d| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Windows_VS2019_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_X64_DEBUG

.. |op64du| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_X64_DEBUG

.. |op64r| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Windows_VS2019_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_X64_RELEASE

.. |op64ru| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_X64_RELEASE

.. |op64n| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Windows_VS2019_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_X64_NOOPT

.. |op64nu| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_X64_NOOPT





.. |op3264d| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Windows_VS2019_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_IA32X64_DEBUG

.. |op3264du| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_IA32X64_DEBUG

.. |op3264r| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Windows_VS2019_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_IA32X64_RELEASE

.. |op3264ru| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_IA32X64_RELEASE

.. |op3264n| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Windows_VS2019_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_IA32X64_NOOPT

.. |op3264nu| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_IA32X64_NOOPT



.. |op3264fd| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Windows_VS2019_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_IA32X64_FULL_DEBUG

.. |op3264fdu| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_IA32X64_FULL_DEBUG

.. |op3264fr| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Windows_VS2019_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_IA32X64_FULL_RELEASE

.. |op3264fru| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_IA32X64_FULL_RELEASE

.. |op3264fn| replace:: |TCBZ_2661|_

.. |op3264fnu| image:: https://dev.azure.com/tianocore/edk2-ci/_apis/build/status/PlatformCI_OvmfPkg_Ubuntu_GCC5_CI?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20OVMF_IA32X64_FULL_NOOPT