diff options
Diffstat (limited to 'kernel/dma/swiotlb.c')
| -rw-r--r-- | kernel/dma/swiotlb.c | 14 | 
1 files changed, 6 insertions, 8 deletions
diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c index dfa1de89dc94..cb50f8d38360 100644 --- a/kernel/dma/swiotlb.c +++ b/kernel/dma/swiotlb.c @@ -192,7 +192,7 @@ void __init swiotlb_update_mem_attributes(void)  }  static void swiotlb_init_io_tlb_mem(struct io_tlb_mem *mem, phys_addr_t start, -				    unsigned long nslabs, bool late_alloc) +		unsigned long nslabs, unsigned int flags, bool late_alloc)  {  	void *vaddr = phys_to_virt(start);  	unsigned long bytes = nslabs << IO_TLB_SHIFT, i; @@ -203,8 +203,7 @@ static void swiotlb_init_io_tlb_mem(struct io_tlb_mem *mem, phys_addr_t start,  	mem->index = 0;  	mem->late_alloc = late_alloc; -	if (swiotlb_force_bounce) -		mem->force_bounce = true; +	mem->force_bounce = swiotlb_force_bounce || (flags & SWIOTLB_FORCE);  	spin_lock_init(&mem->lock);  	for (i = 0; i < mem->nslabs; i++) { @@ -275,8 +274,7 @@ retry:  		panic("%s: Failed to allocate %zu bytes align=0x%lx\n",  		      __func__, alloc_size, PAGE_SIZE); -	swiotlb_init_io_tlb_mem(mem, __pa(tlb), nslabs, false); -	mem->force_bounce = flags & SWIOTLB_FORCE; +	swiotlb_init_io_tlb_mem(mem, __pa(tlb), nslabs, flags, false);  	if (flags & SWIOTLB_VERBOSE)  		swiotlb_print_info(); @@ -348,7 +346,7 @@ retry:  	set_memory_decrypted((unsigned long)vstart,  			     (nslabs << IO_TLB_SHIFT) >> PAGE_SHIFT); -	swiotlb_init_io_tlb_mem(mem, virt_to_phys(vstart), nslabs, true); +	swiotlb_init_io_tlb_mem(mem, virt_to_phys(vstart), nslabs, 0, true);  	swiotlb_print_info();  	return 0; @@ -835,8 +833,8 @@ static int rmem_swiotlb_device_init(struct reserved_mem *rmem,  		set_memory_decrypted((unsigned long)phys_to_virt(rmem->base),  				     rmem->size >> PAGE_SHIFT); -		swiotlb_init_io_tlb_mem(mem, rmem->base, nslabs, false); -		mem->force_bounce = true; +		swiotlb_init_io_tlb_mem(mem, rmem->base, nslabs, SWIOTLB_FORCE, +				false);  		mem->for_alloc = true;  		rmem->priv = mem;  |