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);
 | |
|   }
 | |
| }
 |