diff options
Diffstat (limited to 'MdePkg/Library/BaseLib/X86SpeculationBarrier.c')
-rw-r--r-- | MdePkg/Library/BaseLib/X86SpeculationBarrier.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/MdePkg/Library/BaseLib/X86SpeculationBarrier.c b/MdePkg/Library/BaseLib/X86SpeculationBarrier.c new file mode 100644 index 000000000000..8eb6fe4886c6 --- /dev/null +++ b/MdePkg/Library/BaseLib/X86SpeculationBarrier.c @@ -0,0 +1,30 @@ +/** @file + SpeculationBarrier() function for IA32 and x64. + + Copyright (C) 2018 - 2019, Intel Corporation. All rights reserved.<BR> + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include <Library/BaseLib.h> + +/** + Uses as a barrier to stop speculative execution. + + Ensures that no later instruction will execute speculatively, until all prior + instructions have completed. + +**/ +VOID +EFIAPI +SpeculationBarrier ( + VOID + ) +{ + if (PcdGet8 (PcdSpeculationBarrierType) == 0x01) { + AsmLfence (); + } else if (PcdGet8 (PcdSpeculationBarrierType) == 0x02) { + AsmCpuid (0x01, NULL, NULL, NULL, NULL); + } +} |