]> git.proxmox.com Git - mirror_ubuntu-disco-kernel.git/commitdiff
swiotlb: Introduce swiotlb_max_mapping_size()
authorJoerg Roedel <jroedel@suse.de>
Thu, 7 Feb 2019 11:59:13 +0000 (12:59 +0100)
committerSeth Forshee <seth.forshee@canonical.com>
Mon, 25 Mar 2019 15:45:25 +0000 (10:45 -0500)
BugLink: https://bugs.launchpad.net/bugs/1821607
commit abe420bfae528c92bd8cc5ecb62dc95672b1fd6f upstream.

The function returns the maximum size that can be remapped
by the SWIOTLB implementation. This function will be later
exposed to users through the DMA-API.

Cc: stable@vger.kernel.org
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
include/linux/swiotlb.h
kernel/dma/swiotlb.c

index 7c007ed7505f947eab77d85722ba79200c55afcc..d3980aeed4a056d402b0a743e246f37fd16f8e92 100644 (file)
@@ -76,6 +76,7 @@ bool swiotlb_map(struct device *dev, phys_addr_t *phys, dma_addr_t *dma_addr,
                size_t size, enum dma_data_direction dir, unsigned long attrs);
 void __init swiotlb_exit(void);
 unsigned int swiotlb_max_segment(void);
+size_t swiotlb_max_mapping_size(struct device *dev);
 #else
 #define swiotlb_force SWIOTLB_NO_FORCE
 static inline bool is_swiotlb_buffer(phys_addr_t paddr)
@@ -95,6 +96,10 @@ static inline unsigned int swiotlb_max_segment(void)
 {
        return 0;
 }
+static inline size_t swiotlb_max_mapping_size(struct device *dev)
+{
+       return SIZE_MAX;
+}
 #endif /* CONFIG_SWIOTLB */
 
 extern void swiotlb_print_info(void);
index 1fb6fd68b9c7e80c969072642a4064f4e9608008..9cb21259cb0b3379b2ecfd53e73a5cf7ba4b1c2d 100644 (file)
@@ -662,3 +662,8 @@ swiotlb_dma_supported(struct device *hwdev, u64 mask)
 {
        return __phys_to_dma(hwdev, io_tlb_end - 1) <= mask;
 }
+
+size_t swiotlb_max_mapping_size(struct device *dev)
+{
+       return ((size_t)1 << IO_TLB_SHIFT) * IO_TLB_SEGSIZE;
+}