Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9ce3a72c authored by Joerg Roedel's avatar Joerg Roedel
Browse files

iommu/amd: Free already flushed ring-buffer entries before full-check



To benefit from IOTLB flushes on other CPUs we have to free
the already flushed IOVAs from the ring-buffer before we do
the queue_ring_full() check.

Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
parent ffa080eb
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -1910,15 +1910,21 @@ static void queue_add(struct dma_ops_domain *dom,
	queue = get_cpu_ptr(dom->flush_queue);
	spin_lock_irqsave(&queue->lock, flags);

	/*
	 * First remove the enries from the ring-buffer that are already
	 * flushed to make the below queue_ring_full() check less likely
	 */
	queue_ring_free_flushed(dom, queue);

	/*
	 * When ring-queue is full, flush the entries from the IOTLB so
	 * that we can free all entries with queue_ring_free_flushed()
	 * below.
	 */
	if (queue_ring_full(queue))
	if (queue_ring_full(queue)) {
		dma_ops_domain_flush_tlb(dom);

		queue_ring_free_flushed(dom, queue);
	}

	idx = queue_ring_add(queue);