All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joerg Roedel <joro@8bytes.org>
To: "Michael S . Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Christoph Hellwig <hch@lst.de>
Cc: Jens Axboe <axboe@kernel.dk>,
	Thomas.Lendacky@amd.com, jroedel@suse.de, brijesh.singh@amd.com,
	joro@8bytes.org, jon.grimm@amd.com, jfehlig@suse.com,
	linux-kernel@vger.kernel.org, linux-block@vger.kernel.org,
	iommu@lists.linux-foundation.org,
	virtualization@lists.linux-foundation.org
Subject: [PATCH 3/5] dma: Introduce dma_max_mapping_size()
Date: Wed, 30 Jan 2019 17:40:05 +0100	[thread overview]
Message-ID: <20190130164007.26497-4-joro__2669.44293850742$1548872719$gmane$org@8bytes.org> (raw)
In-Reply-To: <20190130164007.26497-1-joro@8bytes.org>

From: Joerg Roedel <jroedel@suse.de>

The function returns the maximum size that can be mapped
using DMA-API functions. The patch also adds the
implementation for direct DMA and a new dma_map_ops pointer
so that other implementations can expose their limit.

Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
---
 Documentation/DMA-API.txt   |  8 ++++++++
 include/linux/dma-mapping.h | 16 ++++++++++++++++
 kernel/dma/direct.c         | 12 ++++++++++++
 3 files changed, 36 insertions(+)

diff --git a/Documentation/DMA-API.txt b/Documentation/DMA-API.txt
index e133ccd60228..acfe3d0f78d1 100644
--- a/Documentation/DMA-API.txt
+++ b/Documentation/DMA-API.txt
@@ -195,6 +195,14 @@ Requesting the required mask does not alter the current mask.  If you
 wish to take advantage of it, you should issue a dma_set_mask()
 call to set the mask to the value returned.
 
+::
+
+	size_t
+	dma_direct_max_mapping_size(struct device *dev);
+
+Returns the maximum size of a mapping for the device. The size parameter
+of the mapping functions like dma_map_single(), dma_map_page() and
+others should not be larger than the returned value.
 
 Part Id - Streaming DMA mappings
 --------------------------------
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index f6ded992c183..a3ca8a71a704 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -130,6 +130,7 @@ struct dma_map_ops {
 			enum dma_data_direction direction);
 	int (*dma_supported)(struct device *dev, u64 mask);
 	u64 (*get_required_mask)(struct device *dev);
+	size_t (*max_mapping_size)(struct device *dev);
 };
 
 #define DMA_MAPPING_ERROR		(~(dma_addr_t)0)
@@ -257,6 +258,8 @@ static inline void dma_direct_sync_sg_for_cpu(struct device *dev,
 }
 #endif
 
+size_t dma_direct_max_mapping_size(struct device *dev);
+
 #ifdef CONFIG_HAS_DMA
 #include <asm/dma-mapping.h>
 
@@ -440,6 +443,19 @@ static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
 	return 0;
 }
 
+static inline size_t dma_max_mapping_size(struct device *dev)
+{
+	const struct dma_map_ops *ops = get_dma_ops(dev);
+	size_t size = SIZE_MAX;
+
+	if (dma_is_direct(ops))
+		size = dma_direct_max_mapping_size(dev);
+	else if (ops && ops->max_mapping_size)
+		size = ops->max_mapping_size(dev);
+
+	return size;
+}
+
 void *dma_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_handle,
 		gfp_t flag, unsigned long attrs);
 void dma_free_attrs(struct device *dev, size_t size, void *cpu_addr,
diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c
index 355d16acee6d..81ca8170b928 100644
--- a/kernel/dma/direct.c
+++ b/kernel/dma/direct.c
@@ -380,3 +380,15 @@ int dma_direct_supported(struct device *dev, u64 mask)
 	 */
 	return mask >= __phys_to_dma(dev, min_mask);
 }
+
+size_t dma_direct_max_mapping_size(struct device *dev)
+{
+	size_t size = SIZE_MAX;
+
+	/* If SWIOTLB is active, use its maximum mapping size */
+	if (is_swiotlb_active())
+		size = swiotlb_max_mapping_size(dev);
+
+	return size;
+}
+EXPORT_SYMBOL(dma_direct_max_mapping_size);
-- 
2.17.1

  parent reply	other threads:[~2019-01-30 16:40 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-30 16:40 [PATCH 0/5 v5] Fix virtio-blk issue with SWIOTLB Joerg Roedel
2019-01-30 16:40 ` [PATCH 1/5] swiotlb: Introduce swiotlb_max_mapping_size() Joerg Roedel
2019-01-30 16:40 ` Joerg Roedel
2019-01-30 16:40 ` [PATCH 2/5] swiotlb: Add is_swiotlb_active() function Joerg Roedel
2019-01-30 16:40 ` Joerg Roedel
2019-01-30 16:40 ` [PATCH 3/5] dma: Introduce dma_max_mapping_size() Joerg Roedel
2019-01-31 10:41   ` Christoph Hellwig
2019-01-31 10:41   ` Christoph Hellwig
2019-01-31 13:01     ` [PATCH] dma: Uninline dma_max_mapping_size() Joerg Roedel
2019-01-31 13:01       ` Joerg Roedel
2019-01-31 14:37       ` Christoph Hellwig
2019-01-31 14:43         ` Michael S. Tsirkin
2019-01-31 14:43         ` Michael S. Tsirkin
2019-01-31 16:34           ` Joerg Roedel
2019-01-31 16:34           ` Joerg Roedel
2019-01-31 14:37       ` Christoph Hellwig
2019-01-31 13:01     ` Joerg Roedel
2019-01-30 16:40 ` Joerg Roedel [this message]
2019-01-30 16:40 ` [PATCH 4/5] virtio: Introduce virtio_max_dma_size() Joerg Roedel
2019-01-30 16:40 ` Joerg Roedel
2019-01-30 16:40 ` [PATCH 5/5] virtio-blk: Consider virtio_max_dma_size() for maximum segment size Joerg Roedel
2019-01-30 16:40 ` Joerg Roedel
2019-01-30 18:11 ` [PATCH 0/5 v5] Fix virtio-blk issue with SWIOTLB Lendacky, Thomas
2019-01-30 18:11   ` Lendacky, Thomas
2019-01-30 18:11 ` Lendacky, Thomas
2019-01-30 18:35 ` Konrad Rzeszutek Wilk
2019-01-30 18:35 ` Konrad Rzeszutek Wilk
2019-01-30 21:59   ` Michael S. Tsirkin
2019-01-30 21:59   ` Michael S. Tsirkin
2019-01-30 21:59     ` Michael S. Tsirkin
  -- strict thread matches above, loose matches on Subject: below --
2019-01-31 16:33 [PATCH 0/5 v6] " Joerg Roedel
2019-01-31 16:34 ` [PATCH 3/5] dma: Introduce dma_max_mapping_size() Joerg Roedel
2019-01-31 16:34 ` Joerg Roedel
2019-01-29  8:43 [PATCH 0/5 v4] Fix virtio-blk issue with SWIOTLB Joerg Roedel
2019-01-29  8:43 ` [PATCH 3/5] dma: Introduce dma_max_mapping_size() Joerg Roedel
2019-01-29  8:43 ` Joerg Roedel
2019-01-29 17:13   ` Christoph Hellwig
2019-01-29 17:13   ` Christoph Hellwig
2019-01-30 15:09   ` Lendacky, Thomas
2019-01-30 15:09   ` Lendacky, Thomas
2019-01-30 15:09     ` Lendacky, Thomas
2019-01-23 16:30 [PATCH 0/5 v3] Fix virtio-blk issue with SWIOTLB Joerg Roedel
2019-01-23 16:30 ` [PATCH 3/5] dma: Introduce dma_max_mapping_size() Joerg Roedel
2019-01-23 21:29   ` Christoph Hellwig
2019-01-23 21:29   ` Christoph Hellwig
2019-01-23 16:30 ` Joerg Roedel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='20190130164007.26497-4-joro__2669.44293850742$1548872719$gmane$org@8bytes.org' \
    --to=joro@8bytes.org \
    --cc=Thomas.Lendacky@amd.com \
    --cc=axboe@kernel.dk \
    --cc=brijesh.singh@amd.com \
    --cc=hch@lst.de \
    --cc=iommu@lists.linux-foundation.org \
    --cc=jasowang@redhat.com \
    --cc=jfehlig@suse.com \
    --cc=jon.grimm@amd.com \
    --cc=jroedel@suse.de \
    --cc=konrad.wilk@oracle.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=virtualization@lists.linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.