All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5 v3] Fix virtio-blk issue with SWIOTLB
@ 2019-01-23 16:30 Joerg Roedel
  2019-01-23 16:30 ` [PATCH 1/5] swiotlb: Introduce swiotlb_max_mapping_size() Joerg Roedel
                   ` (13 more replies)
  0 siblings, 14 replies; 67+ messages in thread
From: Joerg Roedel @ 2019-01-23 16:30 UTC (permalink / raw)
  To: Michael S . Tsirkin, Jason Wang, Konrad Rzeszutek Wilk,
	Christoph Hellwig
  Cc: Jens Axboe, virtualization, linux-block, linux-kernel, iommu,
	jfehlig, jon.grimm, brijesh.singh, joro, jroedel

Hi,

here is the third version of this patch-set. Previous
versions can be found here:

	V1: https://lore.kernel.org/lkml/20190110134433.15672-1-joro@8bytes.org/

	V2: https://lore.kernel.org/lkml/20190115132257.6426-1-joro@8bytes.org/

The problem solved here is a limitation of the SWIOTLB implementation,
which does not support allocations larger than 256kb.  When the
virtio-blk driver tries to read/write a block larger than that, the
allocation of the dma-handle fails and an IO error is reported.

Changes to v2 are:

	* Check if SWIOTLB is active before returning its limit in
	  dma_direct_max_mapping_size()

	* Only apply the maximum segment limit in virtio-blk when
	  DMA-API is used for the vring

Please review.

Thanks,

	Joerg

Joerg Roedel (5):
  swiotlb: Introduce swiotlb_max_mapping_size()
  swiotlb: Add is_swiotlb_active() function
  dma: Introduce dma_max_mapping_size()
  virtio: Introduce virtio_max_dma_size()
  virtio-blk: Consider virtio_max_dma_size() for maximum segment size

 drivers/block/virtio_blk.c   | 10 ++++++----
 drivers/virtio/virtio_ring.c | 10 ++++++++++
 include/linux/dma-mapping.h  | 16 ++++++++++++++++
 include/linux/swiotlb.h      | 11 +++++++++++
 include/linux/virtio.h       |  2 ++
 kernel/dma/direct.c          | 11 +++++++++++
 kernel/dma/swiotlb.c         | 10 ++++++++++
 7 files changed, 66 insertions(+), 4 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 67+ messages in thread
* [PATCH 0/5 v4] Fix virtio-blk issue with SWIOTLB
@ 2019-01-29  8:43 Joerg Roedel
  2019-01-29  8:43 ` [PATCH 5/5] virtio-blk: Consider virtio_max_dma_size() for maximum segment size Joerg Roedel
  2019-01-29  8:43 ` Joerg Roedel
  0 siblings, 2 replies; 67+ messages in thread
From: Joerg Roedel @ 2019-01-29  8:43 UTC (permalink / raw)
  To: Michael S . Tsirkin, Jason Wang, Konrad Rzeszutek Wilk,
	Christoph Hellwig
  Cc: Jens Axboe, virtualization, linux-block, linux-kernel, iommu,
	jfehlig, jon.grimm, brijesh.singh, joro, jroedel


Hi,

here is the fourth version of this patch-set. Previous
versions can be found here:

	V1: https://lore.kernel.org/lkml/20190110134433.15672-1-joro@8bytes.org/

	V2: https://lore.kernel.org/lkml/20190115132257.6426-1-joro@8bytes.org/

	V3: https://lore.kernel.org/lkml/20190123163049.24863-1-joro@8bytes.org/

The problem solved here is a limitation of the SWIOTLB implementation,
which does not support allocations larger than 256kb.  When the
virtio-blk driver tries to read/write a block larger than that, the
allocation of the dma-handle fails and an IO error is reported.

For all changes to v3, a diff to v3 of the patch-set is at
the end of this email.

Please review.

Thanks,

	Joerg

Joerg Roedel (5):
  swiotlb: Introduce swiotlb_max_mapping_size()
  swiotlb: Add is_swiotlb_active() function
  dma: Introduce dma_max_mapping_size()
  virtio: Introduce virtio_max_dma_size()
  virtio-blk: Consider virtio_max_dma_size() for maximum segment size

 Documentation/DMA-API.txt    |  8 ++++++++
 drivers/block/virtio_blk.c   | 10 ++++++----
 drivers/virtio/virtio_ring.c | 10 ++++++++++
 include/linux/dma-mapping.h  | 16 ++++++++++++++++
 include/linux/swiotlb.h      | 11 +++++++++++
 include/linux/virtio.h       |  2 ++
 kernel/dma/direct.c          | 11 +++++++++++
 kernel/dma/swiotlb.c         | 14 ++++++++++++++
 8 files changed, 78 insertions(+), 4 deletions(-)

-- 
2.17.1

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/swiotlb.h b/include/linux/swiotlb.h
index 5c087d330b4b..e9e786b4b598 100644
--- a/include/linux/swiotlb.h
+++ b/include/linux/swiotlb.h
@@ -62,7 +62,7 @@ extern void swiotlb_tbl_sync_single(struct device *hwdev,
 
 extern int
 swiotlb_dma_supported(struct device *hwdev, u64 mask);
-extern size_t swiotlb_max_mapping_size(struct device *dev);
+size_t swiotlb_max_mapping_size(struct device *dev);
 bool is_swiotlb_active(void);
 
 #ifdef CONFIG_SWIOTLB
diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
index 9fbd075081d9..c873f9cc2146 100644
--- a/kernel/dma/swiotlb.c
+++ b/kernel/dma/swiotlb.c
@@ -670,5 +670,9 @@ size_t swiotlb_max_mapping_size(struct device *dev)
 
 bool is_swiotlb_active(void)
 {
-	return !no_iotlb_memory;
+	/*
+	 * 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;
 }

^ permalink raw reply related	[flat|nested] 67+ messages in thread
* [PATCH 0/5 v5] Fix virtio-blk issue with SWIOTLB
@ 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
  0 siblings, 2 replies; 67+ messages in thread
From: Joerg Roedel @ 2019-01-30 16:40 UTC (permalink / raw)
  To: Michael S . Tsirkin, Jason Wang, Konrad Rzeszutek Wilk,
	Christoph Hellwig
  Cc: Jens Axboe, virtualization, linux-block, linux-kernel, iommu,
	jfehlig, jon.grimm, brijesh.singh, joro, jroedel,
	Thomas.Lendacky

Hi,

here is the next version of this patch-set. Previous
versions can be found here:

	V1: https://lore.kernel.org/lkml/20190110134433.15672-1-joro@8bytes.org/

	V2: https://lore.kernel.org/lkml/20190115132257.6426-1-joro@8bytes.org/

	V3: https://lore.kernel.org/lkml/20190123163049.24863-1-joro@8bytes.org/

	V4: https://lore.kernel.org/lkml/20190129084342.26030-1-joro@8bytes.org/

The problem solved here is a limitation of the SWIOTLB implementation,
which does not support allocations larger than 256kb.  When the
virtio-blk driver tries to read/write a block larger than that, the
allocation of the dma-handle fails and an IO error is reported.

Changes to v4 are:

	- Added Reviewed-by tags from Christoph

	- Added missing EXPORT_SYMBOL(_GPL) lines

Please review.

Thanks,

	Joerg
Joerg Roedel (5):
  swiotlb: Introduce swiotlb_max_mapping_size()
  swiotlb: Add is_swiotlb_active() function
  dma: Introduce dma_max_mapping_size()
  virtio: Introduce virtio_max_dma_size()
  virtio-blk: Consider virtio_max_dma_size() for maximum segment size

 Documentation/DMA-API.txt    |  8 ++++++++
 drivers/block/virtio_blk.c   | 10 ++++++----
 drivers/virtio/virtio_ring.c | 11 +++++++++++
 include/linux/dma-mapping.h  | 16 ++++++++++++++++
 include/linux/swiotlb.h      | 11 +++++++++++
 include/linux/virtio.h       |  2 ++
 kernel/dma/direct.c          | 12 ++++++++++++
 kernel/dma/swiotlb.c         | 14 ++++++++++++++
 8 files changed, 80 insertions(+), 4 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 67+ messages in thread
* [PATCH 0/5 v6] Fix virtio-blk issue with SWIOTLB
@ 2019-01-31 16:33 Joerg Roedel
  2019-01-31 16:34 ` [PATCH 5/5] virtio-blk: Consider virtio_max_dma_size() for maximum segment size Joerg Roedel
  2019-01-31 16:34 ` Joerg Roedel
  0 siblings, 2 replies; 67+ messages in thread
From: Joerg Roedel @ 2019-01-31 16:33 UTC (permalink / raw)
  To: Michael S . Tsirkin, Jason Wang, Konrad Rzeszutek Wilk,
	Christoph Hellwig
  Cc: Jens Axboe, virtualization, linux-block, linux-kernel, iommu,
	jfehlig, jon.grimm, brijesh.singh, joro, jroedel,
	Thomas.Lendacky

Hi,

here is the next version of this patch-set. Previous
versions can be found here:

	V1: https://lore.kernel.org/lkml/20190110134433.15672-1-joro@8bytes.org/

	V2: https://lore.kernel.org/lkml/20190115132257.6426-1-joro@8bytes.org/

	V3: https://lore.kernel.org/lkml/20190123163049.24863-1-joro@8bytes.org/

	V4: https://lore.kernel.org/lkml/20190129084342.26030-1-joro@8bytes.org/

	V5: https://lore.kernel.org/lkml/20190130164007.26497-1-joro@8bytes.org/

The problem solved here is a limitation of the SWIOTLB implementation,
which does not support allocations larger than 256kb.  When the
virtio-blk driver tries to read/write a block larger than that, the
allocation of the dma-handle fails and an IO error is reported.

Changes to v5 are:

	- Changed patch 3 to uninline dma_max_mapping_size()

Please review.

Thanks,

	Joerg

Joerg Roedel (5):
  swiotlb: Introduce swiotlb_max_mapping_size()
  swiotlb: Add is_swiotlb_active() function
  dma: Introduce dma_max_mapping_size()
  virtio: Introduce virtio_max_dma_size()
  virtio-blk: Consider virtio_max_dma_size() for maximum segment size

 Documentation/DMA-API.txt    |  8 ++++++++
 drivers/block/virtio_blk.c   | 10 ++++++----
 drivers/virtio/virtio_ring.c | 11 +++++++++++
 include/linux/dma-mapping.h  |  8 ++++++++
 include/linux/swiotlb.h      | 11 +++++++++++
 include/linux/virtio.h       |  2 ++
 kernel/dma/direct.c          | 11 +++++++++++
 kernel/dma/mapping.c         | 14 ++++++++++++++
 kernel/dma/swiotlb.c         | 14 ++++++++++++++
 9 files changed, 85 insertions(+), 4 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 67+ messages in thread

end of thread, other threads:[~2019-01-31 16:34 UTC | newest]

Thread overview: 67+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-23 16:30 [PATCH 0/5 v3] Fix virtio-blk issue with SWIOTLB Joerg Roedel
2019-01-23 16:30 ` [PATCH 1/5] swiotlb: Introduce swiotlb_max_mapping_size() Joerg Roedel
2019-01-23 16:30 ` Joerg Roedel
2019-01-23 21:28   ` Christoph Hellwig
2019-01-23 21:28     ` Christoph Hellwig
2019-01-24  8:24     ` Joerg Roedel
2019-01-24  8:47       ` Christoph Hellwig
2019-01-24  8:47       ` Christoph Hellwig
2019-01-24  8:24     ` Joerg Roedel
2019-01-23 21:28   ` Christoph Hellwig
2019-01-23 16:30 ` [PATCH 2/5] swiotlb: Add is_swiotlb_active() function Joerg Roedel
2019-01-23 16:30 ` Joerg Roedel
2019-01-23 21:27   ` Christoph Hellwig
2019-01-23 21:27   ` Christoph Hellwig
2019-01-24  8:29     ` Joerg Roedel
2019-01-24  8:29     ` Joerg Roedel
2019-01-24  8:41       ` Christoph Hellwig
2019-01-24  8:41       ` Christoph Hellwig
2019-01-24  8:41         ` Christoph Hellwig
2019-01-24 15:00         ` Joerg Roedel
2019-01-28 17:19           ` Michael S. Tsirkin
2019-01-28 17:19           ` Michael S. Tsirkin
2019-01-24 15:00         ` Joerg Roedel
2019-01-23 16:30 ` [PATCH 3/5] dma: Introduce dma_max_mapping_size() Joerg Roedel
2019-01-23 16:30 ` Joerg Roedel
2019-01-23 21:29   ` Christoph Hellwig
2019-01-23 21:29   ` Christoph Hellwig
2019-01-23 16:30 ` [PATCH 4/5] virtio: Introduce virtio_max_dma_size() Joerg Roedel
2019-01-23 16:30 ` Joerg Roedel
2019-01-23 16:30 ` [PATCH 5/5] virtio-blk: Consider virtio_max_dma_size() for maximum segment size Joerg Roedel
2019-01-23 16:30 ` Joerg Roedel
2019-01-23 21:31   ` Christoph Hellwig
2019-01-23 22:25     ` Michael S. Tsirkin
2019-01-23 22:25     ` Michael S. Tsirkin
2019-01-24  8:40     ` Joerg Roedel
2019-01-24  8:42       ` Christoph Hellwig
2019-01-24  8:42       ` Christoph Hellwig
2019-01-24  9:51         ` Joerg Roedel
2019-01-24  9:51           ` Joerg Roedel
2019-01-28  8:05           ` Christoph Hellwig
2019-01-28 17:14             ` Michael S. Tsirkin
2019-01-28 17:14             ` Michael S. Tsirkin
2019-01-29  7:38               ` Christoph Hellwig
2019-01-29  7:38               ` Christoph Hellwig
2019-01-28  8:05           ` Christoph Hellwig
2019-01-24  9:51         ` Joerg Roedel
2019-01-24  8:40     ` Joerg Roedel
2019-01-23 21:31   ` Christoph Hellwig
2019-01-23 17:09 ` [PATCH 0/5 v3] Fix virtio-blk issue with SWIOTLB Konrad Rzeszutek Wilk
2019-01-23 17:09 ` Konrad Rzeszutek Wilk
2019-01-23 18:51 ` Michael S. Tsirkin
2019-01-23 18:51 ` Michael S. Tsirkin
2019-01-23 21:14   ` Konrad Rzeszutek Wilk
2019-01-28 15:20     ` Michael S. Tsirkin
2019-01-28 15:53       ` Konrad Rzeszutek Wilk
2019-01-28 15:53         ` Konrad Rzeszutek Wilk
2019-01-28 15:53       ` Konrad Rzeszutek Wilk
2019-01-28 15:20     ` Michael S. Tsirkin
2019-01-23 21:14   ` Konrad Rzeszutek Wilk
2019-01-29  8:43 [PATCH 0/5 v4] " Joerg Roedel
2019-01-29  8:43 ` [PATCH 5/5] virtio-blk: Consider virtio_max_dma_size() for maximum segment size Joerg Roedel
2019-01-29 17:13   ` Christoph Hellwig
2019-01-29 17:13   ` Christoph Hellwig
2019-01-29  8:43 ` Joerg Roedel
2019-01-30 16:40 [PATCH 0/5 v5] Fix virtio-blk issue with SWIOTLB 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-31 16:33 [PATCH 0/5 v6] Fix virtio-blk issue with SWIOTLB Joerg Roedel
2019-01-31 16:34 ` [PATCH 5/5] virtio-blk: Consider virtio_max_dma_size() for maximum segment size Joerg Roedel
2019-01-31 16:34 ` Joerg Roedel

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.