Add a per-each macro IOMMU_DOMAIN_UNLOAD_SLEEP which allows to sleep

during iommu guest address space entries unload.

Suggested by:	kib
Sponsored by:	Innovate DSbD
Differential Revision:	https://reviews.freebsd.org/D26722
This commit is contained in:
Ruslan Bukin 2020-10-14 14:51:11 +00:00
parent cffe0e0f9d
commit 6e9127d838
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=366704
2 changed files with 5 additions and 3 deletions

View File

@ -888,7 +888,7 @@ iommu_bus_dmamap_unload(bus_dma_tag_t dmat, bus_dmamap_t map1)
struct bus_dmamap_iommu *map;
struct iommu_ctx *ctx;
struct iommu_domain *domain;
#if defined(__amd64__)
#ifndef IOMMU_DOMAIN_UNLOAD_SLEEP
struct iommu_map_entries_tailq entries;
#endif
@ -898,13 +898,13 @@ iommu_bus_dmamap_unload(bus_dma_tag_t dmat, bus_dmamap_t map1)
domain = ctx->domain;
atomic_add_long(&ctx->unloads, 1);
#if defined(__i386__)
#if defined(IOMMU_DOMAIN_UNLOAD_SLEEP)
IOMMU_DOMAIN_LOCK(domain);
TAILQ_CONCAT(&domain->unload_entries, &map->map_entries, dmamap_link);
IOMMU_DOMAIN_UNLOCK(domain);
taskqueue_enqueue(domain->iommu->delayed_taskqueue,
&domain->unload_task);
#else /* defined(__amd64__) */
#else
TAILQ_INIT(&entries);
IOMMU_DOMAIN_LOCK(domain);
TAILQ_CONCAT(&entries, &map->map_entries, dmamap_link);

View File

@ -4,3 +4,5 @@
/* $FreeBSD$ */
#include <x86/iommu.h>
#define IOMMU_DOMAIN_UNLOAD_SLEEP