xref: /linux/drivers/vfio/vfio_iommu_type1.c (revision 39bcf0f7d415fee440d2eba877b9b618cbd6d824)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * VFIO: IOMMU DMA mapping support for Type1 IOMMU
4  *
5  * Copyright (C) 2012 Red Hat, Inc.  All rights reserved.
6  *     Author: Alex Williamson <alex.williamson@redhat.com>
7  *
8  * Derived from original vfio:
9  * Copyright 2010 Cisco Systems, Inc.  All rights reserved.
10  * Author: Tom Lyon, pugs@cisco.com
11  *
12  * We arbitrarily define a Type1 IOMMU as one matching the below code.
13  * It could be called the x86 IOMMU as it's designed for AMD-Vi & Intel
14  * VT-d, but that makes it harder to re-use as theoretically anyone
15  * implementing a similar IOMMU could make use of this.  We expect the
16  * IOMMU to support the IOMMU API and have few to no restrictions around
17  * the IOVA range that can be mapped.  The Type1 IOMMU is currently
18  * optimized for relatively static mappings of a userspace process with
19  * userspace pages pinned into memory.  We also assume devices and IOMMU
20  * domains are PCI based as the IOMMU API is still centered around a
21  * device/bus interface rather than a group interface.
22  */
23 
24 #include <linux/compat.h>
25 #include <linux/device.h>
26 #include <linux/fs.h>
27 #include <linux/highmem.h>
28 #include <linux/iommu.h>
29 #include <linux/module.h>
30 #include <linux/mm.h>
31 #include <linux/kthread.h>
32 #include <linux/rbtree.h>
33 #include <linux/sched/signal.h>
34 #include <linux/sched/mm.h>
35 #include <linux/slab.h>
36 #include <linux/uaccess.h>
37 #include <linux/vfio.h>
38 #include <linux/workqueue.h>
39 #include <linux/notifier.h>
40 #include <linux/mm_inline.h>
41 #include <linux/overflow.h>
42 #include "vfio.h"
43 
44 #define DRIVER_VERSION  "0.2"
45 #define DRIVER_AUTHOR   "Alex Williamson <alex.williamson@redhat.com>"
46 #define DRIVER_DESC     "Type1 IOMMU driver for VFIO"
47 
48 static bool allow_unsafe_interrupts;
49 module_param_named(allow_unsafe_interrupts,
50 		   allow_unsafe_interrupts, bool, S_IRUGO | S_IWUSR);
51 MODULE_PARM_DESC(allow_unsafe_interrupts,
52 		 "Enable VFIO IOMMU support for on platforms without interrupt remapping support.");
53 
54 static bool disable_hugepages;
55 module_param_named(disable_hugepages,
56 		   disable_hugepages, bool, S_IRUGO | S_IWUSR);
57 MODULE_PARM_DESC(disable_hugepages,
58 		 "Disable VFIO IOMMU support for IOMMU hugepages.");
59 
60 static unsigned int dma_entry_limit __read_mostly = U16_MAX;
61 module_param_named(dma_entry_limit, dma_entry_limit, uint, 0644);
62 MODULE_PARM_DESC(dma_entry_limit,
63 		 "Maximum number of user DMA mappings per container (65535).");
64 
65 struct vfio_iommu {
66 	struct list_head	domain_list;
67 	struct list_head	iova_list;
68 	struct mutex		lock;
69 	struct rb_root		dma_list;
70 	struct list_head	device_list;
71 	struct mutex		device_list_lock;
72 	unsigned int		dma_avail;
73 	unsigned int		vaddr_invalid_count;
74 	uint64_t		pgsize_bitmap;
75 	uint64_t		num_non_pinned_groups;
76 	bool			v2;
77 	bool			dirty_page_tracking;
78 	struct list_head	emulated_iommu_groups;
79 };
80 
81 struct vfio_domain {
82 	struct iommu_domain	*domain;
83 	struct list_head	next;
84 	struct list_head	group_list;
85 	bool			enforce_cache_coherency : 1;
86 };
87 
88 struct vfio_dma {
89 	struct rb_node		node;
90 	dma_addr_t		iova;		/* Device address */
91 	unsigned long		vaddr;		/* Process virtual addr */
92 	size_t			size;		/* Map size (bytes) */
93 	int			prot;		/* IOMMU_READ/WRITE */
94 	bool			iommu_mapped;
95 	bool			lock_cap;	/* capable(CAP_IPC_LOCK) */
96 	bool			vaddr_invalid;
97 	bool			has_rsvd;	/* has 1 or more rsvd pfns */
98 	struct task_struct	*task;
99 	struct rb_root		pfn_list;	/* Ex-user pinned pfn list */
100 	unsigned long		*bitmap;
101 	struct mm_struct	*mm;
102 	size_t			locked_vm;
103 };
104 
105 struct vfio_batch {
106 	struct page		**pages;	/* for pin_user_pages_remote */
107 	struct page		*fallback_page; /* if pages alloc fails */
108 	unsigned int		capacity;	/* length of pages array */
109 	unsigned int		size;		/* of batch currently */
110 	unsigned int		offset;		/* of next entry in pages */
111 };
112 
113 struct vfio_iommu_group {
114 	struct iommu_group	*iommu_group;
115 	struct list_head	next;
116 	bool			pinned_page_dirty_scope;
117 };
118 
119 struct vfio_iova {
120 	struct list_head	list;
121 	dma_addr_t		start;
122 	dma_addr_t		end;
123 };
124 
125 /*
126  * Guest RAM pinning working set or DMA target
127  */
128 struct vfio_pfn {
129 	struct rb_node		node;
130 	dma_addr_t		iova;		/* Device address */
131 	unsigned long		pfn;		/* Host pfn */
132 	unsigned int		ref_count;
133 };
134 
135 struct vfio_regions {
136 	struct list_head list;
137 	dma_addr_t iova;
138 	phys_addr_t phys;
139 	size_t len;
140 };
141 
142 #define DIRTY_BITMAP_BYTES(n)	(ALIGN(n, BITS_PER_TYPE(u64)) / BITS_PER_BYTE)
143 
144 /*
145  * Input argument of number of bits to bitmap_set() is unsigned integer, which
146  * further casts to signed integer for unaligned multi-bit operation,
147  * __bitmap_set().
148  * Then maximum bitmap size supported is 2^31 bits divided by 2^3 bits/byte,
149  * that is 2^28 (256 MB) which maps to 2^31 * 2^12 = 2^43 (8TB) on 4K page
150  * system.
151  */
152 #define DIRTY_BITMAP_PAGES_MAX	 ((u64)INT_MAX)
153 #define DIRTY_BITMAP_SIZE_MAX	 DIRTY_BITMAP_BYTES(DIRTY_BITMAP_PAGES_MAX)
154 
155 static int put_pfn(unsigned long pfn, int prot);
156 
157 static struct vfio_iommu_group*
158 vfio_iommu_find_iommu_group(struct vfio_iommu *iommu,
159 			    struct iommu_group *iommu_group);
160 
161 /*
162  * This code handles mapping and unmapping of user data buffers
163  * into DMA'ble space using the IOMMU
164  */
165 
vfio_find_dma(struct vfio_iommu * iommu,dma_addr_t start,size_t size)166 static struct vfio_dma *vfio_find_dma(struct vfio_iommu *iommu,
167 				      dma_addr_t start, size_t size)
168 {
169 	struct rb_node *node = iommu->dma_list.rb_node;
170 
171 	WARN_ON(!size);
172 
173 	while (node) {
174 		struct vfio_dma *dma = rb_entry(node, struct vfio_dma, node);
175 
176 		if (start + size - 1 < dma->iova)
177 			node = node->rb_left;
178 		else if (start > dma->iova + dma->size - 1)
179 			node = node->rb_right;
180 		else
181 			return dma;
182 	}
183 
184 	return NULL;
185 }
186 
vfio_find_dma_first_node(struct vfio_iommu * iommu,dma_addr_t start,dma_addr_t end)187 static struct rb_node *vfio_find_dma_first_node(struct vfio_iommu *iommu,
188 						dma_addr_t start,
189 						dma_addr_t end)
190 {
191 	struct rb_node *res = NULL;
192 	struct rb_node *node = iommu->dma_list.rb_node;
193 	struct vfio_dma *dma_res = NULL;
194 
195 	WARN_ON(end < start);
196 
197 	while (node) {
198 		struct vfio_dma *dma = rb_entry(node, struct vfio_dma, node);
199 
200 		if (start <= dma->iova + dma->size - 1) {
201 			res = node;
202 			dma_res = dma;
203 			if (start >= dma->iova)
204 				break;
205 			node = node->rb_left;
206 		} else {
207 			node = node->rb_right;
208 		}
209 	}
210 	if (res && dma_res->iova > end)
211 		res = NULL;
212 	return res;
213 }
214 
vfio_link_dma(struct vfio_iommu * iommu,struct vfio_dma * new)215 static void vfio_link_dma(struct vfio_iommu *iommu, struct vfio_dma *new)
216 {
217 	struct rb_node **link = &iommu->dma_list.rb_node, *parent = NULL;
218 	struct vfio_dma *dma;
219 
220 	WARN_ON(new->size != 0);
221 
222 	while (*link) {
223 		parent = *link;
224 		dma = rb_entry(parent, struct vfio_dma, node);
225 
226 		if (new->iova <= dma->iova)
227 			link = &(*link)->rb_left;
228 		else
229 			link = &(*link)->rb_right;
230 	}
231 
232 	rb_link_node(&new->node, parent, link);
233 	rb_insert_color(&new->node, &iommu->dma_list);
234 }
235 
vfio_unlink_dma(struct vfio_iommu * iommu,struct vfio_dma * old)236 static void vfio_unlink_dma(struct vfio_iommu *iommu, struct vfio_dma *old)
237 {
238 	rb_erase(&old->node, &iommu->dma_list);
239 }
240 
241 
vfio_dma_bitmap_alloc(struct vfio_dma * dma,size_t pgsize)242 static int vfio_dma_bitmap_alloc(struct vfio_dma *dma, size_t pgsize)
243 {
244 	uint64_t npages = dma->size / pgsize;
245 
246 	if (npages > DIRTY_BITMAP_PAGES_MAX)
247 		return -EINVAL;
248 
249 	/*
250 	 * Allocate extra 64 bits that are used to calculate shift required for
251 	 * bitmap_shift_left() to manipulate and club unaligned number of pages
252 	 * in adjacent vfio_dma ranges.
253 	 */
254 	dma->bitmap = kvzalloc(DIRTY_BITMAP_BYTES(npages) + sizeof(u64),
255 			       GFP_KERNEL);
256 	if (!dma->bitmap)
257 		return -ENOMEM;
258 
259 	return 0;
260 }
261 
vfio_dma_bitmap_free(struct vfio_dma * dma)262 static void vfio_dma_bitmap_free(struct vfio_dma *dma)
263 {
264 	kvfree(dma->bitmap);
265 	dma->bitmap = NULL;
266 }
267 
vfio_dma_populate_bitmap(struct vfio_dma * dma,size_t pgsize)268 static void vfio_dma_populate_bitmap(struct vfio_dma *dma, size_t pgsize)
269 {
270 	struct rb_node *p;
271 	unsigned long pgshift = __ffs(pgsize);
272 
273 	for (p = rb_first(&dma->pfn_list); p; p = rb_next(p)) {
274 		struct vfio_pfn *vpfn = rb_entry(p, struct vfio_pfn, node);
275 
276 		bitmap_set(dma->bitmap, (vpfn->iova - dma->iova) >> pgshift, 1);
277 	}
278 }
279 
vfio_iommu_populate_bitmap_full(struct vfio_iommu * iommu)280 static void vfio_iommu_populate_bitmap_full(struct vfio_iommu *iommu)
281 {
282 	struct rb_node *n;
283 	unsigned long pgshift = __ffs(iommu->pgsize_bitmap);
284 
285 	for (n = rb_first(&iommu->dma_list); n; n = rb_next(n)) {
286 		struct vfio_dma *dma = rb_entry(n, struct vfio_dma, node);
287 
288 		bitmap_set(dma->bitmap, 0, dma->size >> pgshift);
289 	}
290 }
291 
vfio_dma_bitmap_alloc_all(struct vfio_iommu * iommu,size_t pgsize)292 static int vfio_dma_bitmap_alloc_all(struct vfio_iommu *iommu, size_t pgsize)
293 {
294 	struct rb_node *n;
295 
296 	for (n = rb_first(&iommu->dma_list); n; n = rb_next(n)) {
297 		struct vfio_dma *dma = rb_entry(n, struct vfio_dma, node);
298 		int ret;
299 
300 		ret = vfio_dma_bitmap_alloc(dma, pgsize);
301 		if (ret) {
302 			struct rb_node *p;
303 
304 			for (p = rb_prev(n); p; p = rb_prev(p)) {
305 				struct vfio_dma *dma = rb_entry(p,
306 							struct vfio_dma, node);
307 
308 				vfio_dma_bitmap_free(dma);
309 			}
310 			return ret;
311 		}
312 		vfio_dma_populate_bitmap(dma, pgsize);
313 	}
314 	return 0;
315 }
316 
vfio_dma_bitmap_free_all(struct vfio_iommu * iommu)317 static void vfio_dma_bitmap_free_all(struct vfio_iommu *iommu)
318 {
319 	struct rb_node *n;
320 
321 	for (n = rb_first(&iommu->dma_list); n; n = rb_next(n)) {
322 		struct vfio_dma *dma = rb_entry(n, struct vfio_dma, node);
323 
324 		vfio_dma_bitmap_free(dma);
325 	}
326 }
327 
328 /*
329  * Helper Functions for host iova-pfn list
330  */
331 
332 /*
333  * Find the highest vfio_pfn that overlapping the range
334  * [iova_start, iova_end) in rb tree.
335  */
vfio_find_vpfn_range(struct vfio_dma * dma,dma_addr_t iova_start,dma_addr_t iova_end)336 static struct vfio_pfn *vfio_find_vpfn_range(struct vfio_dma *dma,
337 		dma_addr_t iova_start, dma_addr_t iova_end)
338 {
339 	struct vfio_pfn *vpfn;
340 	struct rb_node *node = dma->pfn_list.rb_node;
341 
342 	while (node) {
343 		vpfn = rb_entry(node, struct vfio_pfn, node);
344 
345 		if (iova_end <= vpfn->iova)
346 			node = node->rb_left;
347 		else if (iova_start > vpfn->iova)
348 			node = node->rb_right;
349 		else
350 			return vpfn;
351 	}
352 	return NULL;
353 }
354 
vfio_find_vpfn(struct vfio_dma * dma,dma_addr_t iova)355 static inline struct vfio_pfn *vfio_find_vpfn(struct vfio_dma *dma, dma_addr_t iova)
356 {
357 	return vfio_find_vpfn_range(dma, iova, iova + 1);
358 }
359 
vfio_link_pfn(struct vfio_dma * dma,struct vfio_pfn * new)360 static void vfio_link_pfn(struct vfio_dma *dma,
361 			  struct vfio_pfn *new)
362 {
363 	struct rb_node **link, *parent = NULL;
364 	struct vfio_pfn *vpfn;
365 
366 	link = &dma->pfn_list.rb_node;
367 	while (*link) {
368 		parent = *link;
369 		vpfn = rb_entry(parent, struct vfio_pfn, node);
370 
371 		if (new->iova < vpfn->iova)
372 			link = &(*link)->rb_left;
373 		else
374 			link = &(*link)->rb_right;
375 	}
376 
377 	rb_link_node(&new->node, parent, link);
378 	rb_insert_color(&new->node, &dma->pfn_list);
379 }
380 
vfio_unlink_pfn(struct vfio_dma * dma,struct vfio_pfn * old)381 static void vfio_unlink_pfn(struct vfio_dma *dma, struct vfio_pfn *old)
382 {
383 	rb_erase(&old->node, &dma->pfn_list);
384 }
385 
vfio_add_to_pfn_list(struct vfio_dma * dma,dma_addr_t iova,unsigned long pfn)386 static int vfio_add_to_pfn_list(struct vfio_dma *dma, dma_addr_t iova,
387 				unsigned long pfn)
388 {
389 	struct vfio_pfn *vpfn;
390 
391 	vpfn = kzalloc(sizeof(*vpfn), GFP_KERNEL);
392 	if (!vpfn)
393 		return -ENOMEM;
394 
395 	vpfn->iova = iova;
396 	vpfn->pfn = pfn;
397 	vpfn->ref_count = 1;
398 	vfio_link_pfn(dma, vpfn);
399 	return 0;
400 }
401 
vfio_remove_from_pfn_list(struct vfio_dma * dma,struct vfio_pfn * vpfn)402 static void vfio_remove_from_pfn_list(struct vfio_dma *dma,
403 				      struct vfio_pfn *vpfn)
404 {
405 	vfio_unlink_pfn(dma, vpfn);
406 	kfree(vpfn);
407 }
408 
vfio_iova_get_vfio_pfn(struct vfio_dma * dma,unsigned long iova)409 static struct vfio_pfn *vfio_iova_get_vfio_pfn(struct vfio_dma *dma,
410 					       unsigned long iova)
411 {
412 	struct vfio_pfn *vpfn = vfio_find_vpfn(dma, iova);
413 
414 	if (vpfn)
415 		vpfn->ref_count++;
416 	return vpfn;
417 }
418 
vfio_iova_put_vfio_pfn(struct vfio_dma * dma,struct vfio_pfn * vpfn)419 static int vfio_iova_put_vfio_pfn(struct vfio_dma *dma, struct vfio_pfn *vpfn)
420 {
421 	int ret = 0;
422 
423 	vpfn->ref_count--;
424 	if (!vpfn->ref_count) {
425 		ret = put_pfn(vpfn->pfn, dma->prot);
426 		vfio_remove_from_pfn_list(dma, vpfn);
427 	}
428 	return ret;
429 }
430 
mm_lock_acct(struct task_struct * task,struct mm_struct * mm,bool lock_cap,long npage)431 static int mm_lock_acct(struct task_struct *task, struct mm_struct *mm,
432 			bool lock_cap, long npage)
433 {
434 	int ret = mmap_write_lock_killable(mm);
435 
436 	if (ret)
437 		return ret;
438 
439 	ret = __account_locked_vm(mm, abs(npage), npage > 0, task, lock_cap);
440 	mmap_write_unlock(mm);
441 	return ret;
442 }
443 
vfio_lock_acct(struct vfio_dma * dma,long npage,bool async)444 static int vfio_lock_acct(struct vfio_dma *dma, long npage, bool async)
445 {
446 	struct mm_struct *mm;
447 	int ret;
448 
449 	if (!npage)
450 		return 0;
451 
452 	mm = dma->mm;
453 	if (async && !mmget_not_zero(mm))
454 		return -ESRCH; /* process exited */
455 
456 	ret = mm_lock_acct(dma->task, mm, dma->lock_cap, npage);
457 	if (!ret)
458 		dma->locked_vm += npage;
459 
460 	if (async)
461 		mmput(mm);
462 
463 	return ret;
464 }
465 
466 /*
467  * Some mappings aren't backed by a struct page, for example an mmap'd
468  * MMIO range for our own or another device.  These use a different
469  * pfn conversion and shouldn't be tracked as locked pages.
470  * For compound pages, any driver that sets the reserved bit in head
471  * page needs to set the reserved bit in all subpages to be safe.
472  */
is_invalid_reserved_pfn(unsigned long pfn)473 static bool is_invalid_reserved_pfn(unsigned long pfn)
474 {
475 	if (pfn_valid(pfn))
476 		return PageReserved(pfn_to_page(pfn));
477 
478 	return true;
479 }
480 
put_pfn(unsigned long pfn,int prot)481 static int put_pfn(unsigned long pfn, int prot)
482 {
483 	if (!is_invalid_reserved_pfn(pfn)) {
484 		struct page *page = pfn_to_page(pfn);
485 
486 		unpin_user_pages_dirty_lock(&page, 1, prot & IOMMU_WRITE);
487 		return 1;
488 	}
489 	return 0;
490 }
491 
492 #define VFIO_BATCH_MAX_CAPACITY (PAGE_SIZE / sizeof(struct page *))
493 
__vfio_batch_init(struct vfio_batch * batch,bool single)494 static void __vfio_batch_init(struct vfio_batch *batch, bool single)
495 {
496 	batch->size = 0;
497 	batch->offset = 0;
498 
499 	if (single || unlikely(disable_hugepages))
500 		goto fallback;
501 
502 	batch->pages = (struct page **) __get_free_page(GFP_KERNEL);
503 	if (!batch->pages)
504 		goto fallback;
505 
506 	batch->capacity = VFIO_BATCH_MAX_CAPACITY;
507 	return;
508 
509 fallback:
510 	batch->pages = &batch->fallback_page;
511 	batch->capacity = 1;
512 }
513 
vfio_batch_init(struct vfio_batch * batch)514 static void vfio_batch_init(struct vfio_batch *batch)
515 {
516 	__vfio_batch_init(batch, false);
517 }
518 
vfio_batch_init_single(struct vfio_batch * batch)519 static void vfio_batch_init_single(struct vfio_batch *batch)
520 {
521 	__vfio_batch_init(batch, true);
522 }
523 
vfio_batch_unpin(struct vfio_batch * batch,struct vfio_dma * dma)524 static void vfio_batch_unpin(struct vfio_batch *batch, struct vfio_dma *dma)
525 {
526 	while (batch->size) {
527 		unsigned long pfn = page_to_pfn(batch->pages[batch->offset]);
528 
529 		put_pfn(pfn, dma->prot);
530 		batch->offset++;
531 		batch->size--;
532 	}
533 }
534 
vfio_batch_fini(struct vfio_batch * batch)535 static void vfio_batch_fini(struct vfio_batch *batch)
536 {
537 	if (batch->capacity == VFIO_BATCH_MAX_CAPACITY)
538 		free_page((unsigned long)batch->pages);
539 }
540 
follow_fault_pfn(struct vm_area_struct * vma,struct mm_struct * mm,unsigned long vaddr,unsigned long * pfn,unsigned long * addr_mask,bool write_fault)541 static int follow_fault_pfn(struct vm_area_struct *vma, struct mm_struct *mm,
542 			    unsigned long vaddr, unsigned long *pfn,
543 			    unsigned long *addr_mask, bool write_fault)
544 {
545 	struct follow_pfnmap_args args = { .vma = vma, .address = vaddr };
546 	int ret;
547 
548 	ret = follow_pfnmap_start(&args);
549 	if (ret) {
550 		bool unlocked = false;
551 
552 		ret = fixup_user_fault(mm, vaddr,
553 				       FAULT_FLAG_REMOTE |
554 				       (write_fault ?  FAULT_FLAG_WRITE : 0),
555 				       &unlocked);
556 		if (unlocked)
557 			return -EAGAIN;
558 
559 		if (ret)
560 			return ret;
561 
562 		ret = follow_pfnmap_start(&args);
563 		if (ret)
564 			return ret;
565 	}
566 
567 	if (write_fault && !args.writable) {
568 		ret = -EFAULT;
569 	} else {
570 		*pfn = args.pfn;
571 		*addr_mask = args.addr_mask;
572 	}
573 
574 	follow_pfnmap_end(&args);
575 	return ret;
576 }
577 
578 /*
579  * Returns the positive number of pfns successfully obtained or a negative
580  * error code.  The initial pfn is stored in the pfn arg.  For page-backed
581  * pfns, the provided batch is also updated to indicate the filled pages and
582  * initial offset.  For VM_PFNMAP pfns, only the returned number of pfns and
583  * returned initial pfn are provided; subsequent pfns are contiguous.
584  */
vaddr_get_pfns(struct mm_struct * mm,unsigned long vaddr,unsigned long npages,int prot,unsigned long * pfn,struct vfio_batch * batch)585 static long vaddr_get_pfns(struct mm_struct *mm, unsigned long vaddr,
586 			   unsigned long npages, int prot, unsigned long *pfn,
587 			   struct vfio_batch *batch)
588 {
589 	unsigned long pin_pages = min_t(unsigned long, npages, batch->capacity);
590 	struct vm_area_struct *vma;
591 	unsigned int flags = 0;
592 	long ret;
593 
594 	if (prot & IOMMU_WRITE)
595 		flags |= FOLL_WRITE;
596 
597 	mmap_read_lock(mm);
598 	ret = pin_user_pages_remote(mm, vaddr, pin_pages, flags | FOLL_LONGTERM,
599 				    batch->pages, NULL);
600 	if (ret > 0) {
601 		*pfn = page_to_pfn(batch->pages[0]);
602 		batch->size = ret;
603 		batch->offset = 0;
604 		goto done;
605 	} else if (!ret) {
606 		ret = -EFAULT;
607 	}
608 
609 	vaddr = untagged_addr_remote(mm, vaddr);
610 
611 retry:
612 	vma = vma_lookup(mm, vaddr);
613 
614 	if (vma && vma->vm_flags & VM_PFNMAP) {
615 		unsigned long addr_mask;
616 
617 		ret = follow_fault_pfn(vma, mm, vaddr, pfn, &addr_mask,
618 				       prot & IOMMU_WRITE);
619 		if (ret == -EAGAIN)
620 			goto retry;
621 
622 		if (!ret) {
623 			if (is_invalid_reserved_pfn(*pfn)) {
624 				unsigned long epfn;
625 
626 				epfn = (*pfn | (~addr_mask >> PAGE_SHIFT)) + 1;
627 				ret = min_t(long, npages, epfn - *pfn);
628 			} else {
629 				ret = -EFAULT;
630 			}
631 		}
632 	}
633 done:
634 	mmap_read_unlock(mm);
635 	return ret;
636 }
637 
638 
vpfn_pages(struct vfio_dma * dma,dma_addr_t iova_start,long nr_pages)639 static long vpfn_pages(struct vfio_dma *dma,
640 		dma_addr_t iova_start, long nr_pages)
641 {
642 	dma_addr_t iova_end = iova_start + (nr_pages << PAGE_SHIFT);
643 	struct vfio_pfn *top = vfio_find_vpfn_range(dma, iova_start, iova_end);
644 	long ret = 1;
645 	struct vfio_pfn *vpfn;
646 	struct rb_node *prev;
647 	struct rb_node *next;
648 
649 	if (likely(!top))
650 		return 0;
651 
652 	prev = next = &top->node;
653 
654 	while ((prev = rb_prev(prev))) {
655 		vpfn = rb_entry(prev, struct vfio_pfn, node);
656 		if (vpfn->iova < iova_start)
657 			break;
658 		ret++;
659 	}
660 
661 	while ((next = rb_next(next))) {
662 		vpfn = rb_entry(next, struct vfio_pfn, node);
663 		if (vpfn->iova >= iova_end)
664 			break;
665 		ret++;
666 	}
667 
668 	return ret;
669 }
670 
671 /*
672  * Attempt to pin pages.  We really don't want to track all the pfns and
673  * the iommu can only map chunks of consecutive pfns anyway, so get the
674  * first page and all consecutive pages with the same locking.
675  */
vfio_pin_pages_remote(struct vfio_dma * dma,unsigned long vaddr,unsigned long npage,unsigned long * pfn_base,unsigned long limit,struct vfio_batch * batch)676 static long vfio_pin_pages_remote(struct vfio_dma *dma, unsigned long vaddr,
677 				  unsigned long npage, unsigned long *pfn_base,
678 				  unsigned long limit, struct vfio_batch *batch)
679 {
680 	unsigned long pfn;
681 	struct mm_struct *mm = current->mm;
682 	long ret, pinned = 0, lock_acct = 0;
683 	bool rsvd;
684 	dma_addr_t iova = vaddr - dma->vaddr + dma->iova;
685 
686 	/* This code path is only user initiated */
687 	if (!mm)
688 		return -ENODEV;
689 
690 	if (batch->size) {
691 		/* Leftover pages in batch from an earlier call. */
692 		*pfn_base = page_to_pfn(batch->pages[batch->offset]);
693 		pfn = *pfn_base;
694 		rsvd = is_invalid_reserved_pfn(*pfn_base);
695 	} else {
696 		*pfn_base = 0;
697 	}
698 
699 	if (unlikely(disable_hugepages))
700 		npage = 1;
701 
702 	while (npage) {
703 		if (!batch->size) {
704 			/*
705 			 * Large mappings may take a while to repeatedly refill
706 			 * the batch, so conditionally relinquish the CPU when
707 			 * needed to avoid stalls.
708 			 */
709 			cond_resched();
710 
711 			/* Empty batch, so refill it. */
712 			ret = vaddr_get_pfns(mm, vaddr, npage, dma->prot,
713 					     &pfn, batch);
714 			if (ret < 0)
715 				goto unpin_out;
716 
717 			if (!*pfn_base) {
718 				*pfn_base = pfn;
719 				rsvd = is_invalid_reserved_pfn(*pfn_base);
720 			}
721 
722 			/* Handle pfnmap */
723 			if (!batch->size) {
724 				if (pfn != *pfn_base + pinned || !rsvd)
725 					goto out;
726 
727 				pinned += ret;
728 				npage -= ret;
729 				vaddr += (PAGE_SIZE * ret);
730 				iova += (PAGE_SIZE * ret);
731 				continue;
732 			}
733 		}
734 
735 		/*
736 		 * pfn is preset for the first iteration of this inner loop
737 		 * due to the fact that vaddr_get_pfns() needs to provide the
738 		 * initial pfn for pfnmaps.  Therefore to reduce redundancy,
739 		 * the next pfn is fetched at the end of the loop.
740 		 * A PageReserved() page could still qualify as page backed
741 		 * and rsvd here, and therefore continues to use the batch.
742 		 */
743 		while (true) {
744 			long nr_pages, acct_pages = 0;
745 
746 			if (pfn != *pfn_base + pinned ||
747 			    rsvd != is_invalid_reserved_pfn(pfn))
748 				goto out;
749 
750 			/*
751 			 * Using GUP with the FOLL_LONGTERM in
752 			 * vaddr_get_pfns() will not return invalid
753 			 * or reserved pages.
754 			 */
755 			nr_pages = num_pages_contiguous(
756 					&batch->pages[batch->offset],
757 					batch->size);
758 			if (!rsvd) {
759 				acct_pages = nr_pages;
760 				acct_pages -= vpfn_pages(dma, iova, nr_pages);
761 			}
762 
763 			/*
764 			 * Reserved pages aren't counted against the user,
765 			 * externally pinned pages are already counted against
766 			 * the user.
767 			 */
768 			if (acct_pages) {
769 				if (!dma->lock_cap &&
770 				    mm->locked_vm + lock_acct + acct_pages > limit) {
771 					pr_warn("%s: RLIMIT_MEMLOCK (%ld) exceeded\n",
772 						__func__, limit << PAGE_SHIFT);
773 					ret = -ENOMEM;
774 					goto unpin_out;
775 				}
776 				lock_acct += acct_pages;
777 			}
778 
779 			pinned += nr_pages;
780 			npage -= nr_pages;
781 			vaddr += PAGE_SIZE * nr_pages;
782 			iova += PAGE_SIZE * nr_pages;
783 			batch->offset += nr_pages;
784 			batch->size -= nr_pages;
785 
786 			if (!batch->size)
787 				break;
788 
789 			pfn = page_to_pfn(batch->pages[batch->offset]);
790 		}
791 	}
792 
793 out:
794 	dma->has_rsvd |= rsvd;
795 	ret = vfio_lock_acct(dma, lock_acct, false);
796 
797 unpin_out:
798 	if (ret < 0) {
799 		if (pinned && !rsvd) {
800 			for (pfn = *pfn_base ; pinned ; pfn++, pinned--)
801 				put_pfn(pfn, dma->prot);
802 		}
803 		vfio_batch_unpin(batch, dma);
804 
805 		return ret;
806 	}
807 
808 	return pinned;
809 }
810 
put_valid_unreserved_pfns(unsigned long start_pfn,unsigned long npage,int prot)811 static inline void put_valid_unreserved_pfns(unsigned long start_pfn,
812 		unsigned long npage, int prot)
813 {
814 	unpin_user_page_range_dirty_lock(pfn_to_page(start_pfn), npage,
815 					 prot & IOMMU_WRITE);
816 }
817 
vfio_unpin_pages_remote(struct vfio_dma * dma,dma_addr_t iova,unsigned long pfn,unsigned long npage,bool do_accounting)818 static long vfio_unpin_pages_remote(struct vfio_dma *dma, dma_addr_t iova,
819 				    unsigned long pfn, unsigned long npage,
820 				    bool do_accounting)
821 {
822 	long unlocked = 0, locked = vpfn_pages(dma, iova, npage);
823 
824 	if (dma->has_rsvd) {
825 		unsigned long i;
826 
827 		for (i = 0; i < npage; i++)
828 			if (put_pfn(pfn++, dma->prot))
829 				unlocked++;
830 	} else {
831 		put_valid_unreserved_pfns(pfn, npage, dma->prot);
832 		unlocked = npage;
833 	}
834 	if (do_accounting)
835 		vfio_lock_acct(dma, locked - unlocked, true);
836 
837 	return unlocked;
838 }
839 
vfio_pin_page_external(struct vfio_dma * dma,unsigned long vaddr,unsigned long * pfn_base,bool do_accounting)840 static int vfio_pin_page_external(struct vfio_dma *dma, unsigned long vaddr,
841 				  unsigned long *pfn_base, bool do_accounting)
842 {
843 	struct vfio_batch batch;
844 	struct mm_struct *mm;
845 	int ret;
846 
847 	mm = dma->mm;
848 	if (!mmget_not_zero(mm))
849 		return -ENODEV;
850 
851 	vfio_batch_init_single(&batch);
852 
853 	ret = vaddr_get_pfns(mm, vaddr, 1, dma->prot, pfn_base, &batch);
854 	if (ret != 1)
855 		goto out;
856 
857 	ret = 0;
858 
859 	if (do_accounting && !is_invalid_reserved_pfn(*pfn_base)) {
860 		ret = vfio_lock_acct(dma, 1, false);
861 		if (ret) {
862 			put_pfn(*pfn_base, dma->prot);
863 			if (ret == -ENOMEM)
864 				pr_warn("%s: Task %s (%d) RLIMIT_MEMLOCK "
865 					"(%ld) exceeded\n", __func__,
866 					dma->task->comm, task_pid_nr(dma->task),
867 					task_rlimit(dma->task, RLIMIT_MEMLOCK));
868 		}
869 	}
870 
871 out:
872 	vfio_batch_fini(&batch);
873 	mmput(mm);
874 	return ret;
875 }
876 
vfio_unpin_page_external(struct vfio_dma * dma,dma_addr_t iova,bool do_accounting)877 static int vfio_unpin_page_external(struct vfio_dma *dma, dma_addr_t iova,
878 				    bool do_accounting)
879 {
880 	int unlocked;
881 	struct vfio_pfn *vpfn = vfio_find_vpfn(dma, iova);
882 
883 	if (!vpfn)
884 		return 0;
885 
886 	unlocked = vfio_iova_put_vfio_pfn(dma, vpfn);
887 
888 	if (do_accounting)
889 		vfio_lock_acct(dma, -unlocked, true);
890 
891 	return unlocked;
892 }
893 
vfio_iommu_type1_pin_pages(void * iommu_data,struct iommu_group * iommu_group,dma_addr_t user_iova,int npage,int prot,struct page ** pages)894 static int vfio_iommu_type1_pin_pages(void *iommu_data,
895 				      struct iommu_group *iommu_group,
896 				      dma_addr_t user_iova,
897 				      int npage, int prot,
898 				      struct page **pages)
899 {
900 	struct vfio_iommu *iommu = iommu_data;
901 	struct vfio_iommu_group *group;
902 	int i, j, ret;
903 	unsigned long remote_vaddr;
904 	struct vfio_dma *dma;
905 	bool do_accounting;
906 	dma_addr_t iova_end;
907 	size_t iova_size;
908 
909 	if (!iommu || !pages || npage <= 0)
910 		return -EINVAL;
911 
912 	/* Supported for v2 version only */
913 	if (!iommu->v2)
914 		return -EACCES;
915 
916 	if (check_mul_overflow(npage, PAGE_SIZE, &iova_size) ||
917 	    check_add_overflow(user_iova, iova_size - 1, &iova_end))
918 		return -EOVERFLOW;
919 
920 	mutex_lock(&iommu->lock);
921 
922 	if (WARN_ONCE(iommu->vaddr_invalid_count,
923 		      "vfio_pin_pages not allowed with VFIO_UPDATE_VADDR\n")) {
924 		ret = -EBUSY;
925 		goto pin_done;
926 	}
927 
928 	/* Fail if no dma_umap notifier is registered */
929 	if (list_empty(&iommu->device_list)) {
930 		ret = -EINVAL;
931 		goto pin_done;
932 	}
933 
934 	/*
935 	 * If iommu capable domain exist in the container then all pages are
936 	 * already pinned and accounted. Accounting should be done if there is no
937 	 * iommu capable domain in the container.
938 	 */
939 	do_accounting = list_empty(&iommu->domain_list);
940 
941 	for (i = 0; i < npage; i++) {
942 		unsigned long phys_pfn;
943 		dma_addr_t iova;
944 		struct vfio_pfn *vpfn;
945 
946 		iova = user_iova + PAGE_SIZE * i;
947 		dma = vfio_find_dma(iommu, iova, PAGE_SIZE);
948 		if (!dma) {
949 			ret = -EINVAL;
950 			goto pin_unwind;
951 		}
952 
953 		if ((dma->prot & prot) != prot) {
954 			ret = -EPERM;
955 			goto pin_unwind;
956 		}
957 
958 		vpfn = vfio_iova_get_vfio_pfn(dma, iova);
959 		if (vpfn) {
960 			pages[i] = pfn_to_page(vpfn->pfn);
961 			continue;
962 		}
963 
964 		remote_vaddr = dma->vaddr + (iova - dma->iova);
965 		ret = vfio_pin_page_external(dma, remote_vaddr, &phys_pfn,
966 					     do_accounting);
967 		if (ret)
968 			goto pin_unwind;
969 
970 		if (!pfn_valid(phys_pfn)) {
971 			ret = -EINVAL;
972 			goto pin_unwind;
973 		}
974 
975 		ret = vfio_add_to_pfn_list(dma, iova, phys_pfn);
976 		if (ret) {
977 			if (put_pfn(phys_pfn, dma->prot) && do_accounting)
978 				vfio_lock_acct(dma, -1, true);
979 			goto pin_unwind;
980 		}
981 
982 		pages[i] = pfn_to_page(phys_pfn);
983 
984 		if (iommu->dirty_page_tracking) {
985 			unsigned long pgshift = __ffs(iommu->pgsize_bitmap);
986 
987 			/*
988 			 * Bitmap populated with the smallest supported page
989 			 * size
990 			 */
991 			bitmap_set(dma->bitmap,
992 				   (iova - dma->iova) >> pgshift, 1);
993 		}
994 	}
995 	ret = i;
996 
997 	group = vfio_iommu_find_iommu_group(iommu, iommu_group);
998 	if (!group->pinned_page_dirty_scope) {
999 		group->pinned_page_dirty_scope = true;
1000 		iommu->num_non_pinned_groups--;
1001 	}
1002 
1003 	goto pin_done;
1004 
1005 pin_unwind:
1006 	pages[i] = NULL;
1007 	for (j = 0; j < i; j++) {
1008 		dma_addr_t iova;
1009 
1010 		iova = user_iova + PAGE_SIZE * j;
1011 		dma = vfio_find_dma(iommu, iova, PAGE_SIZE);
1012 		vfio_unpin_page_external(dma, iova, do_accounting);
1013 		pages[j] = NULL;
1014 	}
1015 pin_done:
1016 	mutex_unlock(&iommu->lock);
1017 	return ret;
1018 }
1019 
vfio_iommu_type1_unpin_pages(void * iommu_data,dma_addr_t user_iova,int npage)1020 static void vfio_iommu_type1_unpin_pages(void *iommu_data,
1021 					 dma_addr_t user_iova, int npage)
1022 {
1023 	struct vfio_iommu *iommu = iommu_data;
1024 	bool do_accounting;
1025 	dma_addr_t iova_end;
1026 	size_t iova_size;
1027 	int i;
1028 
1029 	/* Supported for v2 version only */
1030 	if (WARN_ON(!iommu->v2))
1031 		return;
1032 
1033 	if (WARN_ON(npage <= 0))
1034 		return;
1035 
1036 	if (WARN_ON(check_mul_overflow(npage, PAGE_SIZE, &iova_size) ||
1037 		    check_add_overflow(user_iova, iova_size - 1, &iova_end)))
1038 		return;
1039 
1040 	mutex_lock(&iommu->lock);
1041 
1042 	do_accounting = list_empty(&iommu->domain_list);
1043 	for (i = 0; i < npage; i++) {
1044 		dma_addr_t iova = user_iova + PAGE_SIZE * i;
1045 		struct vfio_dma *dma;
1046 
1047 		dma = vfio_find_dma(iommu, iova, PAGE_SIZE);
1048 		if (!dma)
1049 			break;
1050 
1051 		vfio_unpin_page_external(dma, iova, do_accounting);
1052 	}
1053 
1054 	mutex_unlock(&iommu->lock);
1055 
1056 	WARN_ON(i != npage);
1057 }
1058 
vfio_sync_unpin(struct vfio_dma * dma,struct vfio_domain * domain,struct list_head * regions,struct iommu_iotlb_gather * iotlb_gather)1059 static long vfio_sync_unpin(struct vfio_dma *dma, struct vfio_domain *domain,
1060 			    struct list_head *regions,
1061 			    struct iommu_iotlb_gather *iotlb_gather)
1062 {
1063 	long unlocked = 0;
1064 	struct vfio_regions *entry, *next;
1065 
1066 	iommu_iotlb_sync(domain->domain, iotlb_gather);
1067 
1068 	list_for_each_entry_safe(entry, next, regions, list) {
1069 		unlocked += vfio_unpin_pages_remote(dma,
1070 						    entry->iova,
1071 						    entry->phys >> PAGE_SHIFT,
1072 						    entry->len >> PAGE_SHIFT,
1073 						    false);
1074 		list_del(&entry->list);
1075 		kfree(entry);
1076 	}
1077 
1078 	cond_resched();
1079 
1080 	return unlocked;
1081 }
1082 
1083 /*
1084  * Generally, VFIO needs to unpin remote pages after each IOTLB flush.
1085  * Therefore, when using IOTLB flush sync interface, VFIO need to keep track
1086  * of these regions (currently using a list).
1087  *
1088  * This value specifies maximum number of regions for each IOTLB flush sync.
1089  */
1090 #define VFIO_IOMMU_TLB_SYNC_MAX		512
1091 
unmap_unpin_fast(struct vfio_domain * domain,struct vfio_dma * dma,dma_addr_t iova,size_t len,phys_addr_t phys,long * unlocked,struct list_head * unmapped_list,int * unmapped_cnt,struct iommu_iotlb_gather * iotlb_gather)1092 static size_t unmap_unpin_fast(struct vfio_domain *domain,
1093 			       struct vfio_dma *dma, dma_addr_t iova,
1094 			       size_t len, phys_addr_t phys, long *unlocked,
1095 			       struct list_head *unmapped_list,
1096 			       int *unmapped_cnt,
1097 			       struct iommu_iotlb_gather *iotlb_gather)
1098 {
1099 	size_t unmapped = 0;
1100 	struct vfio_regions *entry = kzalloc(sizeof(*entry), GFP_KERNEL);
1101 
1102 	if (entry) {
1103 		unmapped = iommu_unmap_fast(domain->domain, iova, len,
1104 					    iotlb_gather);
1105 
1106 		if (!unmapped) {
1107 			kfree(entry);
1108 		} else {
1109 			entry->iova = iova;
1110 			entry->phys = phys;
1111 			entry->len  = unmapped;
1112 			list_add_tail(&entry->list, unmapped_list);
1113 
1114 			(*unmapped_cnt)++;
1115 		}
1116 	}
1117 
1118 	/*
1119 	 * Sync if the number of fast-unmap regions hits the limit
1120 	 * or in case of errors.
1121 	 */
1122 	if (*unmapped_cnt >= VFIO_IOMMU_TLB_SYNC_MAX || !unmapped) {
1123 		*unlocked += vfio_sync_unpin(dma, domain, unmapped_list,
1124 					     iotlb_gather);
1125 		*unmapped_cnt = 0;
1126 	}
1127 
1128 	return unmapped;
1129 }
1130 
unmap_unpin_slow(struct vfio_domain * domain,struct vfio_dma * dma,dma_addr_t iova,size_t len,phys_addr_t phys,long * unlocked)1131 static size_t unmap_unpin_slow(struct vfio_domain *domain,
1132 			       struct vfio_dma *dma, dma_addr_t iova,
1133 			       size_t len, phys_addr_t phys,
1134 			       long *unlocked)
1135 {
1136 	size_t unmapped = iommu_unmap(domain->domain, iova, len);
1137 
1138 	if (unmapped) {
1139 		*unlocked += vfio_unpin_pages_remote(dma, iova,
1140 						     phys >> PAGE_SHIFT,
1141 						     unmapped >> PAGE_SHIFT,
1142 						     false);
1143 		cond_resched();
1144 	}
1145 	return unmapped;
1146 }
1147 
vfio_unmap_unpin(struct vfio_iommu * iommu,struct vfio_dma * dma,bool do_accounting)1148 static long vfio_unmap_unpin(struct vfio_iommu *iommu, struct vfio_dma *dma,
1149 			     bool do_accounting)
1150 {
1151 	struct vfio_domain *domain, *d;
1152 	LIST_HEAD(unmapped_region_list);
1153 	struct iommu_iotlb_gather iotlb_gather;
1154 	int unmapped_region_cnt = 0;
1155 	long unlocked = 0;
1156 	size_t pos = 0;
1157 
1158 	if (!dma->size)
1159 		return 0;
1160 
1161 	if (list_empty(&iommu->domain_list))
1162 		return 0;
1163 
1164 	/*
1165 	 * We use the IOMMU to track the physical addresses, otherwise we'd
1166 	 * need a much more complicated tracking system.  Unfortunately that
1167 	 * means we need to use one of the iommu domains to figure out the
1168 	 * pfns to unpin.  The rest need to be unmapped in advance so we have
1169 	 * no iommu translations remaining when the pages are unpinned.
1170 	 */
1171 	domain = d = list_first_entry(&iommu->domain_list,
1172 				      struct vfio_domain, next);
1173 
1174 	list_for_each_entry_continue(d, &iommu->domain_list, next) {
1175 		iommu_unmap(d->domain, dma->iova, dma->size);
1176 		cond_resched();
1177 	}
1178 
1179 	iommu_iotlb_gather_init(&iotlb_gather);
1180 	while (pos < dma->size) {
1181 		size_t unmapped, len;
1182 		phys_addr_t phys, next;
1183 		dma_addr_t iova = dma->iova + pos;
1184 
1185 		phys = iommu_iova_to_phys(domain->domain, iova);
1186 		if (WARN_ON(!phys)) {
1187 			pos += PAGE_SIZE;
1188 			continue;
1189 		}
1190 
1191 		/*
1192 		 * To optimize for fewer iommu_unmap() calls, each of which
1193 		 * may require hardware cache flushing, try to find the
1194 		 * largest contiguous physical memory chunk to unmap.
1195 		 */
1196 		for (len = PAGE_SIZE; pos + len < dma->size; len += PAGE_SIZE) {
1197 			next = iommu_iova_to_phys(domain->domain, iova + len);
1198 			if (next != phys + len)
1199 				break;
1200 		}
1201 
1202 		/*
1203 		 * First, try to use fast unmap/unpin. In case of failure,
1204 		 * switch to slow unmap/unpin path.
1205 		 */
1206 		unmapped = unmap_unpin_fast(domain, dma, iova, len, phys,
1207 					    &unlocked, &unmapped_region_list,
1208 					    &unmapped_region_cnt,
1209 					    &iotlb_gather);
1210 		if (!unmapped) {
1211 			unmapped = unmap_unpin_slow(domain, dma, iova, len,
1212 						    phys, &unlocked);
1213 			if (WARN_ON(!unmapped))
1214 				break;
1215 		}
1216 
1217 		pos += unmapped;
1218 	}
1219 
1220 	dma->iommu_mapped = false;
1221 
1222 	if (unmapped_region_cnt) {
1223 		unlocked += vfio_sync_unpin(dma, domain, &unmapped_region_list,
1224 					    &iotlb_gather);
1225 	}
1226 
1227 	if (do_accounting) {
1228 		vfio_lock_acct(dma, -unlocked, true);
1229 		return 0;
1230 	}
1231 	return unlocked;
1232 }
1233 
vfio_remove_dma(struct vfio_iommu * iommu,struct vfio_dma * dma)1234 static void vfio_remove_dma(struct vfio_iommu *iommu, struct vfio_dma *dma)
1235 {
1236 	WARN_ON(!RB_EMPTY_ROOT(&dma->pfn_list));
1237 	vfio_unmap_unpin(iommu, dma, true);
1238 	vfio_unlink_dma(iommu, dma);
1239 	put_task_struct(dma->task);
1240 	mmdrop(dma->mm);
1241 	vfio_dma_bitmap_free(dma);
1242 	if (dma->vaddr_invalid)
1243 		iommu->vaddr_invalid_count--;
1244 	kfree(dma);
1245 	iommu->dma_avail++;
1246 }
1247 
vfio_update_pgsize_bitmap(struct vfio_iommu * iommu)1248 static void vfio_update_pgsize_bitmap(struct vfio_iommu *iommu)
1249 {
1250 	struct vfio_domain *domain;
1251 
1252 	iommu->pgsize_bitmap = ULONG_MAX;
1253 
1254 	list_for_each_entry(domain, &iommu->domain_list, next)
1255 		iommu->pgsize_bitmap &= domain->domain->pgsize_bitmap;
1256 
1257 	/*
1258 	 * In case the IOMMU supports page sizes smaller than PAGE_SIZE
1259 	 * we pretend PAGE_SIZE is supported and hide sub-PAGE_SIZE sizes.
1260 	 * That way the user will be able to map/unmap buffers whose size/
1261 	 * start address is aligned with PAGE_SIZE. Pinning code uses that
1262 	 * granularity while iommu driver can use the sub-PAGE_SIZE size
1263 	 * to map the buffer.
1264 	 */
1265 	if (iommu->pgsize_bitmap & ~PAGE_MASK) {
1266 		iommu->pgsize_bitmap &= PAGE_MASK;
1267 		iommu->pgsize_bitmap |= PAGE_SIZE;
1268 	}
1269 }
1270 
update_user_bitmap(u64 __user * bitmap,struct vfio_iommu * iommu,struct vfio_dma * dma,dma_addr_t base_iova,size_t pgsize)1271 static int update_user_bitmap(u64 __user *bitmap, struct vfio_iommu *iommu,
1272 			      struct vfio_dma *dma, dma_addr_t base_iova,
1273 			      size_t pgsize)
1274 {
1275 	unsigned long pgshift = __ffs(pgsize);
1276 	unsigned long nbits = dma->size >> pgshift;
1277 	unsigned long bit_offset = (dma->iova - base_iova) >> pgshift;
1278 	unsigned long copy_offset = bit_offset / BITS_PER_LONG;
1279 	unsigned long shift = bit_offset % BITS_PER_LONG;
1280 	unsigned long leftover;
1281 
1282 	/*
1283 	 * mark all pages dirty if any IOMMU capable device is not able
1284 	 * to report dirty pages and all pages are pinned and mapped.
1285 	 */
1286 	if (iommu->num_non_pinned_groups && dma->iommu_mapped)
1287 		bitmap_set(dma->bitmap, 0, nbits);
1288 
1289 	if (shift) {
1290 		bitmap_shift_left(dma->bitmap, dma->bitmap, shift,
1291 				  nbits + shift);
1292 
1293 		if (copy_from_user(&leftover,
1294 				   (void __user *)(bitmap + copy_offset),
1295 				   sizeof(leftover)))
1296 			return -EFAULT;
1297 
1298 		bitmap_or(dma->bitmap, dma->bitmap, &leftover, shift);
1299 	}
1300 
1301 	if (copy_to_user((void __user *)(bitmap + copy_offset), dma->bitmap,
1302 			 DIRTY_BITMAP_BYTES(nbits + shift)))
1303 		return -EFAULT;
1304 
1305 	return 0;
1306 }
1307 
vfio_iova_dirty_bitmap(u64 __user * bitmap,struct vfio_iommu * iommu,dma_addr_t iova,dma_addr_t iova_end,size_t pgsize)1308 static int vfio_iova_dirty_bitmap(u64 __user *bitmap, struct vfio_iommu *iommu,
1309 				  dma_addr_t iova, dma_addr_t iova_end, size_t pgsize)
1310 {
1311 	struct vfio_dma *dma;
1312 	struct rb_node *n;
1313 	unsigned long pgshift = __ffs(pgsize);
1314 	int ret;
1315 
1316 	/*
1317 	 * GET_BITMAP request must fully cover vfio_dma mappings.  Multiple
1318 	 * vfio_dma mappings may be clubbed by specifying large ranges, but
1319 	 * there must not be any previous mappings bisected by the range.
1320 	 * An error will be returned if these conditions are not met.
1321 	 */
1322 	dma = vfio_find_dma(iommu, iova, 1);
1323 	if (dma && dma->iova != iova)
1324 		return -EINVAL;
1325 
1326 	dma = vfio_find_dma(iommu, iova_end, 1);
1327 	if (dma && dma->iova + dma->size - 1 != iova_end)
1328 		return -EINVAL;
1329 
1330 	for (n = rb_first(&iommu->dma_list); n; n = rb_next(n)) {
1331 		struct vfio_dma *dma = rb_entry(n, struct vfio_dma, node);
1332 
1333 		if (dma->iova < iova)
1334 			continue;
1335 
1336 		if (dma->iova > iova_end)
1337 			break;
1338 
1339 		ret = update_user_bitmap(bitmap, iommu, dma, iova, pgsize);
1340 		if (ret)
1341 			return ret;
1342 
1343 		/*
1344 		 * Re-populate bitmap to include all pinned pages which are
1345 		 * considered as dirty but exclude pages which are unpinned and
1346 		 * pages which are marked dirty by vfio_dma_rw()
1347 		 */
1348 		bitmap_clear(dma->bitmap, 0, dma->size >> pgshift);
1349 		vfio_dma_populate_bitmap(dma, pgsize);
1350 	}
1351 	return 0;
1352 }
1353 
verify_bitmap_size(uint64_t npages,uint64_t bitmap_size)1354 static int verify_bitmap_size(uint64_t npages, uint64_t bitmap_size)
1355 {
1356 	if (!npages || !bitmap_size || (bitmap_size > DIRTY_BITMAP_SIZE_MAX) ||
1357 	    (bitmap_size < DIRTY_BITMAP_BYTES(npages)))
1358 		return -EINVAL;
1359 
1360 	return 0;
1361 }
1362 
1363 /*
1364  * Notify VFIO drivers using vfio_register_emulated_iommu_dev() to invalidate
1365  * and unmap iovas within the range we're about to unmap. Drivers MUST unpin
1366  * pages in response to an invalidation.
1367  */
vfio_notify_dma_unmap(struct vfio_iommu * iommu,struct vfio_dma * dma)1368 static void vfio_notify_dma_unmap(struct vfio_iommu *iommu,
1369 				  struct vfio_dma *dma)
1370 {
1371 	struct vfio_device *device;
1372 
1373 	if (list_empty(&iommu->device_list))
1374 		return;
1375 
1376 	/*
1377 	 * The device is expected to call vfio_unpin_pages() for any IOVA it has
1378 	 * pinned within the range. Since vfio_unpin_pages() will eventually
1379 	 * call back down to this code and try to obtain the iommu->lock we must
1380 	 * drop it.
1381 	 */
1382 	mutex_lock(&iommu->device_list_lock);
1383 	mutex_unlock(&iommu->lock);
1384 
1385 	list_for_each_entry(device, &iommu->device_list, iommu_entry)
1386 		device->ops->dma_unmap(device, dma->iova, dma->size);
1387 
1388 	mutex_unlock(&iommu->device_list_lock);
1389 	mutex_lock(&iommu->lock);
1390 }
1391 
vfio_dma_do_unmap(struct vfio_iommu * iommu,struct vfio_iommu_type1_dma_unmap * unmap,struct vfio_bitmap * bitmap)1392 static int vfio_dma_do_unmap(struct vfio_iommu *iommu,
1393 			     struct vfio_iommu_type1_dma_unmap *unmap,
1394 			     struct vfio_bitmap *bitmap)
1395 {
1396 	struct vfio_dma *dma, *dma_last = NULL;
1397 	size_t unmapped = 0, pgsize;
1398 	int ret = -EINVAL, retries = 0;
1399 	unsigned long pgshift;
1400 	dma_addr_t iova = unmap->iova;
1401 	dma_addr_t iova_end;
1402 	size_t size = unmap->size;
1403 	bool unmap_all = unmap->flags & VFIO_DMA_UNMAP_FLAG_ALL;
1404 	bool invalidate_vaddr = unmap->flags & VFIO_DMA_UNMAP_FLAG_VADDR;
1405 	struct rb_node *n, *first_n;
1406 
1407 	mutex_lock(&iommu->lock);
1408 
1409 	/* Cannot update vaddr if mdev is present. */
1410 	if (invalidate_vaddr && !list_empty(&iommu->emulated_iommu_groups)) {
1411 		ret = -EBUSY;
1412 		goto unlock;
1413 	}
1414 
1415 	if (iova != unmap->iova || size != unmap->size) {
1416 		ret = -EOVERFLOW;
1417 		goto unlock;
1418 	}
1419 
1420 	pgshift = __ffs(iommu->pgsize_bitmap);
1421 	pgsize = (size_t)1 << pgshift;
1422 
1423 	if (iova & (pgsize - 1))
1424 		goto unlock;
1425 
1426 	if (unmap_all) {
1427 		if (iova || size)
1428 			goto unlock;
1429 		iova_end = ~(dma_addr_t)0;
1430 	} else {
1431 		if (!size || size & (pgsize - 1))
1432 			goto unlock;
1433 
1434 		if (check_add_overflow(iova, size - 1, &iova_end)) {
1435 			ret = -EOVERFLOW;
1436 			goto unlock;
1437 		}
1438 	}
1439 
1440 	/* When dirty tracking is enabled, allow only min supported pgsize */
1441 	if ((unmap->flags & VFIO_DMA_UNMAP_FLAG_GET_DIRTY_BITMAP) &&
1442 	    (!iommu->dirty_page_tracking || (bitmap->pgsize != pgsize))) {
1443 		goto unlock;
1444 	}
1445 
1446 	WARN_ON((pgsize - 1) & PAGE_MASK);
1447 again:
1448 	/*
1449 	 * vfio-iommu-type1 (v1) - User mappings were coalesced together to
1450 	 * avoid tracking individual mappings.  This means that the granularity
1451 	 * of the original mapping was lost and the user was allowed to attempt
1452 	 * to unmap any range.  Depending on the contiguousness of physical
1453 	 * memory and page sizes supported by the IOMMU, arbitrary unmaps may
1454 	 * or may not have worked.  We only guaranteed unmap granularity
1455 	 * matching the original mapping; even though it was untracked here,
1456 	 * the original mappings are reflected in IOMMU mappings.  This
1457 	 * resulted in a couple unusual behaviors.  First, if a range is not
1458 	 * able to be unmapped, ex. a set of 4k pages that was mapped as a
1459 	 * 2M hugepage into the IOMMU, the unmap ioctl returns success but with
1460 	 * a zero sized unmap.  Also, if an unmap request overlaps the first
1461 	 * address of a hugepage, the IOMMU will unmap the entire hugepage.
1462 	 * This also returns success and the returned unmap size reflects the
1463 	 * actual size unmapped.
1464 	 *
1465 	 * We attempt to maintain compatibility with this "v1" interface, but
1466 	 * we take control out of the hands of the IOMMU.  Therefore, an unmap
1467 	 * request offset from the beginning of the original mapping will
1468 	 * return success with zero sized unmap.  And an unmap request covering
1469 	 * the first iova of mapping will unmap the entire range.
1470 	 *
1471 	 * The v2 version of this interface intends to be more deterministic.
1472 	 * Unmap requests must fully cover previous mappings.  Multiple
1473 	 * mappings may still be unmaped by specifying large ranges, but there
1474 	 * must not be any previous mappings bisected by the range.  An error
1475 	 * will be returned if these conditions are not met.  The v2 interface
1476 	 * will only return success and a size of zero if there were no
1477 	 * mappings within the range.
1478 	 */
1479 	if (iommu->v2 && !unmap_all) {
1480 		dma = vfio_find_dma(iommu, iova, 1);
1481 		if (dma && dma->iova != iova)
1482 			goto unlock;
1483 
1484 		dma = vfio_find_dma(iommu, iova_end, 1);
1485 		if (dma && dma->iova + dma->size - 1 != iova_end)
1486 			goto unlock;
1487 	}
1488 
1489 	ret = 0;
1490 	n = first_n = vfio_find_dma_first_node(iommu, iova, iova_end);
1491 
1492 	while (n) {
1493 		dma = rb_entry(n, struct vfio_dma, node);
1494 		if (dma->iova > iova_end)
1495 			break;
1496 
1497 		if (!iommu->v2 && iova > dma->iova)
1498 			break;
1499 
1500 		if (invalidate_vaddr) {
1501 			if (dma->vaddr_invalid) {
1502 				struct rb_node *last_n = n;
1503 
1504 				for (n = first_n; n != last_n; n = rb_next(n)) {
1505 					dma = rb_entry(n,
1506 						       struct vfio_dma, node);
1507 					dma->vaddr_invalid = false;
1508 					iommu->vaddr_invalid_count--;
1509 				}
1510 				ret = -EINVAL;
1511 				unmapped = 0;
1512 				break;
1513 			}
1514 			dma->vaddr_invalid = true;
1515 			iommu->vaddr_invalid_count++;
1516 			unmapped += dma->size;
1517 			n = rb_next(n);
1518 			continue;
1519 		}
1520 
1521 		if (!RB_EMPTY_ROOT(&dma->pfn_list)) {
1522 			if (dma_last == dma) {
1523 				BUG_ON(++retries > 10);
1524 			} else {
1525 				dma_last = dma;
1526 				retries = 0;
1527 			}
1528 
1529 			vfio_notify_dma_unmap(iommu, dma);
1530 			goto again;
1531 		}
1532 
1533 		if (unmap->flags & VFIO_DMA_UNMAP_FLAG_GET_DIRTY_BITMAP) {
1534 			ret = update_user_bitmap(bitmap->data, iommu, dma,
1535 						 iova, pgsize);
1536 			if (ret)
1537 				break;
1538 		}
1539 
1540 		unmapped += dma->size;
1541 		n = rb_next(n);
1542 		vfio_remove_dma(iommu, dma);
1543 	}
1544 
1545 unlock:
1546 	mutex_unlock(&iommu->lock);
1547 
1548 	/* Report how much was unmapped */
1549 	unmap->size = unmapped;
1550 
1551 	return ret;
1552 }
1553 
vfio_iommu_map(struct vfio_iommu * iommu,dma_addr_t iova,unsigned long pfn,long npage,int prot)1554 static int vfio_iommu_map(struct vfio_iommu *iommu, dma_addr_t iova,
1555 			  unsigned long pfn, long npage, int prot)
1556 {
1557 	struct vfio_domain *d;
1558 	int ret;
1559 
1560 	list_for_each_entry(d, &iommu->domain_list, next) {
1561 		ret = iommu_map(d->domain, iova, (phys_addr_t)pfn << PAGE_SHIFT,
1562 				npage << PAGE_SHIFT, prot | IOMMU_CACHE,
1563 				GFP_KERNEL_ACCOUNT);
1564 		if (ret)
1565 			goto unwind;
1566 
1567 		cond_resched();
1568 	}
1569 
1570 	return 0;
1571 
1572 unwind:
1573 	list_for_each_entry_continue_reverse(d, &iommu->domain_list, next) {
1574 		iommu_unmap(d->domain, iova, npage << PAGE_SHIFT);
1575 		cond_resched();
1576 	}
1577 
1578 	return ret;
1579 }
1580 
vfio_pin_map_dma(struct vfio_iommu * iommu,struct vfio_dma * dma,size_t map_size)1581 static int vfio_pin_map_dma(struct vfio_iommu *iommu, struct vfio_dma *dma,
1582 			    size_t map_size)
1583 {
1584 	dma_addr_t iova = dma->iova;
1585 	unsigned long vaddr = dma->vaddr;
1586 	struct vfio_batch batch;
1587 	size_t size = map_size;
1588 	long npage;
1589 	unsigned long pfn, limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT;
1590 	int ret = 0;
1591 
1592 	vfio_batch_init(&batch);
1593 
1594 	while (size) {
1595 		/* Pin a contiguous chunk of memory */
1596 		npage = vfio_pin_pages_remote(dma, vaddr + dma->size,
1597 					      size >> PAGE_SHIFT, &pfn, limit,
1598 					      &batch);
1599 		if (npage <= 0) {
1600 			WARN_ON(!npage);
1601 			ret = (int)npage;
1602 			break;
1603 		}
1604 
1605 		/* Map it! */
1606 		ret = vfio_iommu_map(iommu, iova + dma->size, pfn, npage,
1607 				     dma->prot);
1608 		if (ret) {
1609 			vfio_unpin_pages_remote(dma, iova + dma->size, pfn,
1610 						npage, true);
1611 			vfio_batch_unpin(&batch, dma);
1612 			break;
1613 		}
1614 
1615 		size -= npage << PAGE_SHIFT;
1616 		dma->size += npage << PAGE_SHIFT;
1617 	}
1618 
1619 	vfio_batch_fini(&batch);
1620 	dma->iommu_mapped = true;
1621 
1622 	if (ret)
1623 		vfio_remove_dma(iommu, dma);
1624 
1625 	return ret;
1626 }
1627 
1628 /*
1629  * Check dma map request is within a valid iova range
1630  */
vfio_iommu_iova_dma_valid(struct vfio_iommu * iommu,dma_addr_t start,dma_addr_t end)1631 static bool vfio_iommu_iova_dma_valid(struct vfio_iommu *iommu,
1632 				      dma_addr_t start, dma_addr_t end)
1633 {
1634 	struct list_head *iova = &iommu->iova_list;
1635 	struct vfio_iova *node;
1636 
1637 	list_for_each_entry(node, iova, list) {
1638 		if (start >= node->start && end <= node->end)
1639 			return true;
1640 	}
1641 
1642 	/*
1643 	 * Check for list_empty() as well since a container with
1644 	 * a single mdev device will have an empty list.
1645 	 */
1646 	return list_empty(iova);
1647 }
1648 
vfio_change_dma_owner(struct vfio_dma * dma)1649 static int vfio_change_dma_owner(struct vfio_dma *dma)
1650 {
1651 	struct task_struct *task = current->group_leader;
1652 	struct mm_struct *mm = current->mm;
1653 	long npage = dma->locked_vm;
1654 	bool lock_cap;
1655 	int ret;
1656 
1657 	if (mm == dma->mm)
1658 		return 0;
1659 
1660 	lock_cap = capable(CAP_IPC_LOCK);
1661 	ret = mm_lock_acct(task, mm, lock_cap, npage);
1662 	if (ret)
1663 		return ret;
1664 
1665 	if (mmget_not_zero(dma->mm)) {
1666 		mm_lock_acct(dma->task, dma->mm, dma->lock_cap, -npage);
1667 		mmput(dma->mm);
1668 	}
1669 
1670 	if (dma->task != task) {
1671 		put_task_struct(dma->task);
1672 		dma->task = get_task_struct(task);
1673 	}
1674 	mmdrop(dma->mm);
1675 	dma->mm = mm;
1676 	mmgrab(dma->mm);
1677 	dma->lock_cap = lock_cap;
1678 	return 0;
1679 }
1680 
vfio_dma_do_map(struct vfio_iommu * iommu,struct vfio_iommu_type1_dma_map * map)1681 static int vfio_dma_do_map(struct vfio_iommu *iommu,
1682 			   struct vfio_iommu_type1_dma_map *map)
1683 {
1684 	bool set_vaddr = map->flags & VFIO_DMA_MAP_FLAG_VADDR;
1685 	dma_addr_t iova = map->iova;
1686 	dma_addr_t iova_end;
1687 	unsigned long vaddr = map->vaddr;
1688 	unsigned long vaddr_end;
1689 	size_t size = map->size;
1690 	int ret = 0, prot = 0;
1691 	size_t pgsize;
1692 	struct vfio_dma *dma;
1693 
1694 	/* Verify that none of our __u64 fields overflow */
1695 	if (map->size != size || map->vaddr != vaddr || map->iova != iova)
1696 		return -EOVERFLOW;
1697 
1698 	if (!size)
1699 		return -EINVAL;
1700 
1701 	if (check_add_overflow(iova, size - 1, &iova_end) ||
1702 	    check_add_overflow(vaddr, size - 1, &vaddr_end))
1703 		return -EOVERFLOW;
1704 
1705 	/* READ/WRITE from device perspective */
1706 	if (map->flags & VFIO_DMA_MAP_FLAG_WRITE)
1707 		prot |= IOMMU_WRITE;
1708 	if (map->flags & VFIO_DMA_MAP_FLAG_READ)
1709 		prot |= IOMMU_READ;
1710 
1711 	if ((prot && set_vaddr) || (!prot && !set_vaddr))
1712 		return -EINVAL;
1713 
1714 	mutex_lock(&iommu->lock);
1715 
1716 	pgsize = (size_t)1 << __ffs(iommu->pgsize_bitmap);
1717 
1718 	WARN_ON((pgsize - 1) & PAGE_MASK);
1719 
1720 	if ((size | iova | vaddr) & (pgsize - 1)) {
1721 		ret = -EINVAL;
1722 		goto out_unlock;
1723 	}
1724 
1725 	dma = vfio_find_dma(iommu, iova, size);
1726 	if (set_vaddr) {
1727 		if (!dma) {
1728 			ret = -ENOENT;
1729 		} else if (!dma->vaddr_invalid || dma->iova != iova ||
1730 			   dma->size != size) {
1731 			ret = -EINVAL;
1732 		} else {
1733 			ret = vfio_change_dma_owner(dma);
1734 			if (ret)
1735 				goto out_unlock;
1736 			dma->vaddr = vaddr;
1737 			dma->vaddr_invalid = false;
1738 			iommu->vaddr_invalid_count--;
1739 		}
1740 		goto out_unlock;
1741 	} else if (dma) {
1742 		ret = -EEXIST;
1743 		goto out_unlock;
1744 	}
1745 
1746 	if (!iommu->dma_avail) {
1747 		ret = -ENOSPC;
1748 		goto out_unlock;
1749 	}
1750 
1751 	if (!vfio_iommu_iova_dma_valid(iommu, iova, iova_end)) {
1752 		ret = -EINVAL;
1753 		goto out_unlock;
1754 	}
1755 
1756 	dma = kzalloc(sizeof(*dma), GFP_KERNEL);
1757 	if (!dma) {
1758 		ret = -ENOMEM;
1759 		goto out_unlock;
1760 	}
1761 
1762 	iommu->dma_avail--;
1763 	dma->iova = iova;
1764 	dma->vaddr = vaddr;
1765 	dma->prot = prot;
1766 
1767 	/*
1768 	 * We need to be able to both add to a task's locked memory and test
1769 	 * against the locked memory limit and we need to be able to do both
1770 	 * outside of this call path as pinning can be asynchronous via the
1771 	 * external interfaces for mdev devices.  RLIMIT_MEMLOCK requires a
1772 	 * task_struct. Save the group_leader so that all DMA tracking uses
1773 	 * the same task, to make debugging easier.  VM locked pages requires
1774 	 * an mm_struct, so grab the mm in case the task dies.
1775 	 */
1776 	get_task_struct(current->group_leader);
1777 	dma->task = current->group_leader;
1778 	dma->lock_cap = capable(CAP_IPC_LOCK);
1779 	dma->mm = current->mm;
1780 	mmgrab(dma->mm);
1781 
1782 	dma->pfn_list = RB_ROOT;
1783 
1784 	/* Insert zero-sized and grow as we map chunks of it */
1785 	vfio_link_dma(iommu, dma);
1786 
1787 	/* Don't pin and map if container doesn't contain IOMMU capable domain*/
1788 	if (list_empty(&iommu->domain_list))
1789 		dma->size = size;
1790 	else
1791 		ret = vfio_pin_map_dma(iommu, dma, size);
1792 
1793 	if (!ret && iommu->dirty_page_tracking) {
1794 		ret = vfio_dma_bitmap_alloc(dma, pgsize);
1795 		if (ret)
1796 			vfio_remove_dma(iommu, dma);
1797 	}
1798 
1799 out_unlock:
1800 	mutex_unlock(&iommu->lock);
1801 	return ret;
1802 }
1803 
vfio_iommu_replay(struct vfio_iommu * iommu,struct vfio_domain * domain)1804 static int vfio_iommu_replay(struct vfio_iommu *iommu,
1805 			     struct vfio_domain *domain)
1806 {
1807 	struct vfio_batch batch;
1808 	struct vfio_domain *d = NULL;
1809 	struct rb_node *n;
1810 	unsigned long limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT;
1811 	int ret;
1812 
1813 	/* Arbitrarily pick the first domain in the list for lookups */
1814 	if (!list_empty(&iommu->domain_list))
1815 		d = list_first_entry(&iommu->domain_list,
1816 				     struct vfio_domain, next);
1817 
1818 	vfio_batch_init(&batch);
1819 
1820 	n = rb_first(&iommu->dma_list);
1821 
1822 	for (; n; n = rb_next(n)) {
1823 		struct vfio_dma *dma;
1824 		size_t pos = 0;
1825 
1826 		dma = rb_entry(n, struct vfio_dma, node);
1827 
1828 		while (pos < dma->size) {
1829 			dma_addr_t iova = dma->iova + pos;
1830 			phys_addr_t phys;
1831 			size_t size;
1832 
1833 			if (dma->iommu_mapped) {
1834 				phys_addr_t p;
1835 				dma_addr_t i;
1836 
1837 				if (WARN_ON(!d)) { /* mapped w/o a domain?! */
1838 					ret = -EINVAL;
1839 					goto unwind;
1840 				}
1841 
1842 				phys = iommu_iova_to_phys(d->domain, iova);
1843 
1844 				if (WARN_ON(!phys)) {
1845 					pos += PAGE_SIZE;
1846 					continue;
1847 				}
1848 
1849 				size = PAGE_SIZE;
1850 				p = phys + size;
1851 				i = iova + size;
1852 				while (pos + size < dma->size &&
1853 				       p == iommu_iova_to_phys(d->domain, i)) {
1854 					size += PAGE_SIZE;
1855 					p += PAGE_SIZE;
1856 					i += PAGE_SIZE;
1857 				}
1858 			} else {
1859 				unsigned long pfn;
1860 				unsigned long vaddr = dma->vaddr + pos;
1861 				size_t n = dma->size - pos;
1862 				long npage;
1863 
1864 				npage = vfio_pin_pages_remote(dma, vaddr,
1865 							      n >> PAGE_SHIFT,
1866 							      &pfn, limit,
1867 							      &batch);
1868 				if (npage <= 0) {
1869 					WARN_ON(!npage);
1870 					ret = (int)npage;
1871 					goto unwind;
1872 				}
1873 
1874 				phys = pfn << PAGE_SHIFT;
1875 				size = npage << PAGE_SHIFT;
1876 			}
1877 
1878 			ret = iommu_map(domain->domain, iova, phys, size,
1879 					dma->prot | IOMMU_CACHE,
1880 					GFP_KERNEL_ACCOUNT);
1881 			if (ret) {
1882 				if (!dma->iommu_mapped) {
1883 					vfio_unpin_pages_remote(dma, iova,
1884 							phys >> PAGE_SHIFT,
1885 							size >> PAGE_SHIFT,
1886 							true);
1887 					vfio_batch_unpin(&batch, dma);
1888 				}
1889 				goto unwind;
1890 			}
1891 
1892 			pos += size;
1893 		}
1894 	}
1895 
1896 	/* All dmas are now mapped, defer to second tree walk for unwind */
1897 	for (n = rb_first(&iommu->dma_list); n; n = rb_next(n)) {
1898 		struct vfio_dma *dma = rb_entry(n, struct vfio_dma, node);
1899 
1900 		dma->iommu_mapped = true;
1901 	}
1902 
1903 	vfio_batch_fini(&batch);
1904 	return 0;
1905 
1906 unwind:
1907 	for (; n; n = rb_prev(n)) {
1908 		struct vfio_dma *dma = rb_entry(n, struct vfio_dma, node);
1909 		size_t pos = 0;
1910 
1911 		if (dma->iommu_mapped) {
1912 			iommu_unmap(domain->domain, dma->iova, dma->size);
1913 			continue;
1914 		}
1915 
1916 		while (pos < dma->size) {
1917 			dma_addr_t iova = dma->iova + pos;
1918 			phys_addr_t phys, p;
1919 			size_t size;
1920 			dma_addr_t i;
1921 
1922 			phys = iommu_iova_to_phys(domain->domain, iova);
1923 			if (!phys) {
1924 				pos += PAGE_SIZE;
1925 				continue;
1926 			}
1927 
1928 			size = PAGE_SIZE;
1929 			p = phys + size;
1930 			i = iova + size;
1931 			while (pos + size < dma->size &&
1932 			       p == iommu_iova_to_phys(domain->domain, i)) {
1933 				size += PAGE_SIZE;
1934 				p += PAGE_SIZE;
1935 				i += PAGE_SIZE;
1936 			}
1937 
1938 			iommu_unmap(domain->domain, iova, size);
1939 			vfio_unpin_pages_remote(dma, iova, phys >> PAGE_SHIFT,
1940 						size >> PAGE_SHIFT, true);
1941 		}
1942 	}
1943 
1944 	vfio_batch_fini(&batch);
1945 	return ret;
1946 }
1947 
find_iommu_group(struct vfio_domain * domain,struct iommu_group * iommu_group)1948 static struct vfio_iommu_group *find_iommu_group(struct vfio_domain *domain,
1949 						 struct iommu_group *iommu_group)
1950 {
1951 	struct vfio_iommu_group *g;
1952 
1953 	list_for_each_entry(g, &domain->group_list, next) {
1954 		if (g->iommu_group == iommu_group)
1955 			return g;
1956 	}
1957 
1958 	return NULL;
1959 }
1960 
1961 static struct vfio_iommu_group*
vfio_iommu_find_iommu_group(struct vfio_iommu * iommu,struct iommu_group * iommu_group)1962 vfio_iommu_find_iommu_group(struct vfio_iommu *iommu,
1963 			    struct iommu_group *iommu_group)
1964 {
1965 	struct vfio_iommu_group *group;
1966 	struct vfio_domain *domain;
1967 
1968 	list_for_each_entry(domain, &iommu->domain_list, next) {
1969 		group = find_iommu_group(domain, iommu_group);
1970 		if (group)
1971 			return group;
1972 	}
1973 
1974 	list_for_each_entry(group, &iommu->emulated_iommu_groups, next)
1975 		if (group->iommu_group == iommu_group)
1976 			return group;
1977 	return NULL;
1978 }
1979 
vfio_iommu_has_sw_msi(struct list_head * group_resv_regions,phys_addr_t * base)1980 static bool vfio_iommu_has_sw_msi(struct list_head *group_resv_regions,
1981 				  phys_addr_t *base)
1982 {
1983 	struct iommu_resv_region *region;
1984 	bool ret = false;
1985 
1986 	list_for_each_entry(region, group_resv_regions, list) {
1987 		/*
1988 		 * The presence of any 'real' MSI regions should take
1989 		 * precedence over the software-managed one if the
1990 		 * IOMMU driver happens to advertise both types.
1991 		 */
1992 		if (region->type == IOMMU_RESV_MSI) {
1993 			ret = false;
1994 			break;
1995 		}
1996 
1997 		if (region->type == IOMMU_RESV_SW_MSI) {
1998 			*base = region->start;
1999 			ret = true;
2000 		}
2001 	}
2002 
2003 	return ret;
2004 }
2005 
2006 /*
2007  * This is a helper function to insert an address range to iova list.
2008  * The list is initially created with a single entry corresponding to
2009  * the IOMMU domain geometry to which the device group is attached.
2010  * The list aperture gets modified when a new domain is added to the
2011  * container if the new aperture doesn't conflict with the current one
2012  * or with any existing dma mappings. The list is also modified to
2013  * exclude any reserved regions associated with the device group.
2014  */
vfio_iommu_iova_insert(struct list_head * head,dma_addr_t start,dma_addr_t end)2015 static int vfio_iommu_iova_insert(struct list_head *head,
2016 				  dma_addr_t start, dma_addr_t end)
2017 {
2018 	struct vfio_iova *region;
2019 
2020 	region = kmalloc(sizeof(*region), GFP_KERNEL);
2021 	if (!region)
2022 		return -ENOMEM;
2023 
2024 	INIT_LIST_HEAD(&region->list);
2025 	region->start = start;
2026 	region->end = end;
2027 
2028 	list_add_tail(&region->list, head);
2029 	return 0;
2030 }
2031 
2032 /*
2033  * Check the new iommu aperture conflicts with existing aper or with any
2034  * existing dma mappings.
2035  */
vfio_iommu_aper_conflict(struct vfio_iommu * iommu,dma_addr_t start,dma_addr_t end)2036 static bool vfio_iommu_aper_conflict(struct vfio_iommu *iommu,
2037 				     dma_addr_t start, dma_addr_t end)
2038 {
2039 	struct vfio_iova *first, *last;
2040 	struct list_head *iova = &iommu->iova_list;
2041 
2042 	if (list_empty(iova))
2043 		return false;
2044 
2045 	/* Disjoint sets, return conflict */
2046 	first = list_first_entry(iova, struct vfio_iova, list);
2047 	last = list_last_entry(iova, struct vfio_iova, list);
2048 	if (start > last->end || end < first->start)
2049 		return true;
2050 
2051 	/* Check for any existing dma mappings below the new start */
2052 	if (start > first->start) {
2053 		if (vfio_find_dma(iommu, first->start, start - first->start))
2054 			return true;
2055 	}
2056 
2057 	/* Check for any existing dma mappings beyond the new end */
2058 	if (end < last->end) {
2059 		if (vfio_find_dma(iommu, end + 1, last->end - end))
2060 			return true;
2061 	}
2062 
2063 	return false;
2064 }
2065 
2066 /*
2067  * Resize iommu iova aperture window. This is called only if the new
2068  * aperture has no conflict with existing aperture and dma mappings.
2069  */
vfio_iommu_aper_resize(struct list_head * iova,dma_addr_t start,dma_addr_t end)2070 static int vfio_iommu_aper_resize(struct list_head *iova,
2071 				  dma_addr_t start, dma_addr_t end)
2072 {
2073 	struct vfio_iova *node, *next;
2074 
2075 	if (list_empty(iova))
2076 		return vfio_iommu_iova_insert(iova, start, end);
2077 
2078 	/* Adjust iova list start */
2079 	list_for_each_entry_safe(node, next, iova, list) {
2080 		if (start < node->start)
2081 			break;
2082 		if (start >= node->start && start < node->end) {
2083 			node->start = start;
2084 			break;
2085 		}
2086 		/* Delete nodes before new start */
2087 		list_del(&node->list);
2088 		kfree(node);
2089 	}
2090 
2091 	/* Adjust iova list end */
2092 	list_for_each_entry_safe(node, next, iova, list) {
2093 		if (end > node->end)
2094 			continue;
2095 		if (end > node->start && end <= node->end) {
2096 			node->end = end;
2097 			continue;
2098 		}
2099 		/* Delete nodes after new end */
2100 		list_del(&node->list);
2101 		kfree(node);
2102 	}
2103 
2104 	return 0;
2105 }
2106 
2107 /*
2108  * Check reserved region conflicts with existing dma mappings
2109  */
vfio_iommu_resv_conflict(struct vfio_iommu * iommu,struct list_head * resv_regions)2110 static bool vfio_iommu_resv_conflict(struct vfio_iommu *iommu,
2111 				     struct list_head *resv_regions)
2112 {
2113 	struct iommu_resv_region *region;
2114 
2115 	/* Check for conflict with existing dma mappings */
2116 	list_for_each_entry(region, resv_regions, list) {
2117 		if (region->type == IOMMU_RESV_DIRECT_RELAXABLE)
2118 			continue;
2119 
2120 		if (vfio_find_dma(iommu, region->start, region->length))
2121 			return true;
2122 	}
2123 
2124 	return false;
2125 }
2126 
2127 /*
2128  * Check iova region overlap with  reserved regions and
2129  * exclude them from the iommu iova range
2130  */
vfio_iommu_resv_exclude(struct list_head * iova,struct list_head * resv_regions)2131 static int vfio_iommu_resv_exclude(struct list_head *iova,
2132 				   struct list_head *resv_regions)
2133 {
2134 	struct iommu_resv_region *resv;
2135 	struct vfio_iova *n, *next;
2136 
2137 	list_for_each_entry(resv, resv_regions, list) {
2138 		phys_addr_t start, end;
2139 
2140 		if (resv->type == IOMMU_RESV_DIRECT_RELAXABLE)
2141 			continue;
2142 
2143 		start = resv->start;
2144 		end = resv->start + resv->length - 1;
2145 
2146 		list_for_each_entry_safe(n, next, iova, list) {
2147 			int ret = 0;
2148 
2149 			/* No overlap */
2150 			if (start > n->end || end < n->start)
2151 				continue;
2152 			/*
2153 			 * Insert a new node if current node overlaps with the
2154 			 * reserve region to exclude that from valid iova range.
2155 			 * Note that, new node is inserted before the current
2156 			 * node and finally the current node is deleted keeping
2157 			 * the list updated and sorted.
2158 			 */
2159 			if (start > n->start)
2160 				ret = vfio_iommu_iova_insert(&n->list, n->start,
2161 							     start - 1);
2162 			if (!ret && end < n->end)
2163 				ret = vfio_iommu_iova_insert(&n->list, end + 1,
2164 							     n->end);
2165 			if (ret)
2166 				return ret;
2167 
2168 			list_del(&n->list);
2169 			kfree(n);
2170 		}
2171 	}
2172 
2173 	if (list_empty(iova))
2174 		return -EINVAL;
2175 
2176 	return 0;
2177 }
2178 
vfio_iommu_resv_free(struct list_head * resv_regions)2179 static void vfio_iommu_resv_free(struct list_head *resv_regions)
2180 {
2181 	struct iommu_resv_region *n, *next;
2182 
2183 	list_for_each_entry_safe(n, next, resv_regions, list) {
2184 		list_del(&n->list);
2185 		kfree(n);
2186 	}
2187 }
2188 
vfio_iommu_iova_free(struct list_head * iova)2189 static void vfio_iommu_iova_free(struct list_head *iova)
2190 {
2191 	struct vfio_iova *n, *next;
2192 
2193 	list_for_each_entry_safe(n, next, iova, list) {
2194 		list_del(&n->list);
2195 		kfree(n);
2196 	}
2197 }
2198 
vfio_iommu_iova_get_copy(struct vfio_iommu * iommu,struct list_head * iova_copy)2199 static int vfio_iommu_iova_get_copy(struct vfio_iommu *iommu,
2200 				    struct list_head *iova_copy)
2201 {
2202 	struct list_head *iova = &iommu->iova_list;
2203 	struct vfio_iova *n;
2204 	int ret;
2205 
2206 	list_for_each_entry(n, iova, list) {
2207 		ret = vfio_iommu_iova_insert(iova_copy, n->start, n->end);
2208 		if (ret)
2209 			goto out_free;
2210 	}
2211 
2212 	return 0;
2213 
2214 out_free:
2215 	vfio_iommu_iova_free(iova_copy);
2216 	return ret;
2217 }
2218 
vfio_iommu_iova_insert_copy(struct vfio_iommu * iommu,struct list_head * iova_copy)2219 static void vfio_iommu_iova_insert_copy(struct vfio_iommu *iommu,
2220 					struct list_head *iova_copy)
2221 {
2222 	struct list_head *iova = &iommu->iova_list;
2223 
2224 	vfio_iommu_iova_free(iova);
2225 
2226 	list_splice_tail(iova_copy, iova);
2227 }
2228 
vfio_iommu_domain_alloc(struct device * dev,void * data)2229 static int vfio_iommu_domain_alloc(struct device *dev, void *data)
2230 {
2231 	struct iommu_domain **domain = data;
2232 
2233 	*domain = iommu_paging_domain_alloc(dev);
2234 	return 1; /* Don't iterate */
2235 }
2236 
vfio_iommu_type1_attach_group(void * iommu_data,struct iommu_group * iommu_group,enum vfio_group_type type)2237 static int vfio_iommu_type1_attach_group(void *iommu_data,
2238 		struct iommu_group *iommu_group, enum vfio_group_type type)
2239 {
2240 	struct vfio_iommu *iommu = iommu_data;
2241 	struct vfio_iommu_group *group;
2242 	struct vfio_domain *domain, *d;
2243 	bool resv_msi;
2244 	phys_addr_t resv_msi_base = 0;
2245 	struct iommu_domain_geometry *geo;
2246 	LIST_HEAD(iova_copy);
2247 	LIST_HEAD(group_resv_regions);
2248 	int ret = -EBUSY;
2249 
2250 	mutex_lock(&iommu->lock);
2251 
2252 	/* Attach could require pinning, so disallow while vaddr is invalid. */
2253 	if (iommu->vaddr_invalid_count)
2254 		goto out_unlock;
2255 
2256 	/* Check for duplicates */
2257 	ret = -EINVAL;
2258 	if (vfio_iommu_find_iommu_group(iommu, iommu_group))
2259 		goto out_unlock;
2260 
2261 	ret = -ENOMEM;
2262 	group = kzalloc(sizeof(*group), GFP_KERNEL);
2263 	if (!group)
2264 		goto out_unlock;
2265 	group->iommu_group = iommu_group;
2266 
2267 	if (type == VFIO_EMULATED_IOMMU) {
2268 		list_add(&group->next, &iommu->emulated_iommu_groups);
2269 		/*
2270 		 * An emulated IOMMU group cannot dirty memory directly, it can
2271 		 * only use interfaces that provide dirty tracking.
2272 		 * The iommu scope can only be promoted with the addition of a
2273 		 * dirty tracking group.
2274 		 */
2275 		group->pinned_page_dirty_scope = true;
2276 		ret = 0;
2277 		goto out_unlock;
2278 	}
2279 
2280 	ret = -ENOMEM;
2281 	domain = kzalloc(sizeof(*domain), GFP_KERNEL);
2282 	if (!domain)
2283 		goto out_free_group;
2284 
2285 	/*
2286 	 * Going via the iommu_group iterator avoids races, and trivially gives
2287 	 * us a representative device for the IOMMU API call. We don't actually
2288 	 * want to iterate beyond the first device (if any).
2289 	 */
2290 	iommu_group_for_each_dev(iommu_group, &domain->domain,
2291 				 vfio_iommu_domain_alloc);
2292 	if (IS_ERR(domain->domain)) {
2293 		ret = PTR_ERR(domain->domain);
2294 		goto out_free_domain;
2295 	}
2296 
2297 	ret = iommu_attach_group(domain->domain, group->iommu_group);
2298 	if (ret)
2299 		goto out_domain;
2300 
2301 	/* Get aperture info */
2302 	geo = &domain->domain->geometry;
2303 	if (vfio_iommu_aper_conflict(iommu, geo->aperture_start,
2304 				     geo->aperture_end)) {
2305 		ret = -EINVAL;
2306 		goto out_detach;
2307 	}
2308 
2309 	ret = iommu_get_group_resv_regions(iommu_group, &group_resv_regions);
2310 	if (ret)
2311 		goto out_detach;
2312 
2313 	if (vfio_iommu_resv_conflict(iommu, &group_resv_regions)) {
2314 		ret = -EINVAL;
2315 		goto out_detach;
2316 	}
2317 
2318 	/*
2319 	 * We don't want to work on the original iova list as the list
2320 	 * gets modified and in case of failure we have to retain the
2321 	 * original list. Get a copy here.
2322 	 */
2323 	ret = vfio_iommu_iova_get_copy(iommu, &iova_copy);
2324 	if (ret)
2325 		goto out_detach;
2326 
2327 	ret = vfio_iommu_aper_resize(&iova_copy, geo->aperture_start,
2328 				     geo->aperture_end);
2329 	if (ret)
2330 		goto out_detach;
2331 
2332 	ret = vfio_iommu_resv_exclude(&iova_copy, &group_resv_regions);
2333 	if (ret)
2334 		goto out_detach;
2335 
2336 	resv_msi = vfio_iommu_has_sw_msi(&group_resv_regions, &resv_msi_base);
2337 
2338 	INIT_LIST_HEAD(&domain->group_list);
2339 	list_add(&group->next, &domain->group_list);
2340 
2341 	if (!allow_unsafe_interrupts &&
2342 	    !iommu_group_has_isolated_msi(iommu_group)) {
2343 		pr_warn("%s: No interrupt remapping support.  Use the module param \"allow_unsafe_interrupts\" to enable VFIO IOMMU support on this platform\n",
2344 		       __func__);
2345 		ret = -EPERM;
2346 		goto out_detach;
2347 	}
2348 
2349 	/*
2350 	 * If the IOMMU can block non-coherent operations (ie PCIe TLPs with
2351 	 * no-snoop set) then VFIO always turns this feature on because on Intel
2352 	 * platforms it optimizes KVM to disable wbinvd emulation.
2353 	 */
2354 	if (domain->domain->ops->enforce_cache_coherency)
2355 		domain->enforce_cache_coherency =
2356 			domain->domain->ops->enforce_cache_coherency(
2357 				domain->domain);
2358 
2359 	/*
2360 	 * Try to match an existing compatible domain.  We don't want to
2361 	 * preclude an IOMMU driver supporting multiple bus_types and being
2362 	 * able to include different bus_types in the same IOMMU domain, so
2363 	 * we test whether the domains use the same iommu_ops rather than
2364 	 * testing if they're on the same bus_type.
2365 	 */
2366 	list_for_each_entry(d, &iommu->domain_list, next) {
2367 		if (d->domain->ops == domain->domain->ops &&
2368 		    d->enforce_cache_coherency ==
2369 			    domain->enforce_cache_coherency) {
2370 			iommu_detach_group(domain->domain, group->iommu_group);
2371 			if (!iommu_attach_group(d->domain,
2372 						group->iommu_group)) {
2373 				list_add(&group->next, &d->group_list);
2374 				iommu_domain_free(domain->domain);
2375 				kfree(domain);
2376 				goto done;
2377 			}
2378 
2379 			ret = iommu_attach_group(domain->domain,
2380 						 group->iommu_group);
2381 			if (ret)
2382 				goto out_domain;
2383 		}
2384 	}
2385 
2386 	/* replay mappings on new domains */
2387 	ret = vfio_iommu_replay(iommu, domain);
2388 	if (ret)
2389 		goto out_detach;
2390 
2391 	if (resv_msi) {
2392 		ret = iommu_get_msi_cookie(domain->domain, resv_msi_base);
2393 		if (ret && ret != -ENODEV)
2394 			goto out_detach;
2395 	}
2396 
2397 	list_add(&domain->next, &iommu->domain_list);
2398 	vfio_update_pgsize_bitmap(iommu);
2399 done:
2400 	/* Delete the old one and insert new iova list */
2401 	vfio_iommu_iova_insert_copy(iommu, &iova_copy);
2402 
2403 	/*
2404 	 * An iommu backed group can dirty memory directly and therefore
2405 	 * demotes the iommu scope until it declares itself dirty tracking
2406 	 * capable via the page pinning interface.
2407 	 */
2408 	iommu->num_non_pinned_groups++;
2409 	mutex_unlock(&iommu->lock);
2410 	vfio_iommu_resv_free(&group_resv_regions);
2411 
2412 	return 0;
2413 
2414 out_detach:
2415 	iommu_detach_group(domain->domain, group->iommu_group);
2416 out_domain:
2417 	iommu_domain_free(domain->domain);
2418 	vfio_iommu_iova_free(&iova_copy);
2419 	vfio_iommu_resv_free(&group_resv_regions);
2420 out_free_domain:
2421 	kfree(domain);
2422 out_free_group:
2423 	kfree(group);
2424 out_unlock:
2425 	mutex_unlock(&iommu->lock);
2426 	return ret;
2427 }
2428 
vfio_iommu_unmap_unpin_all(struct vfio_iommu * iommu)2429 static void vfio_iommu_unmap_unpin_all(struct vfio_iommu *iommu)
2430 {
2431 	struct rb_node *node;
2432 
2433 	while ((node = rb_first(&iommu->dma_list)))
2434 		vfio_remove_dma(iommu, rb_entry(node, struct vfio_dma, node));
2435 }
2436 
vfio_iommu_unmap_unpin_reaccount(struct vfio_iommu * iommu)2437 static void vfio_iommu_unmap_unpin_reaccount(struct vfio_iommu *iommu)
2438 {
2439 	struct rb_node *n, *p;
2440 
2441 	n = rb_first(&iommu->dma_list);
2442 	for (; n; n = rb_next(n)) {
2443 		struct vfio_dma *dma;
2444 		long locked = 0, unlocked = 0;
2445 
2446 		dma = rb_entry(n, struct vfio_dma, node);
2447 		unlocked += vfio_unmap_unpin(iommu, dma, false);
2448 		p = rb_first(&dma->pfn_list);
2449 		for (; p; p = rb_next(p)) {
2450 			struct vfio_pfn *vpfn = rb_entry(p, struct vfio_pfn,
2451 							 node);
2452 
2453 			if (!is_invalid_reserved_pfn(vpfn->pfn))
2454 				locked++;
2455 		}
2456 		vfio_lock_acct(dma, locked - unlocked, true);
2457 	}
2458 }
2459 
2460 /*
2461  * Called when a domain is removed in detach. It is possible that
2462  * the removed domain decided the iova aperture window. Modify the
2463  * iova aperture with the smallest window among existing domains.
2464  */
vfio_iommu_aper_expand(struct vfio_iommu * iommu,struct list_head * iova_copy)2465 static void vfio_iommu_aper_expand(struct vfio_iommu *iommu,
2466 				   struct list_head *iova_copy)
2467 {
2468 	struct vfio_domain *domain;
2469 	struct vfio_iova *node;
2470 	dma_addr_t start = 0;
2471 	dma_addr_t end = (dma_addr_t)~0;
2472 
2473 	if (list_empty(iova_copy))
2474 		return;
2475 
2476 	list_for_each_entry(domain, &iommu->domain_list, next) {
2477 		struct iommu_domain_geometry *geo = &domain->domain->geometry;
2478 
2479 		if (geo->aperture_start > start)
2480 			start = geo->aperture_start;
2481 		if (geo->aperture_end < end)
2482 			end = geo->aperture_end;
2483 	}
2484 
2485 	/* Modify aperture limits. The new aper is either same or bigger */
2486 	node = list_first_entry(iova_copy, struct vfio_iova, list);
2487 	node->start = start;
2488 	node = list_last_entry(iova_copy, struct vfio_iova, list);
2489 	node->end = end;
2490 }
2491 
2492 /*
2493  * Called when a group is detached. The reserved regions for that
2494  * group can be part of valid iova now. But since reserved regions
2495  * may be duplicated among groups, populate the iova valid regions
2496  * list again.
2497  */
vfio_iommu_resv_refresh(struct vfio_iommu * iommu,struct list_head * iova_copy)2498 static int vfio_iommu_resv_refresh(struct vfio_iommu *iommu,
2499 				   struct list_head *iova_copy)
2500 {
2501 	struct vfio_domain *d;
2502 	struct vfio_iommu_group *g;
2503 	struct vfio_iova *node;
2504 	dma_addr_t start, end;
2505 	LIST_HEAD(resv_regions);
2506 	int ret;
2507 
2508 	if (list_empty(iova_copy))
2509 		return -EINVAL;
2510 
2511 	list_for_each_entry(d, &iommu->domain_list, next) {
2512 		list_for_each_entry(g, &d->group_list, next) {
2513 			ret = iommu_get_group_resv_regions(g->iommu_group,
2514 							   &resv_regions);
2515 			if (ret)
2516 				goto done;
2517 		}
2518 	}
2519 
2520 	node = list_first_entry(iova_copy, struct vfio_iova, list);
2521 	start = node->start;
2522 	node = list_last_entry(iova_copy, struct vfio_iova, list);
2523 	end = node->end;
2524 
2525 	/* purge the iova list and create new one */
2526 	vfio_iommu_iova_free(iova_copy);
2527 
2528 	ret = vfio_iommu_aper_resize(iova_copy, start, end);
2529 	if (ret)
2530 		goto done;
2531 
2532 	/* Exclude current reserved regions from iova ranges */
2533 	ret = vfio_iommu_resv_exclude(iova_copy, &resv_regions);
2534 done:
2535 	vfio_iommu_resv_free(&resv_regions);
2536 	return ret;
2537 }
2538 
vfio_iommu_type1_detach_group(void * iommu_data,struct iommu_group * iommu_group)2539 static void vfio_iommu_type1_detach_group(void *iommu_data,
2540 					  struct iommu_group *iommu_group)
2541 {
2542 	struct vfio_iommu *iommu = iommu_data;
2543 	struct vfio_domain *domain;
2544 	struct vfio_iommu_group *group;
2545 	bool update_dirty_scope = false;
2546 	LIST_HEAD(iova_copy);
2547 
2548 	mutex_lock(&iommu->lock);
2549 	list_for_each_entry(group, &iommu->emulated_iommu_groups, next) {
2550 		if (group->iommu_group != iommu_group)
2551 			continue;
2552 		update_dirty_scope = !group->pinned_page_dirty_scope;
2553 		list_del(&group->next);
2554 		kfree(group);
2555 
2556 		if (list_empty(&iommu->emulated_iommu_groups) &&
2557 		    list_empty(&iommu->domain_list)) {
2558 			WARN_ON(!list_empty(&iommu->device_list));
2559 			vfio_iommu_unmap_unpin_all(iommu);
2560 		}
2561 		goto detach_group_done;
2562 	}
2563 
2564 	/*
2565 	 * Get a copy of iova list. This will be used to update
2566 	 * and to replace the current one later. Please note that
2567 	 * we will leave the original list as it is if update fails.
2568 	 */
2569 	vfio_iommu_iova_get_copy(iommu, &iova_copy);
2570 
2571 	list_for_each_entry(domain, &iommu->domain_list, next) {
2572 		group = find_iommu_group(domain, iommu_group);
2573 		if (!group)
2574 			continue;
2575 
2576 		iommu_detach_group(domain->domain, group->iommu_group);
2577 		update_dirty_scope = !group->pinned_page_dirty_scope;
2578 		list_del(&group->next);
2579 		kfree(group);
2580 		/*
2581 		 * Group ownership provides privilege, if the group list is
2582 		 * empty, the domain goes away. If it's the last domain with
2583 		 * iommu and external domain doesn't exist, then all the
2584 		 * mappings go away too. If it's the last domain with iommu and
2585 		 * external domain exist, update accounting
2586 		 */
2587 		if (list_empty(&domain->group_list)) {
2588 			if (list_is_singular(&iommu->domain_list)) {
2589 				if (list_empty(&iommu->emulated_iommu_groups)) {
2590 					WARN_ON(!list_empty(
2591 						&iommu->device_list));
2592 					vfio_iommu_unmap_unpin_all(iommu);
2593 				} else {
2594 					vfio_iommu_unmap_unpin_reaccount(iommu);
2595 				}
2596 			}
2597 			iommu_domain_free(domain->domain);
2598 			list_del(&domain->next);
2599 			kfree(domain);
2600 			vfio_iommu_aper_expand(iommu, &iova_copy);
2601 			vfio_update_pgsize_bitmap(iommu);
2602 		}
2603 		break;
2604 	}
2605 
2606 	if (!vfio_iommu_resv_refresh(iommu, &iova_copy))
2607 		vfio_iommu_iova_insert_copy(iommu, &iova_copy);
2608 	else
2609 		vfio_iommu_iova_free(&iova_copy);
2610 
2611 detach_group_done:
2612 	/*
2613 	 * Removal of a group without dirty tracking may allow the iommu scope
2614 	 * to be promoted.
2615 	 */
2616 	if (update_dirty_scope) {
2617 		iommu->num_non_pinned_groups--;
2618 		if (iommu->dirty_page_tracking)
2619 			vfio_iommu_populate_bitmap_full(iommu);
2620 	}
2621 	mutex_unlock(&iommu->lock);
2622 }
2623 
vfio_iommu_type1_open(unsigned long arg)2624 static void *vfio_iommu_type1_open(unsigned long arg)
2625 {
2626 	struct vfio_iommu *iommu;
2627 
2628 	iommu = kzalloc(sizeof(*iommu), GFP_KERNEL);
2629 	if (!iommu)
2630 		return ERR_PTR(-ENOMEM);
2631 
2632 	switch (arg) {
2633 	case VFIO_TYPE1_IOMMU:
2634 		break;
2635 	case __VFIO_RESERVED_TYPE1_NESTING_IOMMU:
2636 	case VFIO_TYPE1v2_IOMMU:
2637 		iommu->v2 = true;
2638 		break;
2639 	default:
2640 		kfree(iommu);
2641 		return ERR_PTR(-EINVAL);
2642 	}
2643 
2644 	INIT_LIST_HEAD(&iommu->domain_list);
2645 	INIT_LIST_HEAD(&iommu->iova_list);
2646 	iommu->dma_list = RB_ROOT;
2647 	iommu->dma_avail = dma_entry_limit;
2648 	mutex_init(&iommu->lock);
2649 	mutex_init(&iommu->device_list_lock);
2650 	INIT_LIST_HEAD(&iommu->device_list);
2651 	iommu->pgsize_bitmap = PAGE_MASK;
2652 	INIT_LIST_HEAD(&iommu->emulated_iommu_groups);
2653 
2654 	return iommu;
2655 }
2656 
vfio_release_domain(struct vfio_domain * domain)2657 static void vfio_release_domain(struct vfio_domain *domain)
2658 {
2659 	struct vfio_iommu_group *group, *group_tmp;
2660 
2661 	list_for_each_entry_safe(group, group_tmp,
2662 				 &domain->group_list, next) {
2663 		iommu_detach_group(domain->domain, group->iommu_group);
2664 		list_del(&group->next);
2665 		kfree(group);
2666 	}
2667 
2668 	iommu_domain_free(domain->domain);
2669 }
2670 
vfio_iommu_type1_release(void * iommu_data)2671 static void vfio_iommu_type1_release(void *iommu_data)
2672 {
2673 	struct vfio_iommu *iommu = iommu_data;
2674 	struct vfio_domain *domain, *domain_tmp;
2675 	struct vfio_iommu_group *group, *next_group;
2676 
2677 	list_for_each_entry_safe(group, next_group,
2678 			&iommu->emulated_iommu_groups, next) {
2679 		list_del(&group->next);
2680 		kfree(group);
2681 	}
2682 
2683 	vfio_iommu_unmap_unpin_all(iommu);
2684 
2685 	list_for_each_entry_safe(domain, domain_tmp,
2686 				 &iommu->domain_list, next) {
2687 		vfio_release_domain(domain);
2688 		list_del(&domain->next);
2689 		kfree(domain);
2690 	}
2691 
2692 	vfio_iommu_iova_free(&iommu->iova_list);
2693 
2694 	kfree(iommu);
2695 }
2696 
vfio_domains_have_enforce_cache_coherency(struct vfio_iommu * iommu)2697 static int vfio_domains_have_enforce_cache_coherency(struct vfio_iommu *iommu)
2698 {
2699 	struct vfio_domain *domain;
2700 	int ret = 1;
2701 
2702 	mutex_lock(&iommu->lock);
2703 	list_for_each_entry(domain, &iommu->domain_list, next) {
2704 		if (!(domain->enforce_cache_coherency)) {
2705 			ret = 0;
2706 			break;
2707 		}
2708 	}
2709 	mutex_unlock(&iommu->lock);
2710 
2711 	return ret;
2712 }
2713 
vfio_iommu_has_emulated(struct vfio_iommu * iommu)2714 static bool vfio_iommu_has_emulated(struct vfio_iommu *iommu)
2715 {
2716 	bool ret;
2717 
2718 	mutex_lock(&iommu->lock);
2719 	ret = !list_empty(&iommu->emulated_iommu_groups);
2720 	mutex_unlock(&iommu->lock);
2721 	return ret;
2722 }
2723 
vfio_iommu_type1_check_extension(struct vfio_iommu * iommu,unsigned long arg)2724 static int vfio_iommu_type1_check_extension(struct vfio_iommu *iommu,
2725 					    unsigned long arg)
2726 {
2727 	switch (arg) {
2728 	case VFIO_TYPE1_IOMMU:
2729 	case VFIO_TYPE1v2_IOMMU:
2730 	case VFIO_UNMAP_ALL:
2731 		return 1;
2732 	case VFIO_UPDATE_VADDR:
2733 		/*
2734 		 * Disable this feature if mdevs are present.  They cannot
2735 		 * safely pin/unpin/rw while vaddrs are being updated.
2736 		 */
2737 		return iommu && !vfio_iommu_has_emulated(iommu);
2738 	case VFIO_DMA_CC_IOMMU:
2739 		if (!iommu)
2740 			return 0;
2741 		return vfio_domains_have_enforce_cache_coherency(iommu);
2742 	default:
2743 		return 0;
2744 	}
2745 }
2746 
vfio_iommu_iova_add_cap(struct vfio_info_cap * caps,struct vfio_iommu_type1_info_cap_iova_range * cap_iovas,size_t size)2747 static int vfio_iommu_iova_add_cap(struct vfio_info_cap *caps,
2748 		 struct vfio_iommu_type1_info_cap_iova_range *cap_iovas,
2749 		 size_t size)
2750 {
2751 	struct vfio_info_cap_header *header;
2752 	struct vfio_iommu_type1_info_cap_iova_range *iova_cap;
2753 
2754 	header = vfio_info_cap_add(caps, size,
2755 				   VFIO_IOMMU_TYPE1_INFO_CAP_IOVA_RANGE, 1);
2756 	if (IS_ERR(header))
2757 		return PTR_ERR(header);
2758 
2759 	iova_cap = container_of(header,
2760 				struct vfio_iommu_type1_info_cap_iova_range,
2761 				header);
2762 	iova_cap->nr_iovas = cap_iovas->nr_iovas;
2763 	memcpy(iova_cap->iova_ranges, cap_iovas->iova_ranges,
2764 	       cap_iovas->nr_iovas * sizeof(*cap_iovas->iova_ranges));
2765 	return 0;
2766 }
2767 
vfio_iommu_iova_build_caps(struct vfio_iommu * iommu,struct vfio_info_cap * caps)2768 static int vfio_iommu_iova_build_caps(struct vfio_iommu *iommu,
2769 				      struct vfio_info_cap *caps)
2770 {
2771 	struct vfio_iommu_type1_info_cap_iova_range *cap_iovas;
2772 	struct vfio_iova *iova;
2773 	size_t size;
2774 	int iovas = 0, i = 0, ret;
2775 
2776 	list_for_each_entry(iova, &iommu->iova_list, list)
2777 		iovas++;
2778 
2779 	if (!iovas) {
2780 		/*
2781 		 * Return 0 as a container with a single mdev device
2782 		 * will have an empty list
2783 		 */
2784 		return 0;
2785 	}
2786 
2787 	size = struct_size(cap_iovas, iova_ranges, iovas);
2788 
2789 	cap_iovas = kzalloc(size, GFP_KERNEL);
2790 	if (!cap_iovas)
2791 		return -ENOMEM;
2792 
2793 	cap_iovas->nr_iovas = iovas;
2794 
2795 	list_for_each_entry(iova, &iommu->iova_list, list) {
2796 		cap_iovas->iova_ranges[i].start = iova->start;
2797 		cap_iovas->iova_ranges[i].end = iova->end;
2798 		i++;
2799 	}
2800 
2801 	ret = vfio_iommu_iova_add_cap(caps, cap_iovas, size);
2802 
2803 	kfree(cap_iovas);
2804 	return ret;
2805 }
2806 
vfio_iommu_migration_build_caps(struct vfio_iommu * iommu,struct vfio_info_cap * caps)2807 static int vfio_iommu_migration_build_caps(struct vfio_iommu *iommu,
2808 					   struct vfio_info_cap *caps)
2809 {
2810 	struct vfio_iommu_type1_info_cap_migration cap_mig = {};
2811 
2812 	cap_mig.header.id = VFIO_IOMMU_TYPE1_INFO_CAP_MIGRATION;
2813 	cap_mig.header.version = 1;
2814 
2815 	cap_mig.flags = 0;
2816 	/* support minimum pgsize */
2817 	cap_mig.pgsize_bitmap = (size_t)1 << __ffs(iommu->pgsize_bitmap);
2818 	cap_mig.max_dirty_bitmap_size = DIRTY_BITMAP_SIZE_MAX;
2819 
2820 	return vfio_info_add_capability(caps, &cap_mig.header, sizeof(cap_mig));
2821 }
2822 
vfio_iommu_dma_avail_build_caps(struct vfio_iommu * iommu,struct vfio_info_cap * caps)2823 static int vfio_iommu_dma_avail_build_caps(struct vfio_iommu *iommu,
2824 					   struct vfio_info_cap *caps)
2825 {
2826 	struct vfio_iommu_type1_info_dma_avail cap_dma_avail;
2827 
2828 	cap_dma_avail.header.id = VFIO_IOMMU_TYPE1_INFO_DMA_AVAIL;
2829 	cap_dma_avail.header.version = 1;
2830 
2831 	cap_dma_avail.avail = iommu->dma_avail;
2832 
2833 	return vfio_info_add_capability(caps, &cap_dma_avail.header,
2834 					sizeof(cap_dma_avail));
2835 }
2836 
vfio_iommu_type1_get_info(struct vfio_iommu * iommu,unsigned long arg)2837 static int vfio_iommu_type1_get_info(struct vfio_iommu *iommu,
2838 				     unsigned long arg)
2839 {
2840 	struct vfio_iommu_type1_info info = {};
2841 	unsigned long minsz;
2842 	struct vfio_info_cap caps = { .buf = NULL, .size = 0 };
2843 	int ret;
2844 
2845 	minsz = offsetofend(struct vfio_iommu_type1_info, iova_pgsizes);
2846 
2847 	if (copy_from_user(&info, (void __user *)arg, minsz))
2848 		return -EFAULT;
2849 
2850 	if (info.argsz < minsz)
2851 		return -EINVAL;
2852 
2853 	minsz = min_t(size_t, info.argsz, sizeof(info));
2854 
2855 	mutex_lock(&iommu->lock);
2856 	info.flags = VFIO_IOMMU_INFO_PGSIZES;
2857 
2858 	info.iova_pgsizes = iommu->pgsize_bitmap;
2859 
2860 	ret = vfio_iommu_migration_build_caps(iommu, &caps);
2861 
2862 	if (!ret)
2863 		ret = vfio_iommu_dma_avail_build_caps(iommu, &caps);
2864 
2865 	if (!ret)
2866 		ret = vfio_iommu_iova_build_caps(iommu, &caps);
2867 
2868 	mutex_unlock(&iommu->lock);
2869 
2870 	if (ret)
2871 		return ret;
2872 
2873 	if (caps.size) {
2874 		info.flags |= VFIO_IOMMU_INFO_CAPS;
2875 
2876 		if (info.argsz < sizeof(info) + caps.size) {
2877 			info.argsz = sizeof(info) + caps.size;
2878 		} else {
2879 			vfio_info_cap_shift(&caps, sizeof(info));
2880 			if (copy_to_user((void __user *)arg +
2881 					sizeof(info), caps.buf,
2882 					caps.size)) {
2883 				kfree(caps.buf);
2884 				return -EFAULT;
2885 			}
2886 			info.cap_offset = sizeof(info);
2887 		}
2888 
2889 		kfree(caps.buf);
2890 	}
2891 
2892 	return copy_to_user((void __user *)arg, &info, minsz) ?
2893 			-EFAULT : 0;
2894 }
2895 
vfio_iommu_type1_map_dma(struct vfio_iommu * iommu,unsigned long arg)2896 static int vfio_iommu_type1_map_dma(struct vfio_iommu *iommu,
2897 				    unsigned long arg)
2898 {
2899 	struct vfio_iommu_type1_dma_map map;
2900 	unsigned long minsz;
2901 	uint32_t mask = VFIO_DMA_MAP_FLAG_READ | VFIO_DMA_MAP_FLAG_WRITE |
2902 			VFIO_DMA_MAP_FLAG_VADDR;
2903 
2904 	minsz = offsetofend(struct vfio_iommu_type1_dma_map, size);
2905 
2906 	if (copy_from_user(&map, (void __user *)arg, minsz))
2907 		return -EFAULT;
2908 
2909 	if (map.argsz < minsz || map.flags & ~mask)
2910 		return -EINVAL;
2911 
2912 	return vfio_dma_do_map(iommu, &map);
2913 }
2914 
vfio_iommu_type1_unmap_dma(struct vfio_iommu * iommu,unsigned long arg)2915 static int vfio_iommu_type1_unmap_dma(struct vfio_iommu *iommu,
2916 				      unsigned long arg)
2917 {
2918 	struct vfio_iommu_type1_dma_unmap unmap;
2919 	struct vfio_bitmap bitmap = { 0 };
2920 	uint32_t mask = VFIO_DMA_UNMAP_FLAG_GET_DIRTY_BITMAP |
2921 			VFIO_DMA_UNMAP_FLAG_VADDR |
2922 			VFIO_DMA_UNMAP_FLAG_ALL;
2923 	unsigned long minsz;
2924 	int ret;
2925 
2926 	minsz = offsetofend(struct vfio_iommu_type1_dma_unmap, size);
2927 
2928 	if (copy_from_user(&unmap, (void __user *)arg, minsz))
2929 		return -EFAULT;
2930 
2931 	if (unmap.argsz < minsz || unmap.flags & ~mask)
2932 		return -EINVAL;
2933 
2934 	if ((unmap.flags & VFIO_DMA_UNMAP_FLAG_GET_DIRTY_BITMAP) &&
2935 	    (unmap.flags & (VFIO_DMA_UNMAP_FLAG_ALL |
2936 			    VFIO_DMA_UNMAP_FLAG_VADDR)))
2937 		return -EINVAL;
2938 
2939 	if (unmap.flags & VFIO_DMA_UNMAP_FLAG_GET_DIRTY_BITMAP) {
2940 		unsigned long pgshift;
2941 
2942 		if (unmap.argsz < (minsz + sizeof(bitmap)))
2943 			return -EINVAL;
2944 
2945 		if (copy_from_user(&bitmap,
2946 				   (void __user *)(arg + minsz),
2947 				   sizeof(bitmap)))
2948 			return -EFAULT;
2949 
2950 		if (!access_ok((void __user *)bitmap.data, bitmap.size))
2951 			return -EINVAL;
2952 
2953 		pgshift = __ffs(bitmap.pgsize);
2954 		ret = verify_bitmap_size(unmap.size >> pgshift,
2955 					 bitmap.size);
2956 		if (ret)
2957 			return ret;
2958 	}
2959 
2960 	ret = vfio_dma_do_unmap(iommu, &unmap, &bitmap);
2961 	if (ret)
2962 		return ret;
2963 
2964 	return copy_to_user((void __user *)arg, &unmap, minsz) ?
2965 			-EFAULT : 0;
2966 }
2967 
vfio_iommu_type1_dirty_pages(struct vfio_iommu * iommu,unsigned long arg)2968 static int vfio_iommu_type1_dirty_pages(struct vfio_iommu *iommu,
2969 					unsigned long arg)
2970 {
2971 	struct vfio_iommu_type1_dirty_bitmap dirty;
2972 	uint32_t mask = VFIO_IOMMU_DIRTY_PAGES_FLAG_START |
2973 			VFIO_IOMMU_DIRTY_PAGES_FLAG_STOP |
2974 			VFIO_IOMMU_DIRTY_PAGES_FLAG_GET_BITMAP;
2975 	unsigned long minsz;
2976 	int ret = 0;
2977 
2978 	if (!iommu->v2)
2979 		return -EACCES;
2980 
2981 	minsz = offsetofend(struct vfio_iommu_type1_dirty_bitmap, flags);
2982 
2983 	if (copy_from_user(&dirty, (void __user *)arg, minsz))
2984 		return -EFAULT;
2985 
2986 	if (dirty.argsz < minsz || dirty.flags & ~mask)
2987 		return -EINVAL;
2988 
2989 	/* only one flag should be set at a time */
2990 	if (__ffs(dirty.flags) != __fls(dirty.flags))
2991 		return -EINVAL;
2992 
2993 	if (dirty.flags & VFIO_IOMMU_DIRTY_PAGES_FLAG_START) {
2994 		size_t pgsize;
2995 
2996 		mutex_lock(&iommu->lock);
2997 		pgsize = 1 << __ffs(iommu->pgsize_bitmap);
2998 		if (!iommu->dirty_page_tracking) {
2999 			ret = vfio_dma_bitmap_alloc_all(iommu, pgsize);
3000 			if (!ret)
3001 				iommu->dirty_page_tracking = true;
3002 		}
3003 		mutex_unlock(&iommu->lock);
3004 		return ret;
3005 	} else if (dirty.flags & VFIO_IOMMU_DIRTY_PAGES_FLAG_STOP) {
3006 		mutex_lock(&iommu->lock);
3007 		if (iommu->dirty_page_tracking) {
3008 			iommu->dirty_page_tracking = false;
3009 			vfio_dma_bitmap_free_all(iommu);
3010 		}
3011 		mutex_unlock(&iommu->lock);
3012 		return 0;
3013 	} else if (dirty.flags & VFIO_IOMMU_DIRTY_PAGES_FLAG_GET_BITMAP) {
3014 		struct vfio_iommu_type1_dirty_bitmap_get range;
3015 		unsigned long pgshift;
3016 		size_t data_size = dirty.argsz - minsz;
3017 		size_t size, iommu_pgsize;
3018 		dma_addr_t iova, iova_end;
3019 
3020 		if (!data_size || data_size < sizeof(range))
3021 			return -EINVAL;
3022 
3023 		if (copy_from_user(&range, (void __user *)(arg + minsz),
3024 				   sizeof(range)))
3025 			return -EFAULT;
3026 
3027 		iova = range.iova;
3028 		size = range.size;
3029 
3030 		if (iova != range.iova || size != range.size)
3031 			return -EOVERFLOW;
3032 
3033 		if (!size)
3034 			return -EINVAL;
3035 
3036 		if (check_add_overflow(iova, size - 1, &iova_end))
3037 			return -EOVERFLOW;
3038 
3039 		if (!access_ok((void __user *)range.bitmap.data,
3040 			       range.bitmap.size))
3041 			return -EINVAL;
3042 
3043 		pgshift = __ffs(range.bitmap.pgsize);
3044 		ret = verify_bitmap_size(size >> pgshift,
3045 					 range.bitmap.size);
3046 		if (ret)
3047 			return ret;
3048 
3049 		mutex_lock(&iommu->lock);
3050 
3051 		iommu_pgsize = (size_t)1 << __ffs(iommu->pgsize_bitmap);
3052 
3053 		/* allow only smallest supported pgsize */
3054 		if (range.bitmap.pgsize != iommu_pgsize) {
3055 			ret = -EINVAL;
3056 			goto out_unlock;
3057 		}
3058 		if (iova & (iommu_pgsize - 1)) {
3059 			ret = -EINVAL;
3060 			goto out_unlock;
3061 		}
3062 		if (size & (iommu_pgsize - 1)) {
3063 			ret = -EINVAL;
3064 			goto out_unlock;
3065 		}
3066 
3067 		if (iommu->dirty_page_tracking)
3068 			ret = vfio_iova_dirty_bitmap(range.bitmap.data,
3069 						     iommu, iova, iova_end,
3070 						     range.bitmap.pgsize);
3071 		else
3072 			ret = -EINVAL;
3073 out_unlock:
3074 		mutex_unlock(&iommu->lock);
3075 
3076 		return ret;
3077 	}
3078 
3079 	return -EINVAL;
3080 }
3081 
vfio_iommu_type1_ioctl(void * iommu_data,unsigned int cmd,unsigned long arg)3082 static long vfio_iommu_type1_ioctl(void *iommu_data,
3083 				   unsigned int cmd, unsigned long arg)
3084 {
3085 	struct vfio_iommu *iommu = iommu_data;
3086 
3087 	switch (cmd) {
3088 	case VFIO_CHECK_EXTENSION:
3089 		return vfio_iommu_type1_check_extension(iommu, arg);
3090 	case VFIO_IOMMU_GET_INFO:
3091 		return vfio_iommu_type1_get_info(iommu, arg);
3092 	case VFIO_IOMMU_MAP_DMA:
3093 		return vfio_iommu_type1_map_dma(iommu, arg);
3094 	case VFIO_IOMMU_UNMAP_DMA:
3095 		return vfio_iommu_type1_unmap_dma(iommu, arg);
3096 	case VFIO_IOMMU_DIRTY_PAGES:
3097 		return vfio_iommu_type1_dirty_pages(iommu, arg);
3098 	default:
3099 		return -ENOTTY;
3100 	}
3101 }
3102 
vfio_iommu_type1_register_device(void * iommu_data,struct vfio_device * vdev)3103 static void vfio_iommu_type1_register_device(void *iommu_data,
3104 					     struct vfio_device *vdev)
3105 {
3106 	struct vfio_iommu *iommu = iommu_data;
3107 
3108 	if (!vdev->ops->dma_unmap)
3109 		return;
3110 
3111 	/*
3112 	 * list_empty(&iommu->device_list) is tested under the iommu->lock while
3113 	 * iteration for dma_unmap must be done under the device_list_lock.
3114 	 * Holding both locks here allows avoiding the device_list_lock in
3115 	 * several fast paths. See vfio_notify_dma_unmap()
3116 	 */
3117 	mutex_lock(&iommu->lock);
3118 	mutex_lock(&iommu->device_list_lock);
3119 	list_add(&vdev->iommu_entry, &iommu->device_list);
3120 	mutex_unlock(&iommu->device_list_lock);
3121 	mutex_unlock(&iommu->lock);
3122 }
3123 
vfio_iommu_type1_unregister_device(void * iommu_data,struct vfio_device * vdev)3124 static void vfio_iommu_type1_unregister_device(void *iommu_data,
3125 					       struct vfio_device *vdev)
3126 {
3127 	struct vfio_iommu *iommu = iommu_data;
3128 
3129 	if (!vdev->ops->dma_unmap)
3130 		return;
3131 
3132 	mutex_lock(&iommu->lock);
3133 	mutex_lock(&iommu->device_list_lock);
3134 	list_del(&vdev->iommu_entry);
3135 	mutex_unlock(&iommu->device_list_lock);
3136 	mutex_unlock(&iommu->lock);
3137 }
3138 
vfio_iommu_type1_dma_rw_chunk(struct vfio_iommu * iommu,dma_addr_t user_iova,void * data,size_t count,bool write,size_t * copied)3139 static int vfio_iommu_type1_dma_rw_chunk(struct vfio_iommu *iommu,
3140 					 dma_addr_t user_iova, void *data,
3141 					 size_t count, bool write,
3142 					 size_t *copied)
3143 {
3144 	struct mm_struct *mm;
3145 	unsigned long vaddr;
3146 	struct vfio_dma *dma;
3147 	bool kthread = current->mm == NULL;
3148 	size_t offset;
3149 
3150 	*copied = 0;
3151 
3152 	dma = vfio_find_dma(iommu, user_iova, 1);
3153 	if (!dma)
3154 		return -EINVAL;
3155 
3156 	if ((write && !(dma->prot & IOMMU_WRITE)) ||
3157 			!(dma->prot & IOMMU_READ))
3158 		return -EPERM;
3159 
3160 	mm = dma->mm;
3161 	if (!mmget_not_zero(mm))
3162 		return -EPERM;
3163 
3164 	if (kthread)
3165 		kthread_use_mm(mm);
3166 	else if (current->mm != mm)
3167 		goto out;
3168 
3169 	offset = user_iova - dma->iova;
3170 
3171 	if (count > dma->size - offset)
3172 		count = dma->size - offset;
3173 
3174 	vaddr = dma->vaddr + offset;
3175 
3176 	if (write) {
3177 		*copied = copy_to_user((void __user *)vaddr, data,
3178 					 count) ? 0 : count;
3179 		if (*copied && iommu->dirty_page_tracking) {
3180 			unsigned long pgshift = __ffs(iommu->pgsize_bitmap);
3181 			/*
3182 			 * Bitmap populated with the smallest supported page
3183 			 * size
3184 			 */
3185 			bitmap_set(dma->bitmap, offset >> pgshift,
3186 				   ((offset + *copied - 1) >> pgshift) -
3187 				   (offset >> pgshift) + 1);
3188 		}
3189 	} else
3190 		*copied = copy_from_user(data, (void __user *)vaddr,
3191 					   count) ? 0 : count;
3192 	if (kthread)
3193 		kthread_unuse_mm(mm);
3194 out:
3195 	mmput(mm);
3196 	return *copied ? 0 : -EFAULT;
3197 }
3198 
vfio_iommu_type1_dma_rw(void * iommu_data,dma_addr_t user_iova,void * data,size_t count,bool write)3199 static int vfio_iommu_type1_dma_rw(void *iommu_data, dma_addr_t user_iova,
3200 				   void *data, size_t count, bool write)
3201 {
3202 	struct vfio_iommu *iommu = iommu_data;
3203 	int ret = 0;
3204 	size_t done;
3205 
3206 	mutex_lock(&iommu->lock);
3207 
3208 	if (WARN_ONCE(iommu->vaddr_invalid_count,
3209 		      "vfio_dma_rw not allowed with VFIO_UPDATE_VADDR\n")) {
3210 		ret = -EBUSY;
3211 		goto out;
3212 	}
3213 
3214 	while (count > 0) {
3215 		ret = vfio_iommu_type1_dma_rw_chunk(iommu, user_iova, data,
3216 						    count, write, &done);
3217 		if (ret)
3218 			break;
3219 
3220 		count -= done;
3221 		data += done;
3222 		user_iova += done;
3223 	}
3224 
3225 out:
3226 	mutex_unlock(&iommu->lock);
3227 	return ret;
3228 }
3229 
3230 static struct iommu_domain *
vfio_iommu_type1_group_iommu_domain(void * iommu_data,struct iommu_group * iommu_group)3231 vfio_iommu_type1_group_iommu_domain(void *iommu_data,
3232 				    struct iommu_group *iommu_group)
3233 {
3234 	struct iommu_domain *domain = ERR_PTR(-ENODEV);
3235 	struct vfio_iommu *iommu = iommu_data;
3236 	struct vfio_domain *d;
3237 
3238 	if (!iommu || !iommu_group)
3239 		return ERR_PTR(-EINVAL);
3240 
3241 	mutex_lock(&iommu->lock);
3242 	list_for_each_entry(d, &iommu->domain_list, next) {
3243 		if (find_iommu_group(d, iommu_group)) {
3244 			domain = d->domain;
3245 			break;
3246 		}
3247 	}
3248 	mutex_unlock(&iommu->lock);
3249 
3250 	return domain;
3251 }
3252 
3253 static const struct vfio_iommu_driver_ops vfio_iommu_driver_ops_type1 = {
3254 	.name			= "vfio-iommu-type1",
3255 	.owner			= THIS_MODULE,
3256 	.open			= vfio_iommu_type1_open,
3257 	.release		= vfio_iommu_type1_release,
3258 	.ioctl			= vfio_iommu_type1_ioctl,
3259 	.attach_group		= vfio_iommu_type1_attach_group,
3260 	.detach_group		= vfio_iommu_type1_detach_group,
3261 	.pin_pages		= vfio_iommu_type1_pin_pages,
3262 	.unpin_pages		= vfio_iommu_type1_unpin_pages,
3263 	.register_device	= vfio_iommu_type1_register_device,
3264 	.unregister_device	= vfio_iommu_type1_unregister_device,
3265 	.dma_rw			= vfio_iommu_type1_dma_rw,
3266 	.group_iommu_domain	= vfio_iommu_type1_group_iommu_domain,
3267 };
3268 
vfio_iommu_type1_init(void)3269 static int __init vfio_iommu_type1_init(void)
3270 {
3271 	return vfio_register_iommu_driver(&vfio_iommu_driver_ops_type1);
3272 }
3273 
vfio_iommu_type1_cleanup(void)3274 static void __exit vfio_iommu_type1_cleanup(void)
3275 {
3276 	vfio_unregister_iommu_driver(&vfio_iommu_driver_ops_type1);
3277 }
3278 
3279 module_init(vfio_iommu_type1_init);
3280 module_exit(vfio_iommu_type1_cleanup);
3281 
3282 MODULE_VERSION(DRIVER_VERSION);
3283 MODULE_LICENSE("GPL v2");
3284 MODULE_AUTHOR(DRIVER_AUTHOR);
3285 MODULE_DESCRIPTION(DRIVER_DESC);
3286