swiotlb: Add is_swiotlb_active() function
authorJoerg Roedel <jroedel@suse.de>
Thu, 7 Feb 2019 11:59:14 +0000 (12:59 +0100)
committerMichael S. Tsirkin <mst@redhat.com>
Wed, 6 Mar 2019 16:19:06 +0000 (11:19 -0500)
This function will be used from dma_direct code to determine
the maximum segment size of a dma mapping.

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>
include/linux/swiotlb.h
kernel/dma/swiotlb.c

index d3980aeed4a056d402b0a743e246f37fd16f8e92..29bc3a203283e108f9183522b723b1590339f3f9 100644 (file)
@@ -77,6 +77,7 @@ bool swiotlb_map(struct device *dev, phys_addr_t *phys, dma_addr_t *dma_addr,
 void __init swiotlb_exit(void);
 unsigned int swiotlb_max_segment(void);
 size_t swiotlb_max_mapping_size(struct device *dev);
+bool is_swiotlb_active(void);
 #else
 #define swiotlb_force SWIOTLB_NO_FORCE
 static inline bool is_swiotlb_buffer(phys_addr_t paddr)
@@ -100,6 +101,11 @@ static inline size_t swiotlb_max_mapping_size(struct device *dev)
 {
        return SIZE_MAX;
 }
+
+static inline bool is_swiotlb_active(void)
+{
+       return false;
+}
 #endif /* CONFIG_SWIOTLB */
 
 extern void swiotlb_print_info(void);
index 9cb21259cb0b3379b2ecfd53e73a5cf7ba4b1c2d..c873f9cc21460536f52edd26966a7b6cd668948d 100644 (file)
@@ -667,3 +667,12 @@ size_t swiotlb_max_mapping_size(struct device *dev)
 {
        return ((size_t)1 << IO_TLB_SHIFT) * IO_TLB_SEGSIZE;
 }
+
+bool is_swiotlb_active(void)
+{
+       /*
+        * When SWIOTLB is initialized, even if io_tlb_start points to physical
+        * address zero, io_tlb_end surely doesn't.
+        */
+       return io_tlb_end != 0;
+}