summaryrefslogtreecommitdiffstats
path: root/MdePkg/Library/BaseLib/X86SpeculationBarrier.c
blob: b28fd8de9bcb8a0266d7c8246d50bffbdfd30cdf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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);
  }
}