Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1455201

[PATCH v12 3/8] vfio/type1: implement recursive vfio_find_dma_from_node

From Eric Auger <eric.auger@redhat.com>
Newsgroups linux.kernel
Subject [PATCH v12 3/8] vfio/type1: implement recursive vfio_find_dma_from_node
Date 2016-08-02 19:50 +0200
Message-ID <s1LZh-7Ht-53@gated-at.bofh.it> (permalink)
References <s1LPz-7DB-11@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


This patch handles the case where a node is encountered, matching
@start and @size arguments but not matching the @type argument.
In that case, we need to skip that node and pursue the search in the
node's leaves. In case @start is inferior to the node's base, we
resume the search on the left leaf. If the recursive search on the left
leaves did not produce any match, we search the right leaves recursively.

Signed-off-by: Eric Auger <eric.auger@redhat.com>

---

v10: creation
---
 drivers/vfio/vfio_iommu_type1.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
index cb7267a..65a4038 100644
--- a/drivers/vfio/vfio_iommu_type1.c
+++ b/drivers/vfio/vfio_iommu_type1.c
@@ -125,7 +125,17 @@ static struct vfio_dma *vfio_find_dma_from_node(struct rb_node *top,
 	if (type == VFIO_IOVA_ANY || dma->type == type)
 		return dma;
 
-	return NULL;
+	/* restart 2 searches skipping the current node */
+	if (start < dma->iova) {
+		dma = vfio_find_dma_from_node(node->rb_left, start,
+					      size, type);
+		if (dma)
+			return dma;
+	}
+	if (start + size > dma->iova + dma->size)
+		dma = vfio_find_dma_from_node(node->rb_right, start,
+					      size, type);
+	return dma;
 }
 
 /**
-- 
1.9.1

Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v12 0/8] KVM PCIe/MSI passthrough on ARM/ARM64: kernel part 3/3: vfio changes Eric Auger <eric.auger@redhat.com> - 2016-08-02 19:50 +0200
  [PATCH v12 3/8] vfio/type1: implement recursive vfio_find_dma_from_node Eric Auger <eric.auger@redhat.com> - 2016-08-02 19:50 +0200
  [PATCH v12 5/8] vfio: allow reserved msi iova registration Eric Auger <eric.auger@redhat.com> - 2016-08-02 19:50 +0200
  Re: [PATCH v12 0/8] KVM PCIe/MSI passthrough on ARM/ARM64: kernel  part 3/3: vfio changes Diana Madalina Craciun <diana.craciun@nxp.com> - 2016-08-05 19:30 +0200
    Re: [PATCH v12 0/8] KVM PCIe/MSI passthrough on ARM/ARM64: kernel  part 3/3: vfio changes Auger Eric <eric.auger@redhat.com> - 2016-08-07 16:10 +0200

csiph-web