Use PcdSpeculationBarrierType in the x86 implementation of SpeculationBarrier() to select between AsmLfence(), AsmCpuid(), and no operation. Cc: Liming Gao <liming.gao@intel.com> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Brian J. Johnson <brian.johnson@hpe.com>
31 lines
648 B
C
31 lines
648 B
C
/** @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);
|
|
}
|
|
}
|