POWER secure guests (i.e., guests which use the Protected Execution
Facility) need to use SWIOTLB to be able to do I/O with the
hypervisor, but they don't need the SWIOTLB memory to be in low
addresses since the hypervisor doesn't have any addressing limitation.
This solves a SWIOTLB initialization problem we are seeing in secure
guests with 128 GB of RAM: they are configured with 4 GB of
crashkernel reserved memory, which leaves no space for SWIOTLB in low
addresses.
To do this, we use mostly the same code as swiotlb_init(), but
allocate the buffer using memblock_alloc() instead of
memblock_alloc_low().
Fixes: 2efbc58f15 ("powerpc/pseries/svm: Force SWIOTLB for secure guests")
Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200818221126.391073-1-bauerman@linux.ibm.com
		
	
			
		
			
				
	
	
		
			36 lines
		
	
	
		
			652 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			652 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0+ */
 | |
| /*
 | |
|  * SVM helper functions
 | |
|  *
 | |
|  * Copyright 2018 Anshuman Khandual, IBM Corporation.
 | |
|  */
 | |
| 
 | |
| #ifndef _ASM_POWERPC_SVM_H
 | |
| #define _ASM_POWERPC_SVM_H
 | |
| 
 | |
| #ifdef CONFIG_PPC_SVM
 | |
| 
 | |
| static inline bool is_secure_guest(void)
 | |
| {
 | |
| 	return mfmsr() & MSR_S;
 | |
| }
 | |
| 
 | |
| void __init svm_swiotlb_init(void);
 | |
| 
 | |
| void dtl_cache_ctor(void *addr);
 | |
| #define get_dtl_cache_ctor()	(is_secure_guest() ? dtl_cache_ctor : NULL)
 | |
| 
 | |
| #else /* CONFIG_PPC_SVM */
 | |
| 
 | |
| static inline bool is_secure_guest(void)
 | |
| {
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| static inline void svm_swiotlb_init(void) {}
 | |
| 
 | |
| #define get_dtl_cache_ctor() NULL
 | |
| 
 | |
| #endif /* CONFIG_PPC_SVM */
 | |
| #endif /* _ASM_POWERPC_SVM_H */
 |