1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) 2007-2008 Advanced Micro Devices, Inc.
4 * Author: Joerg Roedel <jroedel@suse.de>
7 #define pr_fmt(fmt) "iommu: " fmt
9 #include <linux/amba/bus.h>
10 #include <linux/device.h>
11 #include <linux/kernel.h>
12 #include <linux/bits.h>
13 #include <linux/bug.h>
14 #include <linux/types.h>
15 #include <linux/init.h>
16 #include <linux/export.h>
17 #include <linux/slab.h>
18 #include <linux/errno.h>
19 #include <linux/host1x_context_bus.h>
20 #include <linux/iommu.h>
21 #include <linux/idr.h>
22 #include <linux/err.h>
23 #include <linux/pci.h>
24 #include <linux/pci-ats.h>
25 #include <linux/bitops.h>
26 #include <linux/platform_device.h>
27 #include <linux/property.h>
28 #include <linux/fsl/mc.h>
29 #include <linux/module.h>
30 #include <linux/cc_platform.h>
31 #include <linux/cdx/cdx_bus.h>
32 #include <trace/events/iommu.h>
33 #include <linux/sched/mm.h>
34 #include <linux/msi.h>
35 #include <uapi/linux/iommufd.h>
37 #include "dma-iommu.h"
38 #include "iommu-priv.h"
40 static struct kset
*iommu_group_kset
;
41 static DEFINE_IDA(iommu_group_ida
);
42 static DEFINE_IDA(iommu_global_pasid_ida
);
44 static unsigned int iommu_def_domain_type __read_mostly
;
45 static bool iommu_dma_strict __read_mostly
= IS_ENABLED(CONFIG_IOMMU_DEFAULT_DMA_STRICT
);
46 static u32 iommu_cmd_line __read_mostly
;
50 struct kobject
*devices_kobj
;
51 struct list_head devices
;
52 struct xarray pasid_array
;
55 void (*iommu_data_release
)(void *iommu_data
);
58 struct iommu_domain
*default_domain
;
59 struct iommu_domain
*blocking_domain
;
60 struct iommu_domain
*domain
;
61 struct list_head entry
;
62 unsigned int owner_cnt
;
67 struct list_head list
;
72 /* Iterate over each struct group_device in a struct iommu_group */
73 #define for_each_group_device(group, pos) \
74 list_for_each_entry(pos, &(group)->devices, list)
76 struct iommu_group_attribute
{
77 struct attribute attr
;
78 ssize_t (*show
)(struct iommu_group
*group
, char *buf
);
79 ssize_t (*store
)(struct iommu_group
*group
,
80 const char *buf
, size_t count
);
83 static const char * const iommu_group_resv_type_string
[] = {
84 [IOMMU_RESV_DIRECT
] = "direct",
85 [IOMMU_RESV_DIRECT_RELAXABLE
] = "direct-relaxable",
86 [IOMMU_RESV_RESERVED
] = "reserved",
87 [IOMMU_RESV_MSI
] = "msi",
88 [IOMMU_RESV_SW_MSI
] = "msi",
91 #define IOMMU_CMD_LINE_DMA_API BIT(0)
92 #define IOMMU_CMD_LINE_STRICT BIT(1)
94 static int bus_iommu_probe(const struct bus_type
*bus
);
95 static int iommu_bus_notifier(struct notifier_block
*nb
,
96 unsigned long action
, void *data
);
97 static void iommu_release_device(struct device
*dev
);
98 static int __iommu_attach_device(struct iommu_domain
*domain
,
100 static int __iommu_attach_group(struct iommu_domain
*domain
,
101 struct iommu_group
*group
);
102 static struct iommu_domain
*__iommu_paging_domain_alloc_flags(struct device
*dev
,
107 IOMMU_SET_DOMAIN_MUST_SUCCEED
= 1 << 0,
110 static int __iommu_device_set_domain(struct iommu_group
*group
,
112 struct iommu_domain
*new_domain
,
114 static int __iommu_group_set_domain_internal(struct iommu_group
*group
,
115 struct iommu_domain
*new_domain
,
117 static int __iommu_group_set_domain(struct iommu_group
*group
,
118 struct iommu_domain
*new_domain
)
120 return __iommu_group_set_domain_internal(group
, new_domain
, 0);
122 static void __iommu_group_set_domain_nofail(struct iommu_group
*group
,
123 struct iommu_domain
*new_domain
)
125 WARN_ON(__iommu_group_set_domain_internal(
126 group
, new_domain
, IOMMU_SET_DOMAIN_MUST_SUCCEED
));
129 static int iommu_setup_default_domain(struct iommu_group
*group
,
131 static int iommu_create_device_direct_mappings(struct iommu_domain
*domain
,
133 static ssize_t
iommu_group_store_type(struct iommu_group
*group
,
134 const char *buf
, size_t count
);
135 static struct group_device
*iommu_group_alloc_device(struct iommu_group
*group
,
137 static void __iommu_group_free_device(struct iommu_group
*group
,
138 struct group_device
*grp_dev
);
139 static void iommu_domain_init(struct iommu_domain
*domain
, unsigned int type
,
140 const struct iommu_ops
*ops
);
142 #define IOMMU_GROUP_ATTR(_name, _mode, _show, _store) \
143 struct iommu_group_attribute iommu_group_attr_##_name = \
144 __ATTR(_name, _mode, _show, _store)
146 #define to_iommu_group_attr(_attr) \
147 container_of(_attr, struct iommu_group_attribute, attr)
148 #define to_iommu_group(_kobj) \
149 container_of(_kobj, struct iommu_group, kobj)
151 static LIST_HEAD(iommu_device_list
);
152 static DEFINE_SPINLOCK(iommu_device_lock
);
154 static const struct bus_type
* const iommu_buses
[] = {
159 #ifdef CONFIG_ARM_AMBA
162 #ifdef CONFIG_FSL_MC_BUS
165 #ifdef CONFIG_TEGRA_HOST1X_CONTEXT_BUS
166 &host1x_context_device_bus_type
,
168 #ifdef CONFIG_CDX_BUS
174 * Use a function instead of an array here because the domain-type is a
175 * bit-field, so an array would waste memory.
177 static const char *iommu_domain_type_str(unsigned int t
)
180 case IOMMU_DOMAIN_BLOCKED
:
182 case IOMMU_DOMAIN_IDENTITY
:
183 return "Passthrough";
184 case IOMMU_DOMAIN_UNMANAGED
:
186 case IOMMU_DOMAIN_DMA
:
187 case IOMMU_DOMAIN_DMA_FQ
:
189 case IOMMU_DOMAIN_PLATFORM
:
196 static int __init
iommu_subsys_init(void)
198 struct notifier_block
*nb
;
200 if (!(iommu_cmd_line
& IOMMU_CMD_LINE_DMA_API
)) {
201 if (IS_ENABLED(CONFIG_IOMMU_DEFAULT_PASSTHROUGH
))
202 iommu_set_default_passthrough(false);
204 iommu_set_default_translated(false);
206 if (iommu_default_passthrough() && cc_platform_has(CC_ATTR_MEM_ENCRYPT
)) {
207 pr_info("Memory encryption detected - Disabling default IOMMU Passthrough\n");
208 iommu_set_default_translated(false);
212 if (!iommu_default_passthrough() && !iommu_dma_strict
)
213 iommu_def_domain_type
= IOMMU_DOMAIN_DMA_FQ
;
215 pr_info("Default domain type: %s%s\n",
216 iommu_domain_type_str(iommu_def_domain_type
),
217 (iommu_cmd_line
& IOMMU_CMD_LINE_DMA_API
) ?
218 " (set via kernel command line)" : "");
220 if (!iommu_default_passthrough())
221 pr_info("DMA domain TLB invalidation policy: %s mode%s\n",
222 iommu_dma_strict
? "strict" : "lazy",
223 (iommu_cmd_line
& IOMMU_CMD_LINE_STRICT
) ?
224 " (set via kernel command line)" : "");
226 nb
= kcalloc(ARRAY_SIZE(iommu_buses
), sizeof(*nb
), GFP_KERNEL
);
230 for (int i
= 0; i
< ARRAY_SIZE(iommu_buses
); i
++) {
231 nb
[i
].notifier_call
= iommu_bus_notifier
;
232 bus_register_notifier(iommu_buses
[i
], &nb
[i
]);
237 subsys_initcall(iommu_subsys_init
);
239 static int remove_iommu_group(struct device
*dev
, void *data
)
241 if (dev
->iommu
&& dev
->iommu
->iommu_dev
== data
)
242 iommu_release_device(dev
);
248 * iommu_device_register() - Register an IOMMU hardware instance
249 * @iommu: IOMMU handle for the instance
250 * @ops: IOMMU ops to associate with the instance
251 * @hwdev: (optional) actual instance device, used for fwnode lookup
253 * Return: 0 on success, or an error.
255 int iommu_device_register(struct iommu_device
*iommu
,
256 const struct iommu_ops
*ops
, struct device
*hwdev
)
260 /* We need to be able to take module references appropriately */
261 if (WARN_ON(is_module_address((unsigned long)ops
) && !ops
->owner
))
266 iommu
->fwnode
= dev_fwnode(hwdev
);
268 spin_lock(&iommu_device_lock
);
269 list_add_tail(&iommu
->list
, &iommu_device_list
);
270 spin_unlock(&iommu_device_lock
);
272 for (int i
= 0; i
< ARRAY_SIZE(iommu_buses
) && !err
; i
++)
273 err
= bus_iommu_probe(iommu_buses
[i
]);
275 iommu_device_unregister(iommu
);
278 EXPORT_SYMBOL_GPL(iommu_device_register
);
280 void iommu_device_unregister(struct iommu_device
*iommu
)
282 for (int i
= 0; i
< ARRAY_SIZE(iommu_buses
); i
++)
283 bus_for_each_dev(iommu_buses
[i
], NULL
, iommu
, remove_iommu_group
);
285 spin_lock(&iommu_device_lock
);
286 list_del(&iommu
->list
);
287 spin_unlock(&iommu_device_lock
);
289 /* Pairs with the alloc in generic_single_device_group() */
290 iommu_group_put(iommu
->singleton_group
);
291 iommu
->singleton_group
= NULL
;
293 EXPORT_SYMBOL_GPL(iommu_device_unregister
);
295 #if IS_ENABLED(CONFIG_IOMMUFD_TEST)
296 void iommu_device_unregister_bus(struct iommu_device
*iommu
,
297 const struct bus_type
*bus
,
298 struct notifier_block
*nb
)
300 bus_unregister_notifier(bus
, nb
);
301 iommu_device_unregister(iommu
);
303 EXPORT_SYMBOL_GPL(iommu_device_unregister_bus
);
306 * Register an iommu driver against a single bus. This is only used by iommufd
307 * selftest to create a mock iommu driver. The caller must provide
308 * some memory to hold a notifier_block.
310 int iommu_device_register_bus(struct iommu_device
*iommu
,
311 const struct iommu_ops
*ops
,
312 const struct bus_type
*bus
,
313 struct notifier_block
*nb
)
318 nb
->notifier_call
= iommu_bus_notifier
;
319 err
= bus_register_notifier(bus
, nb
);
323 spin_lock(&iommu_device_lock
);
324 list_add_tail(&iommu
->list
, &iommu_device_list
);
325 spin_unlock(&iommu_device_lock
);
327 err
= bus_iommu_probe(bus
);
329 iommu_device_unregister_bus(iommu
, bus
, nb
);
334 EXPORT_SYMBOL_GPL(iommu_device_register_bus
);
337 static struct dev_iommu
*dev_iommu_get(struct device
*dev
)
339 struct dev_iommu
*param
= dev
->iommu
;
341 lockdep_assert_held(&iommu_probe_device_lock
);
346 param
= kzalloc(sizeof(*param
), GFP_KERNEL
);
350 mutex_init(¶m
->lock
);
355 static void dev_iommu_free(struct device
*dev
)
357 struct dev_iommu
*param
= dev
->iommu
;
361 fwnode_handle_put(param
->fwspec
->iommu_fwnode
);
362 kfree(param
->fwspec
);
368 * Internal equivalent of device_iommu_mapped() for when we care that a device
369 * actually has API ops, and don't want false positives from VFIO-only groups.
371 static bool dev_has_iommu(struct device
*dev
)
373 return dev
->iommu
&& dev
->iommu
->iommu_dev
;
376 static u32
dev_iommu_get_max_pasids(struct device
*dev
)
378 u32 max_pasids
= 0, bits
= 0;
381 if (dev_is_pci(dev
)) {
382 ret
= pci_max_pasids(to_pci_dev(dev
));
386 ret
= device_property_read_u32(dev
, "pasid-num-bits", &bits
);
388 max_pasids
= 1UL << bits
;
391 return min_t(u32
, max_pasids
, dev
->iommu
->iommu_dev
->max_pasids
);
394 void dev_iommu_priv_set(struct device
*dev
, void *priv
)
396 /* FSL_PAMU does something weird */
397 if (!IS_ENABLED(CONFIG_FSL_PAMU
))
398 lockdep_assert_held(&iommu_probe_device_lock
);
399 dev
->iommu
->priv
= priv
;
401 EXPORT_SYMBOL_GPL(dev_iommu_priv_set
);
404 * Init the dev->iommu and dev->iommu_group in the struct device and get the
407 static int iommu_init_device(struct device
*dev
, const struct iommu_ops
*ops
)
409 struct iommu_device
*iommu_dev
;
410 struct iommu_group
*group
;
413 if (!dev_iommu_get(dev
))
416 if (!try_module_get(ops
->owner
)) {
421 iommu_dev
= ops
->probe_device(dev
);
422 if (IS_ERR(iommu_dev
)) {
423 ret
= PTR_ERR(iommu_dev
);
426 dev
->iommu
->iommu_dev
= iommu_dev
;
428 ret
= iommu_device_link(iommu_dev
, dev
);
432 group
= ops
->device_group(dev
);
433 if (WARN_ON_ONCE(group
== NULL
))
434 group
= ERR_PTR(-EINVAL
);
436 ret
= PTR_ERR(group
);
439 dev
->iommu_group
= group
;
441 dev
->iommu
->max_pasids
= dev_iommu_get_max_pasids(dev
);
442 if (ops
->is_attach_deferred
)
443 dev
->iommu
->attach_deferred
= ops
->is_attach_deferred(dev
);
447 iommu_device_unlink(iommu_dev
, dev
);
449 if (ops
->release_device
)
450 ops
->release_device(dev
);
452 module_put(ops
->owner
);
454 dev
->iommu
->iommu_dev
= NULL
;
459 static void iommu_deinit_device(struct device
*dev
)
461 struct iommu_group
*group
= dev
->iommu_group
;
462 const struct iommu_ops
*ops
= dev_iommu_ops(dev
);
464 lockdep_assert_held(&group
->mutex
);
466 iommu_device_unlink(dev
->iommu
->iommu_dev
, dev
);
469 * release_device() must stop using any attached domain on the device.
470 * If there are still other devices in the group, they are not affected
473 * If the iommu driver provides release_domain, the core code ensures
474 * that domain is attached prior to calling release_device. Drivers can
475 * use this to enforce a translation on the idle iommu. Typically, the
476 * global static blocked_domain is a good choice.
478 * Otherwise, the iommu driver must set the device to either an identity
479 * or a blocking translation in release_device() and stop using any
480 * domain pointer, as it is going to be freed.
482 * Regardless, if a delayed attach never occurred, then the release
483 * should still avoid touching any hardware configuration either.
485 if (!dev
->iommu
->attach_deferred
&& ops
->release_domain
)
486 ops
->release_domain
->ops
->attach_dev(ops
->release_domain
, dev
);
488 if (ops
->release_device
)
489 ops
->release_device(dev
);
492 * If this is the last driver to use the group then we must free the
493 * domains before we do the module_put().
495 if (list_empty(&group
->devices
)) {
496 if (group
->default_domain
) {
497 iommu_domain_free(group
->default_domain
);
498 group
->default_domain
= NULL
;
500 if (group
->blocking_domain
) {
501 iommu_domain_free(group
->blocking_domain
);
502 group
->blocking_domain
= NULL
;
504 group
->domain
= NULL
;
507 /* Caller must put iommu_group */
508 dev
->iommu_group
= NULL
;
509 module_put(ops
->owner
);
513 DEFINE_MUTEX(iommu_probe_device_lock
);
515 static int __iommu_probe_device(struct device
*dev
, struct list_head
*group_list
)
517 const struct iommu_ops
*ops
;
518 struct iommu_group
*group
;
519 struct group_device
*gdev
;
523 * For FDT-based systems and ACPI IORT/VIOT, drivers register IOMMU
524 * instances with non-NULL fwnodes, and client devices should have been
525 * identified with a fwspec by this point. Otherwise, we can currently
526 * assume that only one of Intel, AMD, s390, PAMU or legacy SMMUv2 can
527 * be present, and that any of their registered instances has suitable
528 * ops for probing, and thus cheekily co-opt the same mechanism.
530 ops
= iommu_fwspec_ops(dev_iommu_fwspec_get(dev
));
534 * Serialise to avoid races between IOMMU drivers registering in
535 * parallel and/or the "replay" calls from ACPI/OF code via client
536 * driver probe. Once the latter have been cleaned up we should
537 * probably be able to use device_lock() here to minimise the scope,
538 * but for now enforcing a simple global ordering is fine.
540 lockdep_assert_held(&iommu_probe_device_lock
);
542 /* Device is probed already if in a group */
543 if (dev
->iommu_group
)
546 ret
= iommu_init_device(dev
, ops
);
550 group
= dev
->iommu_group
;
551 gdev
= iommu_group_alloc_device(group
, dev
);
552 mutex_lock(&group
->mutex
);
559 * The gdev must be in the list before calling
560 * iommu_setup_default_domain()
562 list_add_tail(&gdev
->list
, &group
->devices
);
563 WARN_ON(group
->default_domain
&& !group
->domain
);
564 if (group
->default_domain
)
565 iommu_create_device_direct_mappings(group
->default_domain
, dev
);
567 ret
= __iommu_device_set_domain(group
, dev
, group
->domain
, 0);
569 goto err_remove_gdev
;
570 } else if (!group
->default_domain
&& !group_list
) {
571 ret
= iommu_setup_default_domain(group
, 0);
573 goto err_remove_gdev
;
574 } else if (!group
->default_domain
) {
576 * With a group_list argument we defer the default_domain setup
577 * to the caller by providing a de-duplicated list of groups
578 * that need further setup.
580 if (list_empty(&group
->entry
))
581 list_add_tail(&group
->entry
, group_list
);
584 if (group
->default_domain
)
585 iommu_setup_dma_ops(dev
);
587 mutex_unlock(&group
->mutex
);
592 list_del(&gdev
->list
);
593 __iommu_group_free_device(group
, gdev
);
595 iommu_deinit_device(dev
);
596 mutex_unlock(&group
->mutex
);
597 iommu_group_put(group
);
602 int iommu_probe_device(struct device
*dev
)
604 const struct iommu_ops
*ops
;
607 mutex_lock(&iommu_probe_device_lock
);
608 ret
= __iommu_probe_device(dev
, NULL
);
609 mutex_unlock(&iommu_probe_device_lock
);
613 ops
= dev_iommu_ops(dev
);
614 if (ops
->probe_finalize
)
615 ops
->probe_finalize(dev
);
620 static void __iommu_group_free_device(struct iommu_group
*group
,
621 struct group_device
*grp_dev
)
623 struct device
*dev
= grp_dev
->dev
;
625 sysfs_remove_link(group
->devices_kobj
, grp_dev
->name
);
626 sysfs_remove_link(&dev
->kobj
, "iommu_group");
628 trace_remove_device_from_group(group
->id
, dev
);
631 * If the group has become empty then ownership must have been
632 * released, and the current domain must be set back to NULL or
633 * the default domain.
635 if (list_empty(&group
->devices
))
636 WARN_ON(group
->owner_cnt
||
637 group
->domain
!= group
->default_domain
);
639 kfree(grp_dev
->name
);
643 /* Remove the iommu_group from the struct device. */
644 static void __iommu_group_remove_device(struct device
*dev
)
646 struct iommu_group
*group
= dev
->iommu_group
;
647 struct group_device
*device
;
649 mutex_lock(&group
->mutex
);
650 for_each_group_device(group
, device
) {
651 if (device
->dev
!= dev
)
654 list_del(&device
->list
);
655 __iommu_group_free_device(group
, device
);
656 if (dev_has_iommu(dev
))
657 iommu_deinit_device(dev
);
659 dev
->iommu_group
= NULL
;
662 mutex_unlock(&group
->mutex
);
665 * Pairs with the get in iommu_init_device() or
666 * iommu_group_add_device()
668 iommu_group_put(group
);
671 static void iommu_release_device(struct device
*dev
)
673 struct iommu_group
*group
= dev
->iommu_group
;
676 __iommu_group_remove_device(dev
);
678 /* Free any fwspec if no iommu_driver was ever attached */
683 static int __init
iommu_set_def_domain_type(char *str
)
688 ret
= kstrtobool(str
, &pt
);
693 iommu_set_default_passthrough(true);
695 iommu_set_default_translated(true);
699 early_param("iommu.passthrough", iommu_set_def_domain_type
);
701 static int __init
iommu_dma_setup(char *str
)
703 int ret
= kstrtobool(str
, &iommu_dma_strict
);
706 iommu_cmd_line
|= IOMMU_CMD_LINE_STRICT
;
709 early_param("iommu.strict", iommu_dma_setup
);
711 void iommu_set_dma_strict(void)
713 iommu_dma_strict
= true;
714 if (iommu_def_domain_type
== IOMMU_DOMAIN_DMA_FQ
)
715 iommu_def_domain_type
= IOMMU_DOMAIN_DMA
;
718 static ssize_t
iommu_group_attr_show(struct kobject
*kobj
,
719 struct attribute
*__attr
, char *buf
)
721 struct iommu_group_attribute
*attr
= to_iommu_group_attr(__attr
);
722 struct iommu_group
*group
= to_iommu_group(kobj
);
726 ret
= attr
->show(group
, buf
);
730 static ssize_t
iommu_group_attr_store(struct kobject
*kobj
,
731 struct attribute
*__attr
,
732 const char *buf
, size_t count
)
734 struct iommu_group_attribute
*attr
= to_iommu_group_attr(__attr
);
735 struct iommu_group
*group
= to_iommu_group(kobj
);
739 ret
= attr
->store(group
, buf
, count
);
743 static const struct sysfs_ops iommu_group_sysfs_ops
= {
744 .show
= iommu_group_attr_show
,
745 .store
= iommu_group_attr_store
,
748 static int iommu_group_create_file(struct iommu_group
*group
,
749 struct iommu_group_attribute
*attr
)
751 return sysfs_create_file(&group
->kobj
, &attr
->attr
);
754 static void iommu_group_remove_file(struct iommu_group
*group
,
755 struct iommu_group_attribute
*attr
)
757 sysfs_remove_file(&group
->kobj
, &attr
->attr
);
760 static ssize_t
iommu_group_show_name(struct iommu_group
*group
, char *buf
)
762 return sysfs_emit(buf
, "%s\n", group
->name
);
766 * iommu_insert_resv_region - Insert a new region in the
767 * list of reserved regions.
768 * @new: new region to insert
769 * @regions: list of regions
771 * Elements are sorted by start address and overlapping segments
772 * of the same type are merged.
774 static int iommu_insert_resv_region(struct iommu_resv_region
*new,
775 struct list_head
*regions
)
777 struct iommu_resv_region
*iter
, *tmp
, *nr
, *top
;
780 nr
= iommu_alloc_resv_region(new->start
, new->length
,
781 new->prot
, new->type
, GFP_KERNEL
);
785 /* First add the new element based on start address sorting */
786 list_for_each_entry(iter
, regions
, list
) {
787 if (nr
->start
< iter
->start
||
788 (nr
->start
== iter
->start
&& nr
->type
<= iter
->type
))
791 list_add_tail(&nr
->list
, &iter
->list
);
793 /* Merge overlapping segments of type nr->type in @regions, if any */
794 list_for_each_entry_safe(iter
, tmp
, regions
, list
) {
795 phys_addr_t top_end
, iter_end
= iter
->start
+ iter
->length
- 1;
797 /* no merge needed on elements of different types than @new */
798 if (iter
->type
!= new->type
) {
799 list_move_tail(&iter
->list
, &stack
);
803 /* look for the last stack element of same type as @iter */
804 list_for_each_entry_reverse(top
, &stack
, list
)
805 if (top
->type
== iter
->type
)
808 list_move_tail(&iter
->list
, &stack
);
812 top_end
= top
->start
+ top
->length
- 1;
814 if (iter
->start
> top_end
+ 1) {
815 list_move_tail(&iter
->list
, &stack
);
817 top
->length
= max(top_end
, iter_end
) - top
->start
+ 1;
818 list_del(&iter
->list
);
822 list_splice(&stack
, regions
);
827 iommu_insert_device_resv_regions(struct list_head
*dev_resv_regions
,
828 struct list_head
*group_resv_regions
)
830 struct iommu_resv_region
*entry
;
833 list_for_each_entry(entry
, dev_resv_regions
, list
) {
834 ret
= iommu_insert_resv_region(entry
, group_resv_regions
);
841 int iommu_get_group_resv_regions(struct iommu_group
*group
,
842 struct list_head
*head
)
844 struct group_device
*device
;
847 mutex_lock(&group
->mutex
);
848 for_each_group_device(group
, device
) {
849 struct list_head dev_resv_regions
;
852 * Non-API groups still expose reserved_regions in sysfs,
853 * so filter out calls that get here that way.
855 if (!dev_has_iommu(device
->dev
))
858 INIT_LIST_HEAD(&dev_resv_regions
);
859 iommu_get_resv_regions(device
->dev
, &dev_resv_regions
);
860 ret
= iommu_insert_device_resv_regions(&dev_resv_regions
, head
);
861 iommu_put_resv_regions(device
->dev
, &dev_resv_regions
);
865 mutex_unlock(&group
->mutex
);
868 EXPORT_SYMBOL_GPL(iommu_get_group_resv_regions
);
870 static ssize_t
iommu_group_show_resv_regions(struct iommu_group
*group
,
873 struct iommu_resv_region
*region
, *next
;
874 struct list_head group_resv_regions
;
877 INIT_LIST_HEAD(&group_resv_regions
);
878 iommu_get_group_resv_regions(group
, &group_resv_regions
);
880 list_for_each_entry_safe(region
, next
, &group_resv_regions
, list
) {
881 offset
+= sysfs_emit_at(buf
, offset
, "0x%016llx 0x%016llx %s\n",
882 (long long)region
->start
,
883 (long long)(region
->start
+
885 iommu_group_resv_type_string
[region
->type
]);
892 static ssize_t
iommu_group_show_type(struct iommu_group
*group
,
895 char *type
= "unknown";
897 mutex_lock(&group
->mutex
);
898 if (group
->default_domain
) {
899 switch (group
->default_domain
->type
) {
900 case IOMMU_DOMAIN_BLOCKED
:
903 case IOMMU_DOMAIN_IDENTITY
:
906 case IOMMU_DOMAIN_UNMANAGED
:
909 case IOMMU_DOMAIN_DMA
:
912 case IOMMU_DOMAIN_DMA_FQ
:
917 mutex_unlock(&group
->mutex
);
919 return sysfs_emit(buf
, "%s\n", type
);
922 static IOMMU_GROUP_ATTR(name
, S_IRUGO
, iommu_group_show_name
, NULL
);
924 static IOMMU_GROUP_ATTR(reserved_regions
, 0444,
925 iommu_group_show_resv_regions
, NULL
);
927 static IOMMU_GROUP_ATTR(type
, 0644, iommu_group_show_type
,
928 iommu_group_store_type
);
930 static void iommu_group_release(struct kobject
*kobj
)
932 struct iommu_group
*group
= to_iommu_group(kobj
);
934 pr_debug("Releasing group %d\n", group
->id
);
936 if (group
->iommu_data_release
)
937 group
->iommu_data_release(group
->iommu_data
);
939 ida_free(&iommu_group_ida
, group
->id
);
941 /* Domains are free'd by iommu_deinit_device() */
942 WARN_ON(group
->default_domain
);
943 WARN_ON(group
->blocking_domain
);
949 static const struct kobj_type iommu_group_ktype
= {
950 .sysfs_ops
= &iommu_group_sysfs_ops
,
951 .release
= iommu_group_release
,
955 * iommu_group_alloc - Allocate a new group
957 * This function is called by an iommu driver to allocate a new iommu
958 * group. The iommu group represents the minimum granularity of the iommu.
959 * Upon successful return, the caller holds a reference to the supplied
960 * group in order to hold the group until devices are added. Use
961 * iommu_group_put() to release this extra reference count, allowing the
962 * group to be automatically reclaimed once it has no devices or external
965 struct iommu_group
*iommu_group_alloc(void)
967 struct iommu_group
*group
;
970 group
= kzalloc(sizeof(*group
), GFP_KERNEL
);
972 return ERR_PTR(-ENOMEM
);
974 group
->kobj
.kset
= iommu_group_kset
;
975 mutex_init(&group
->mutex
);
976 INIT_LIST_HEAD(&group
->devices
);
977 INIT_LIST_HEAD(&group
->entry
);
978 xa_init(&group
->pasid_array
);
980 ret
= ida_alloc(&iommu_group_ida
, GFP_KERNEL
);
987 ret
= kobject_init_and_add(&group
->kobj
, &iommu_group_ktype
,
988 NULL
, "%d", group
->id
);
990 kobject_put(&group
->kobj
);
994 group
->devices_kobj
= kobject_create_and_add("devices", &group
->kobj
);
995 if (!group
->devices_kobj
) {
996 kobject_put(&group
->kobj
); /* triggers .release & free */
997 return ERR_PTR(-ENOMEM
);
1001 * The devices_kobj holds a reference on the group kobject, so
1002 * as long as that exists so will the group. We can therefore
1003 * use the devices_kobj for reference counting.
1005 kobject_put(&group
->kobj
);
1007 ret
= iommu_group_create_file(group
,
1008 &iommu_group_attr_reserved_regions
);
1010 kobject_put(group
->devices_kobj
);
1011 return ERR_PTR(ret
);
1014 ret
= iommu_group_create_file(group
, &iommu_group_attr_type
);
1016 kobject_put(group
->devices_kobj
);
1017 return ERR_PTR(ret
);
1020 pr_debug("Allocated group %d\n", group
->id
);
1024 EXPORT_SYMBOL_GPL(iommu_group_alloc
);
1027 * iommu_group_get_iommudata - retrieve iommu_data registered for a group
1030 * iommu drivers can store data in the group for use when doing iommu
1031 * operations. This function provides a way to retrieve it. Caller
1032 * should hold a group reference.
1034 void *iommu_group_get_iommudata(struct iommu_group
*group
)
1036 return group
->iommu_data
;
1038 EXPORT_SYMBOL_GPL(iommu_group_get_iommudata
);
1041 * iommu_group_set_iommudata - set iommu_data for a group
1043 * @iommu_data: new data
1044 * @release: release function for iommu_data
1046 * iommu drivers can store data in the group for use when doing iommu
1047 * operations. This function provides a way to set the data after
1048 * the group has been allocated. Caller should hold a group reference.
1050 void iommu_group_set_iommudata(struct iommu_group
*group
, void *iommu_data
,
1051 void (*release
)(void *iommu_data
))
1053 group
->iommu_data
= iommu_data
;
1054 group
->iommu_data_release
= release
;
1056 EXPORT_SYMBOL_GPL(iommu_group_set_iommudata
);
1059 * iommu_group_set_name - set name for a group
1063 * Allow iommu driver to set a name for a group. When set it will
1064 * appear in a name attribute file under the group in sysfs.
1066 int iommu_group_set_name(struct iommu_group
*group
, const char *name
)
1071 iommu_group_remove_file(group
, &iommu_group_attr_name
);
1078 group
->name
= kstrdup(name
, GFP_KERNEL
);
1082 ret
= iommu_group_create_file(group
, &iommu_group_attr_name
);
1091 EXPORT_SYMBOL_GPL(iommu_group_set_name
);
1093 static int iommu_create_device_direct_mappings(struct iommu_domain
*domain
,
1096 struct iommu_resv_region
*entry
;
1097 struct list_head mappings
;
1098 unsigned long pg_size
;
1101 pg_size
= domain
->pgsize_bitmap
? 1UL << __ffs(domain
->pgsize_bitmap
) : 0;
1102 INIT_LIST_HEAD(&mappings
);
1104 if (WARN_ON_ONCE(iommu_is_dma_domain(domain
) && !pg_size
))
1107 iommu_get_resv_regions(dev
, &mappings
);
1109 /* We need to consider overlapping regions for different devices */
1110 list_for_each_entry(entry
, &mappings
, list
) {
1111 dma_addr_t start
, end
, addr
;
1112 size_t map_size
= 0;
1114 if (entry
->type
== IOMMU_RESV_DIRECT
)
1115 dev
->iommu
->require_direct
= 1;
1117 if ((entry
->type
!= IOMMU_RESV_DIRECT
&&
1118 entry
->type
!= IOMMU_RESV_DIRECT_RELAXABLE
) ||
1119 !iommu_is_dma_domain(domain
))
1122 start
= ALIGN(entry
->start
, pg_size
);
1123 end
= ALIGN(entry
->start
+ entry
->length
, pg_size
);
1125 for (addr
= start
; addr
<= end
; addr
+= pg_size
) {
1126 phys_addr_t phys_addr
;
1131 phys_addr
= iommu_iova_to_phys(domain
, addr
);
1133 map_size
+= pg_size
;
1139 ret
= iommu_map(domain
, addr
- map_size
,
1140 addr
- map_size
, map_size
,
1141 entry
->prot
, GFP_KERNEL
);
1150 iommu_put_resv_regions(dev
, &mappings
);
1155 /* This is undone by __iommu_group_free_device() */
1156 static struct group_device
*iommu_group_alloc_device(struct iommu_group
*group
,
1160 struct group_device
*device
;
1162 device
= kzalloc(sizeof(*device
), GFP_KERNEL
);
1164 return ERR_PTR(-ENOMEM
);
1168 ret
= sysfs_create_link(&dev
->kobj
, &group
->kobj
, "iommu_group");
1170 goto err_free_device
;
1172 device
->name
= kasprintf(GFP_KERNEL
, "%s", kobject_name(&dev
->kobj
));
1174 if (!device
->name
) {
1176 goto err_remove_link
;
1179 ret
= sysfs_create_link_nowarn(group
->devices_kobj
,
1180 &dev
->kobj
, device
->name
);
1182 if (ret
== -EEXIST
&& i
>= 0) {
1184 * Account for the slim chance of collision
1185 * and append an instance to the name.
1187 kfree(device
->name
);
1188 device
->name
= kasprintf(GFP_KERNEL
, "%s.%d",
1189 kobject_name(&dev
->kobj
), i
++);
1195 trace_add_device_to_group(group
->id
, dev
);
1197 dev_info(dev
, "Adding to iommu group %d\n", group
->id
);
1202 kfree(device
->name
);
1204 sysfs_remove_link(&dev
->kobj
, "iommu_group");
1207 dev_err(dev
, "Failed to add to iommu group %d: %d\n", group
->id
, ret
);
1208 return ERR_PTR(ret
);
1212 * iommu_group_add_device - add a device to an iommu group
1213 * @group: the group into which to add the device (reference should be held)
1216 * This function is called by an iommu driver to add a device into a
1217 * group. Adding a device increments the group reference count.
1219 int iommu_group_add_device(struct iommu_group
*group
, struct device
*dev
)
1221 struct group_device
*gdev
;
1223 gdev
= iommu_group_alloc_device(group
, dev
);
1225 return PTR_ERR(gdev
);
1227 iommu_group_ref_get(group
);
1228 dev
->iommu_group
= group
;
1230 mutex_lock(&group
->mutex
);
1231 list_add_tail(&gdev
->list
, &group
->devices
);
1232 mutex_unlock(&group
->mutex
);
1235 EXPORT_SYMBOL_GPL(iommu_group_add_device
);
1238 * iommu_group_remove_device - remove a device from it's current group
1239 * @dev: device to be removed
1241 * This function is called by an iommu driver to remove the device from
1242 * it's current group. This decrements the iommu group reference count.
1244 void iommu_group_remove_device(struct device
*dev
)
1246 struct iommu_group
*group
= dev
->iommu_group
;
1251 dev_info(dev
, "Removing from iommu group %d\n", group
->id
);
1253 __iommu_group_remove_device(dev
);
1255 EXPORT_SYMBOL_GPL(iommu_group_remove_device
);
1257 #if IS_ENABLED(CONFIG_LOCKDEP) && IS_ENABLED(CONFIG_IOMMU_API)
1259 * iommu_group_mutex_assert - Check device group mutex lock
1260 * @dev: the device that has group param set
1262 * This function is called by an iommu driver to check whether it holds
1263 * group mutex lock for the given device or not.
1265 * Note that this function must be called after device group param is set.
1267 void iommu_group_mutex_assert(struct device
*dev
)
1269 struct iommu_group
*group
= dev
->iommu_group
;
1271 lockdep_assert_held(&group
->mutex
);
1273 EXPORT_SYMBOL_GPL(iommu_group_mutex_assert
);
1276 static struct device
*iommu_group_first_dev(struct iommu_group
*group
)
1278 lockdep_assert_held(&group
->mutex
);
1279 return list_first_entry(&group
->devices
, struct group_device
, list
)->dev
;
1283 * iommu_group_for_each_dev - iterate over each device in the group
1285 * @data: caller opaque data to be passed to callback function
1286 * @fn: caller supplied callback function
1288 * This function is called by group users to iterate over group devices.
1289 * Callers should hold a reference count to the group during callback.
1290 * The group->mutex is held across callbacks, which will block calls to
1291 * iommu_group_add/remove_device.
1293 int iommu_group_for_each_dev(struct iommu_group
*group
, void *data
,
1294 int (*fn
)(struct device
*, void *))
1296 struct group_device
*device
;
1299 mutex_lock(&group
->mutex
);
1300 for_each_group_device(group
, device
) {
1301 ret
= fn(device
->dev
, data
);
1305 mutex_unlock(&group
->mutex
);
1309 EXPORT_SYMBOL_GPL(iommu_group_for_each_dev
);
1312 * iommu_group_get - Return the group for a device and increment reference
1313 * @dev: get the group that this device belongs to
1315 * This function is called by iommu drivers and users to get the group
1316 * for the specified device. If found, the group is returned and the group
1317 * reference in incremented, else NULL.
1319 struct iommu_group
*iommu_group_get(struct device
*dev
)
1321 struct iommu_group
*group
= dev
->iommu_group
;
1324 kobject_get(group
->devices_kobj
);
1328 EXPORT_SYMBOL_GPL(iommu_group_get
);
1331 * iommu_group_ref_get - Increment reference on a group
1332 * @group: the group to use, must not be NULL
1334 * This function is called by iommu drivers to take additional references on an
1335 * existing group. Returns the given group for convenience.
1337 struct iommu_group
*iommu_group_ref_get(struct iommu_group
*group
)
1339 kobject_get(group
->devices_kobj
);
1342 EXPORT_SYMBOL_GPL(iommu_group_ref_get
);
1345 * iommu_group_put - Decrement group reference
1346 * @group: the group to use
1348 * This function is called by iommu drivers and users to release the
1349 * iommu group. Once the reference count is zero, the group is released.
1351 void iommu_group_put(struct iommu_group
*group
)
1354 kobject_put(group
->devices_kobj
);
1356 EXPORT_SYMBOL_GPL(iommu_group_put
);
1359 * iommu_group_id - Return ID for a group
1360 * @group: the group to ID
1362 * Return the unique ID for the group matching the sysfs group number.
1364 int iommu_group_id(struct iommu_group
*group
)
1368 EXPORT_SYMBOL_GPL(iommu_group_id
);
1370 static struct iommu_group
*get_pci_alias_group(struct pci_dev
*pdev
,
1371 unsigned long *devfns
);
1374 * To consider a PCI device isolated, we require ACS to support Source
1375 * Validation, Request Redirection, Completer Redirection, and Upstream
1376 * Forwarding. This effectively means that devices cannot spoof their
1377 * requester ID, requests and completions cannot be redirected, and all
1378 * transactions are forwarded upstream, even as it passes through a
1379 * bridge where the target device is downstream.
1381 #define REQ_ACS_FLAGS (PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF)
1384 * For multifunction devices which are not isolated from each other, find
1385 * all the other non-isolated functions and look for existing groups. For
1386 * each function, we also need to look for aliases to or from other devices
1387 * that may already have a group.
1389 static struct iommu_group
*get_pci_function_alias_group(struct pci_dev
*pdev
,
1390 unsigned long *devfns
)
1392 struct pci_dev
*tmp
= NULL
;
1393 struct iommu_group
*group
;
1395 if (!pdev
->multifunction
|| pci_acs_enabled(pdev
, REQ_ACS_FLAGS
))
1398 for_each_pci_dev(tmp
) {
1399 if (tmp
== pdev
|| tmp
->bus
!= pdev
->bus
||
1400 PCI_SLOT(tmp
->devfn
) != PCI_SLOT(pdev
->devfn
) ||
1401 pci_acs_enabled(tmp
, REQ_ACS_FLAGS
))
1404 group
= get_pci_alias_group(tmp
, devfns
);
1415 * Look for aliases to or from the given device for existing groups. DMA
1416 * aliases are only supported on the same bus, therefore the search
1417 * space is quite small (especially since we're really only looking at pcie
1418 * device, and therefore only expect multiple slots on the root complex or
1419 * downstream switch ports). It's conceivable though that a pair of
1420 * multifunction devices could have aliases between them that would cause a
1421 * loop. To prevent this, we use a bitmap to track where we've been.
1423 static struct iommu_group
*get_pci_alias_group(struct pci_dev
*pdev
,
1424 unsigned long *devfns
)
1426 struct pci_dev
*tmp
= NULL
;
1427 struct iommu_group
*group
;
1429 if (test_and_set_bit(pdev
->devfn
& 0xff, devfns
))
1432 group
= iommu_group_get(&pdev
->dev
);
1436 for_each_pci_dev(tmp
) {
1437 if (tmp
== pdev
|| tmp
->bus
!= pdev
->bus
)
1440 /* We alias them or they alias us */
1441 if (pci_devs_are_dma_aliases(pdev
, tmp
)) {
1442 group
= get_pci_alias_group(tmp
, devfns
);
1448 group
= get_pci_function_alias_group(tmp
, devfns
);
1459 struct group_for_pci_data
{
1460 struct pci_dev
*pdev
;
1461 struct iommu_group
*group
;
1465 * DMA alias iterator callback, return the last seen device. Stop and return
1466 * the IOMMU group if we find one along the way.
1468 static int get_pci_alias_or_group(struct pci_dev
*pdev
, u16 alias
, void *opaque
)
1470 struct group_for_pci_data
*data
= opaque
;
1473 data
->group
= iommu_group_get(&pdev
->dev
);
1475 return data
->group
!= NULL
;
1479 * Generic device_group call-back function. It just allocates one
1480 * iommu-group per device.
1482 struct iommu_group
*generic_device_group(struct device
*dev
)
1484 return iommu_group_alloc();
1486 EXPORT_SYMBOL_GPL(generic_device_group
);
1489 * Generic device_group call-back function. It just allocates one
1490 * iommu-group per iommu driver instance shared by every device
1491 * probed by that iommu driver.
1493 struct iommu_group
*generic_single_device_group(struct device
*dev
)
1495 struct iommu_device
*iommu
= dev
->iommu
->iommu_dev
;
1497 if (!iommu
->singleton_group
) {
1498 struct iommu_group
*group
;
1500 group
= iommu_group_alloc();
1503 iommu
->singleton_group
= group
;
1505 return iommu_group_ref_get(iommu
->singleton_group
);
1507 EXPORT_SYMBOL_GPL(generic_single_device_group
);
1510 * Use standard PCI bus topology, isolation features, and DMA alias quirks
1511 * to find or create an IOMMU group for a device.
1513 struct iommu_group
*pci_device_group(struct device
*dev
)
1515 struct pci_dev
*pdev
= to_pci_dev(dev
);
1516 struct group_for_pci_data data
;
1517 struct pci_bus
*bus
;
1518 struct iommu_group
*group
= NULL
;
1519 u64 devfns
[4] = { 0 };
1521 if (WARN_ON(!dev_is_pci(dev
)))
1522 return ERR_PTR(-EINVAL
);
1525 * Find the upstream DMA alias for the device. A device must not
1526 * be aliased due to topology in order to have its own IOMMU group.
1527 * If we find an alias along the way that already belongs to a
1530 if (pci_for_each_dma_alias(pdev
, get_pci_alias_or_group
, &data
))
1536 * Continue upstream from the point of minimum IOMMU granularity
1537 * due to aliases to the point where devices are protected from
1538 * peer-to-peer DMA by PCI ACS. Again, if we find an existing
1541 for (bus
= pdev
->bus
; !pci_is_root_bus(bus
); bus
= bus
->parent
) {
1545 if (pci_acs_path_enabled(bus
->self
, NULL
, REQ_ACS_FLAGS
))
1550 group
= iommu_group_get(&pdev
->dev
);
1556 * Look for existing groups on device aliases. If we alias another
1557 * device or another device aliases us, use the same group.
1559 group
= get_pci_alias_group(pdev
, (unsigned long *)devfns
);
1564 * Look for existing groups on non-isolated functions on the same
1565 * slot and aliases of those funcions, if any. No need to clear
1566 * the search bitmap, the tested devfns are still valid.
1568 group
= get_pci_function_alias_group(pdev
, (unsigned long *)devfns
);
1572 /* No shared group found, allocate new */
1573 return iommu_group_alloc();
1575 EXPORT_SYMBOL_GPL(pci_device_group
);
1577 /* Get the IOMMU group for device on fsl-mc bus */
1578 struct iommu_group
*fsl_mc_device_group(struct device
*dev
)
1580 struct device
*cont_dev
= fsl_mc_cont_dev(dev
);
1581 struct iommu_group
*group
;
1583 group
= iommu_group_get(cont_dev
);
1585 group
= iommu_group_alloc();
1588 EXPORT_SYMBOL_GPL(fsl_mc_device_group
);
1590 static struct iommu_domain
*__iommu_alloc_identity_domain(struct device
*dev
)
1592 const struct iommu_ops
*ops
= dev_iommu_ops(dev
);
1593 struct iommu_domain
*domain
;
1595 if (ops
->identity_domain
)
1596 return ops
->identity_domain
;
1598 /* Older drivers create the identity domain via ops->domain_alloc() */
1599 if (!ops
->domain_alloc
)
1600 return ERR_PTR(-EOPNOTSUPP
);
1602 domain
= ops
->domain_alloc(IOMMU_DOMAIN_IDENTITY
);
1606 return ERR_PTR(-ENOMEM
);
1608 iommu_domain_init(domain
, IOMMU_DOMAIN_IDENTITY
, ops
);
1612 static struct iommu_domain
*
1613 __iommu_group_alloc_default_domain(struct iommu_group
*group
, int req_type
)
1615 struct device
*dev
= iommu_group_first_dev(group
);
1616 struct iommu_domain
*dom
;
1618 if (group
->default_domain
&& group
->default_domain
->type
== req_type
)
1619 return group
->default_domain
;
1622 * When allocating the DMA API domain assume that the driver is going to
1623 * use PASID and make sure the RID's domain is PASID compatible.
1625 if (req_type
& __IOMMU_DOMAIN_PAGING
) {
1626 dom
= __iommu_paging_domain_alloc_flags(dev
, req_type
,
1627 dev
->iommu
->max_pasids
? IOMMU_HWPT_ALLOC_PASID
: 0);
1630 * If driver does not support PASID feature then
1631 * try to allocate non-PASID domain
1633 if (PTR_ERR(dom
) == -EOPNOTSUPP
)
1634 dom
= __iommu_paging_domain_alloc_flags(dev
, req_type
, 0);
1639 if (req_type
== IOMMU_DOMAIN_IDENTITY
)
1640 return __iommu_alloc_identity_domain(dev
);
1642 return ERR_PTR(-EINVAL
);
1646 * req_type of 0 means "auto" which means to select a domain based on
1647 * iommu_def_domain_type or what the driver actually supports.
1649 static struct iommu_domain
*
1650 iommu_group_alloc_default_domain(struct iommu_group
*group
, int req_type
)
1652 const struct iommu_ops
*ops
= dev_iommu_ops(iommu_group_first_dev(group
));
1653 struct iommu_domain
*dom
;
1655 lockdep_assert_held(&group
->mutex
);
1658 * Allow legacy drivers to specify the domain that will be the default
1659 * domain. This should always be either an IDENTITY/BLOCKED/PLATFORM
1660 * domain. Do not use in new drivers.
1662 if (ops
->default_domain
) {
1663 if (req_type
!= ops
->default_domain
->type
)
1664 return ERR_PTR(-EINVAL
);
1665 return ops
->default_domain
;
1669 return __iommu_group_alloc_default_domain(group
, req_type
);
1671 /* The driver gave no guidance on what type to use, try the default */
1672 dom
= __iommu_group_alloc_default_domain(group
, iommu_def_domain_type
);
1676 /* Otherwise IDENTITY and DMA_FQ defaults will try DMA */
1677 if (iommu_def_domain_type
== IOMMU_DOMAIN_DMA
)
1678 return ERR_PTR(-EINVAL
);
1679 dom
= __iommu_group_alloc_default_domain(group
, IOMMU_DOMAIN_DMA
);
1683 pr_warn("Failed to allocate default IOMMU domain of type %u for group %s - Falling back to IOMMU_DOMAIN_DMA",
1684 iommu_def_domain_type
, group
->name
);
1688 struct iommu_domain
*iommu_group_default_domain(struct iommu_group
*group
)
1690 return group
->default_domain
;
1693 static int probe_iommu_group(struct device
*dev
, void *data
)
1695 struct list_head
*group_list
= data
;
1698 mutex_lock(&iommu_probe_device_lock
);
1699 ret
= __iommu_probe_device(dev
, group_list
);
1700 mutex_unlock(&iommu_probe_device_lock
);
1707 static int iommu_bus_notifier(struct notifier_block
*nb
,
1708 unsigned long action
, void *data
)
1710 struct device
*dev
= data
;
1712 if (action
== BUS_NOTIFY_ADD_DEVICE
) {
1715 ret
= iommu_probe_device(dev
);
1716 return (ret
) ? NOTIFY_DONE
: NOTIFY_OK
;
1717 } else if (action
== BUS_NOTIFY_REMOVED_DEVICE
) {
1718 iommu_release_device(dev
);
1726 * Combine the driver's chosen def_domain_type across all the devices in a
1727 * group. Drivers must give a consistent result.
1729 static int iommu_get_def_domain_type(struct iommu_group
*group
,
1730 struct device
*dev
, int cur_type
)
1732 const struct iommu_ops
*ops
= dev_iommu_ops(dev
);
1735 if (ops
->default_domain
) {
1737 * Drivers that declare a global static default_domain will
1738 * always choose that.
1740 type
= ops
->default_domain
->type
;
1742 if (ops
->def_domain_type
)
1743 type
= ops
->def_domain_type(dev
);
1747 if (!type
|| cur_type
== type
)
1752 dev_err_ratelimited(
1754 "IOMMU driver error, requesting conflicting def_domain_type, %s and %s, for devices in group %u.\n",
1755 iommu_domain_type_str(cur_type
), iommu_domain_type_str(type
),
1759 * Try to recover, drivers are allowed to force IDENITY or DMA, IDENTITY
1762 if (type
== IOMMU_DOMAIN_IDENTITY
)
1768 * A target_type of 0 will select the best domain type. 0 can be returned in
1769 * this case meaning the global default should be used.
1771 static int iommu_get_default_domain_type(struct iommu_group
*group
,
1774 struct device
*untrusted
= NULL
;
1775 struct group_device
*gdev
;
1776 int driver_type
= 0;
1778 lockdep_assert_held(&group
->mutex
);
1781 * ARM32 drivers supporting CONFIG_ARM_DMA_USE_IOMMU can declare an
1782 * identity_domain and it will automatically become their default
1783 * domain. Later on ARM_DMA_USE_IOMMU will install its UNMANAGED domain.
1784 * Override the selection to IDENTITY.
1786 if (IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU
)) {
1787 static_assert(!(IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU
) &&
1788 IS_ENABLED(CONFIG_IOMMU_DMA
)));
1789 driver_type
= IOMMU_DOMAIN_IDENTITY
;
1792 for_each_group_device(group
, gdev
) {
1793 driver_type
= iommu_get_def_domain_type(group
, gdev
->dev
,
1796 if (dev_is_pci(gdev
->dev
) && to_pci_dev(gdev
->dev
)->untrusted
) {
1798 * No ARM32 using systems will set untrusted, it cannot
1801 if (WARN_ON(IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU
)))
1803 untrusted
= gdev
->dev
;
1808 * If the common dma ops are not selected in kconfig then we cannot use
1809 * IOMMU_DOMAIN_DMA at all. Force IDENTITY if nothing else has been
1812 if (!IS_ENABLED(CONFIG_IOMMU_DMA
)) {
1813 if (WARN_ON(driver_type
== IOMMU_DOMAIN_DMA
))
1816 driver_type
= IOMMU_DOMAIN_IDENTITY
;
1820 if (driver_type
&& driver_type
!= IOMMU_DOMAIN_DMA
) {
1821 dev_err_ratelimited(
1823 "Device is not trusted, but driver is overriding group %u to %s, refusing to probe.\n",
1824 group
->id
, iommu_domain_type_str(driver_type
));
1827 driver_type
= IOMMU_DOMAIN_DMA
;
1831 if (driver_type
&& target_type
!= driver_type
)
1838 static void iommu_group_do_probe_finalize(struct device
*dev
)
1840 const struct iommu_ops
*ops
= dev_iommu_ops(dev
);
1842 if (ops
->probe_finalize
)
1843 ops
->probe_finalize(dev
);
1846 static int bus_iommu_probe(const struct bus_type
*bus
)
1848 struct iommu_group
*group
, *next
;
1849 LIST_HEAD(group_list
);
1852 ret
= bus_for_each_dev(bus
, NULL
, &group_list
, probe_iommu_group
);
1856 list_for_each_entry_safe(group
, next
, &group_list
, entry
) {
1857 struct group_device
*gdev
;
1859 mutex_lock(&group
->mutex
);
1861 /* Remove item from the list */
1862 list_del_init(&group
->entry
);
1865 * We go to the trouble of deferred default domain creation so
1866 * that the cross-group default domain type and the setup of the
1867 * IOMMU_RESV_DIRECT will work correctly in non-hotpug scenarios.
1869 ret
= iommu_setup_default_domain(group
, 0);
1871 mutex_unlock(&group
->mutex
);
1874 for_each_group_device(group
, gdev
)
1875 iommu_setup_dma_ops(gdev
->dev
);
1876 mutex_unlock(&group
->mutex
);
1879 * FIXME: Mis-locked because the ops->probe_finalize() call-back
1880 * of some IOMMU drivers calls arm_iommu_attach_device() which
1881 * in-turn might call back into IOMMU core code, where it tries
1882 * to take group->mutex, resulting in a deadlock.
1884 for_each_group_device(group
, gdev
)
1885 iommu_group_do_probe_finalize(gdev
->dev
);
1892 * device_iommu_capable() - check for a general IOMMU capability
1893 * @dev: device to which the capability would be relevant, if available
1894 * @cap: IOMMU capability
1896 * Return: true if an IOMMU is present and supports the given capability
1897 * for the given device, otherwise false.
1899 bool device_iommu_capable(struct device
*dev
, enum iommu_cap cap
)
1901 const struct iommu_ops
*ops
;
1903 if (!dev_has_iommu(dev
))
1906 ops
= dev_iommu_ops(dev
);
1910 return ops
->capable(dev
, cap
);
1912 EXPORT_SYMBOL_GPL(device_iommu_capable
);
1915 * iommu_group_has_isolated_msi() - Compute msi_device_has_isolated_msi()
1917 * @group: Group to query
1919 * IOMMU groups should not have differing values of
1920 * msi_device_has_isolated_msi() for devices in a group. However nothing
1921 * directly prevents this, so ensure mistakes don't result in isolation failures
1922 * by checking that all the devices are the same.
1924 bool iommu_group_has_isolated_msi(struct iommu_group
*group
)
1926 struct group_device
*group_dev
;
1929 mutex_lock(&group
->mutex
);
1930 for_each_group_device(group
, group_dev
)
1931 ret
&= msi_device_has_isolated_msi(group_dev
->dev
);
1932 mutex_unlock(&group
->mutex
);
1935 EXPORT_SYMBOL_GPL(iommu_group_has_isolated_msi
);
1938 * iommu_set_fault_handler() - set a fault handler for an iommu domain
1939 * @domain: iommu domain
1940 * @handler: fault handler
1941 * @token: user data, will be passed back to the fault handler
1943 * This function should be used by IOMMU users which want to be notified
1944 * whenever an IOMMU fault happens.
1946 * The fault handler itself should return 0 on success, and an appropriate
1947 * error code otherwise.
1949 void iommu_set_fault_handler(struct iommu_domain
*domain
,
1950 iommu_fault_handler_t handler
,
1955 domain
->handler
= handler
;
1956 domain
->handler_token
= token
;
1958 EXPORT_SYMBOL_GPL(iommu_set_fault_handler
);
1960 static void iommu_domain_init(struct iommu_domain
*domain
, unsigned int type
,
1961 const struct iommu_ops
*ops
)
1963 domain
->type
= type
;
1964 domain
->owner
= ops
;
1966 domain
->ops
= ops
->default_domain_ops
;
1969 * If not already set, assume all sizes by default; the driver
1970 * may override this later
1972 if (!domain
->pgsize_bitmap
)
1973 domain
->pgsize_bitmap
= ops
->pgsize_bitmap
;
1976 static struct iommu_domain
*
1977 __iommu_paging_domain_alloc_flags(struct device
*dev
, unsigned int type
,
1980 const struct iommu_ops
*ops
;
1981 struct iommu_domain
*domain
;
1983 if (!dev_has_iommu(dev
))
1984 return ERR_PTR(-ENODEV
);
1986 ops
= dev_iommu_ops(dev
);
1988 if (ops
->domain_alloc_paging
&& !flags
)
1989 domain
= ops
->domain_alloc_paging(dev
);
1990 else if (ops
->domain_alloc_paging_flags
)
1991 domain
= ops
->domain_alloc_paging_flags(dev
, flags
, NULL
);
1992 else if (ops
->domain_alloc
&& !flags
)
1993 domain
= ops
->domain_alloc(IOMMU_DOMAIN_UNMANAGED
);
1995 return ERR_PTR(-EOPNOTSUPP
);
2000 return ERR_PTR(-ENOMEM
);
2002 iommu_domain_init(domain
, type
, ops
);
2007 * iommu_paging_domain_alloc_flags() - Allocate a paging domain
2008 * @dev: device for which the domain is allocated
2009 * @flags: Bitmap of iommufd_hwpt_alloc_flags
2011 * Allocate a paging domain which will be managed by a kernel driver. Return
2012 * allocated domain if successful, or an ERR pointer for failure.
2014 struct iommu_domain
*iommu_paging_domain_alloc_flags(struct device
*dev
,
2017 return __iommu_paging_domain_alloc_flags(dev
,
2018 IOMMU_DOMAIN_UNMANAGED
, flags
);
2020 EXPORT_SYMBOL_GPL(iommu_paging_domain_alloc_flags
);
2022 void iommu_domain_free(struct iommu_domain
*domain
)
2024 if (domain
->type
== IOMMU_DOMAIN_SVA
)
2026 iommu_put_dma_cookie(domain
);
2027 if (domain
->ops
->free
)
2028 domain
->ops
->free(domain
);
2030 EXPORT_SYMBOL_GPL(iommu_domain_free
);
2033 * Put the group's domain back to the appropriate core-owned domain - either the
2034 * standard kernel-mode DMA configuration or an all-DMA-blocked domain.
2036 static void __iommu_group_set_core_domain(struct iommu_group
*group
)
2038 struct iommu_domain
*new_domain
;
2041 new_domain
= group
->blocking_domain
;
2043 new_domain
= group
->default_domain
;
2045 __iommu_group_set_domain_nofail(group
, new_domain
);
2048 static int __iommu_attach_device(struct iommu_domain
*domain
,
2053 if (unlikely(domain
->ops
->attach_dev
== NULL
))
2056 ret
= domain
->ops
->attach_dev(domain
, dev
);
2059 dev
->iommu
->attach_deferred
= 0;
2060 trace_attach_device_to_domain(dev
);
2065 * iommu_attach_device - Attach an IOMMU domain to a device
2066 * @domain: IOMMU domain to attach
2067 * @dev: Device that will be attached
2069 * Returns 0 on success and error code on failure
2071 * Note that EINVAL can be treated as a soft failure, indicating
2072 * that certain configuration of the domain is incompatible with
2073 * the device. In this case attaching a different domain to the
2074 * device may succeed.
2076 int iommu_attach_device(struct iommu_domain
*domain
, struct device
*dev
)
2078 /* Caller must be a probed driver on dev */
2079 struct iommu_group
*group
= dev
->iommu_group
;
2086 * Lock the group to make sure the device-count doesn't
2087 * change while we are attaching
2089 mutex_lock(&group
->mutex
);
2091 if (list_count_nodes(&group
->devices
) != 1)
2094 ret
= __iommu_attach_group(domain
, group
);
2097 mutex_unlock(&group
->mutex
);
2100 EXPORT_SYMBOL_GPL(iommu_attach_device
);
2102 int iommu_deferred_attach(struct device
*dev
, struct iommu_domain
*domain
)
2104 if (dev
->iommu
&& dev
->iommu
->attach_deferred
)
2105 return __iommu_attach_device(domain
, dev
);
2110 void iommu_detach_device(struct iommu_domain
*domain
, struct device
*dev
)
2112 /* Caller must be a probed driver on dev */
2113 struct iommu_group
*group
= dev
->iommu_group
;
2118 mutex_lock(&group
->mutex
);
2119 if (WARN_ON(domain
!= group
->domain
) ||
2120 WARN_ON(list_count_nodes(&group
->devices
) != 1))
2122 __iommu_group_set_core_domain(group
);
2125 mutex_unlock(&group
->mutex
);
2127 EXPORT_SYMBOL_GPL(iommu_detach_device
);
2129 struct iommu_domain
*iommu_get_domain_for_dev(struct device
*dev
)
2131 /* Caller must be a probed driver on dev */
2132 struct iommu_group
*group
= dev
->iommu_group
;
2137 return group
->domain
;
2139 EXPORT_SYMBOL_GPL(iommu_get_domain_for_dev
);
2142 * For IOMMU_DOMAIN_DMA implementations which already provide their own
2143 * guarantees that the group and its default domain are valid and correct.
2145 struct iommu_domain
*iommu_get_dma_domain(struct device
*dev
)
2147 return dev
->iommu_group
->default_domain
;
2150 static int __iommu_attach_group(struct iommu_domain
*domain
,
2151 struct iommu_group
*group
)
2155 if (group
->domain
&& group
->domain
!= group
->default_domain
&&
2156 group
->domain
!= group
->blocking_domain
)
2159 dev
= iommu_group_first_dev(group
);
2160 if (!dev_has_iommu(dev
) || dev_iommu_ops(dev
) != domain
->owner
)
2163 return __iommu_group_set_domain(group
, domain
);
2167 * iommu_attach_group - Attach an IOMMU domain to an IOMMU group
2168 * @domain: IOMMU domain to attach
2169 * @group: IOMMU group that will be attached
2171 * Returns 0 on success and error code on failure
2173 * Note that EINVAL can be treated as a soft failure, indicating
2174 * that certain configuration of the domain is incompatible with
2175 * the group. In this case attaching a different domain to the
2176 * group may succeed.
2178 int iommu_attach_group(struct iommu_domain
*domain
, struct iommu_group
*group
)
2182 mutex_lock(&group
->mutex
);
2183 ret
= __iommu_attach_group(domain
, group
);
2184 mutex_unlock(&group
->mutex
);
2188 EXPORT_SYMBOL_GPL(iommu_attach_group
);
2191 * iommu_group_replace_domain - replace the domain that a group is attached to
2192 * @group: IOMMU group that will be attached to the new domain
2193 * @new_domain: new IOMMU domain to replace with
2195 * This API allows the group to switch domains without being forced to go to
2196 * the blocking domain in-between.
2198 * If the currently attached domain is a core domain (e.g. a default_domain),
2199 * it will act just like the iommu_attach_group().
2201 int iommu_group_replace_domain(struct iommu_group
*group
,
2202 struct iommu_domain
*new_domain
)
2209 mutex_lock(&group
->mutex
);
2210 ret
= __iommu_group_set_domain(group
, new_domain
);
2211 mutex_unlock(&group
->mutex
);
2214 EXPORT_SYMBOL_NS_GPL(iommu_group_replace_domain
, "IOMMUFD_INTERNAL");
2216 static int __iommu_device_set_domain(struct iommu_group
*group
,
2218 struct iommu_domain
*new_domain
,
2224 * If the device requires IOMMU_RESV_DIRECT then we cannot allow
2225 * the blocking domain to be attached as it does not contain the
2226 * required 1:1 mapping. This test effectively excludes the device
2227 * being used with iommu_group_claim_dma_owner() which will block
2228 * vfio and iommufd as well.
2230 if (dev
->iommu
->require_direct
&&
2231 (new_domain
->type
== IOMMU_DOMAIN_BLOCKED
||
2232 new_domain
== group
->blocking_domain
)) {
2234 "Firmware has requested this device have a 1:1 IOMMU mapping, rejecting configuring the device without a 1:1 mapping. Contact your platform vendor.\n");
2238 if (dev
->iommu
->attach_deferred
) {
2239 if (new_domain
== group
->default_domain
)
2241 dev
->iommu
->attach_deferred
= 0;
2244 ret
= __iommu_attach_device(new_domain
, dev
);
2247 * If we have a blocking domain then try to attach that in hopes
2248 * of avoiding a UAF. Modern drivers should implement blocking
2249 * domains as global statics that cannot fail.
2251 if ((flags
& IOMMU_SET_DOMAIN_MUST_SUCCEED
) &&
2252 group
->blocking_domain
&&
2253 group
->blocking_domain
!= new_domain
)
2254 __iommu_attach_device(group
->blocking_domain
, dev
);
2261 * If 0 is returned the group's domain is new_domain. If an error is returned
2262 * then the group's domain will be set back to the existing domain unless
2263 * IOMMU_SET_DOMAIN_MUST_SUCCEED, otherwise an error is returned and the group's
2264 * domains is left inconsistent. This is a driver bug to fail attach with a
2265 * previously good domain. We try to avoid a kernel UAF because of this.
2267 * IOMMU groups are really the natural working unit of the IOMMU, but the IOMMU
2268 * API works on domains and devices. Bridge that gap by iterating over the
2269 * devices in a group. Ideally we'd have a single device which represents the
2270 * requestor ID of the group, but we also allow IOMMU drivers to create policy
2271 * defined minimum sets, where the physical hardware may be able to distiguish
2272 * members, but we wish to group them at a higher level (ex. untrusted
2273 * multi-function PCI devices). Thus we attach each device.
2275 static int __iommu_group_set_domain_internal(struct iommu_group
*group
,
2276 struct iommu_domain
*new_domain
,
2279 struct group_device
*last_gdev
;
2280 struct group_device
*gdev
;
2284 lockdep_assert_held(&group
->mutex
);
2286 if (group
->domain
== new_domain
)
2289 if (WARN_ON(!new_domain
))
2293 * Changing the domain is done by calling attach_dev() on the new
2294 * domain. This switch does not have to be atomic and DMA can be
2295 * discarded during the transition. DMA must only be able to access
2296 * either new_domain or group->domain, never something else.
2299 for_each_group_device(group
, gdev
) {
2300 ret
= __iommu_device_set_domain(group
, gdev
->dev
, new_domain
,
2305 * Keep trying the other devices in the group. If a
2306 * driver fails attach to an otherwise good domain, and
2307 * does not support blocking domains, it should at least
2308 * drop its reference on the current domain so we don't
2311 if (flags
& IOMMU_SET_DOMAIN_MUST_SUCCEED
)
2316 group
->domain
= new_domain
;
2321 * This is called in error unwind paths. A well behaved driver should
2322 * always allow us to attach to a domain that was already attached.
2325 for_each_group_device(group
, gdev
) {
2327 * A NULL domain can happen only for first probe, in which case
2328 * we leave group->domain as NULL and let release clean
2332 WARN_ON(__iommu_device_set_domain(
2333 group
, gdev
->dev
, group
->domain
,
2334 IOMMU_SET_DOMAIN_MUST_SUCCEED
));
2335 if (gdev
== last_gdev
)
2341 void iommu_detach_group(struct iommu_domain
*domain
, struct iommu_group
*group
)
2343 mutex_lock(&group
->mutex
);
2344 __iommu_group_set_core_domain(group
);
2345 mutex_unlock(&group
->mutex
);
2347 EXPORT_SYMBOL_GPL(iommu_detach_group
);
2349 phys_addr_t
iommu_iova_to_phys(struct iommu_domain
*domain
, dma_addr_t iova
)
2351 if (domain
->type
== IOMMU_DOMAIN_IDENTITY
)
2354 if (domain
->type
== IOMMU_DOMAIN_BLOCKED
)
2357 return domain
->ops
->iova_to_phys(domain
, iova
);
2359 EXPORT_SYMBOL_GPL(iommu_iova_to_phys
);
2361 static size_t iommu_pgsize(struct iommu_domain
*domain
, unsigned long iova
,
2362 phys_addr_t paddr
, size_t size
, size_t *count
)
2364 unsigned int pgsize_idx
, pgsize_idx_next
;
2365 unsigned long pgsizes
;
2366 size_t offset
, pgsize
, pgsize_next
;
2367 unsigned long addr_merge
= paddr
| iova
;
2369 /* Page sizes supported by the hardware and small enough for @size */
2370 pgsizes
= domain
->pgsize_bitmap
& GENMASK(__fls(size
), 0);
2372 /* Constrain the page sizes further based on the maximum alignment */
2373 if (likely(addr_merge
))
2374 pgsizes
&= GENMASK(__ffs(addr_merge
), 0);
2376 /* Make sure we have at least one suitable page size */
2379 /* Pick the biggest page size remaining */
2380 pgsize_idx
= __fls(pgsizes
);
2381 pgsize
= BIT(pgsize_idx
);
2385 /* Find the next biggest support page size, if it exists */
2386 pgsizes
= domain
->pgsize_bitmap
& ~GENMASK(pgsize_idx
, 0);
2390 pgsize_idx_next
= __ffs(pgsizes
);
2391 pgsize_next
= BIT(pgsize_idx_next
);
2394 * There's no point trying a bigger page size unless the virtual
2395 * and physical addresses are similarly offset within the larger page.
2397 if ((iova
^ paddr
) & (pgsize_next
- 1))
2400 /* Calculate the offset to the next page size alignment boundary */
2401 offset
= pgsize_next
- (addr_merge
& (pgsize_next
- 1));
2404 * If size is big enough to accommodate the larger page, reduce
2405 * the number of smaller pages.
2407 if (offset
+ pgsize_next
<= size
)
2411 *count
= size
>> pgsize_idx
;
2415 static int __iommu_map(struct iommu_domain
*domain
, unsigned long iova
,
2416 phys_addr_t paddr
, size_t size
, int prot
, gfp_t gfp
)
2418 const struct iommu_domain_ops
*ops
= domain
->ops
;
2419 unsigned long orig_iova
= iova
;
2420 unsigned int min_pagesz
;
2421 size_t orig_size
= size
;
2422 phys_addr_t orig_paddr
= paddr
;
2425 if (unlikely(!(domain
->type
& __IOMMU_DOMAIN_PAGING
)))
2428 if (WARN_ON(!ops
->map_pages
|| domain
->pgsize_bitmap
== 0UL))
2431 /* find out the minimum page size supported */
2432 min_pagesz
= 1 << __ffs(domain
->pgsize_bitmap
);
2435 * both the virtual address and the physical one, as well as
2436 * the size of the mapping, must be aligned (at least) to the
2437 * size of the smallest page supported by the hardware
2439 if (!IS_ALIGNED(iova
| paddr
| size
, min_pagesz
)) {
2440 pr_err("unaligned: iova 0x%lx pa %pa size 0x%zx min_pagesz 0x%x\n",
2441 iova
, &paddr
, size
, min_pagesz
);
2445 pr_debug("map: iova 0x%lx pa %pa size 0x%zx\n", iova
, &paddr
, size
);
2448 size_t pgsize
, count
, mapped
= 0;
2450 pgsize
= iommu_pgsize(domain
, iova
, paddr
, size
, &count
);
2452 pr_debug("mapping: iova 0x%lx pa %pa pgsize 0x%zx count %zu\n",
2453 iova
, &paddr
, pgsize
, count
);
2454 ret
= ops
->map_pages(domain
, iova
, paddr
, pgsize
, count
, prot
,
2457 * Some pages may have been mapped, even if an error occurred,
2458 * so we should account for those so they can be unmapped.
2469 /* unroll mapping in case something went wrong */
2471 iommu_unmap(domain
, orig_iova
, orig_size
- size
);
2473 trace_map(orig_iova
, orig_paddr
, orig_size
);
2478 int iommu_map(struct iommu_domain
*domain
, unsigned long iova
,
2479 phys_addr_t paddr
, size_t size
, int prot
, gfp_t gfp
)
2481 const struct iommu_domain_ops
*ops
= domain
->ops
;
2484 might_sleep_if(gfpflags_allow_blocking(gfp
));
2486 /* Discourage passing strange GFP flags */
2487 if (WARN_ON_ONCE(gfp
& (__GFP_COMP
| __GFP_DMA
| __GFP_DMA32
|
2491 ret
= __iommu_map(domain
, iova
, paddr
, size
, prot
, gfp
);
2492 if (ret
== 0 && ops
->iotlb_sync_map
) {
2493 ret
= ops
->iotlb_sync_map(domain
, iova
, size
);
2501 /* undo mappings already done */
2502 iommu_unmap(domain
, iova
, size
);
2506 EXPORT_SYMBOL_GPL(iommu_map
);
2508 static size_t __iommu_unmap(struct iommu_domain
*domain
,
2509 unsigned long iova
, size_t size
,
2510 struct iommu_iotlb_gather
*iotlb_gather
)
2512 const struct iommu_domain_ops
*ops
= domain
->ops
;
2513 size_t unmapped_page
, unmapped
= 0;
2514 unsigned long orig_iova
= iova
;
2515 unsigned int min_pagesz
;
2517 if (unlikely(!(domain
->type
& __IOMMU_DOMAIN_PAGING
)))
2520 if (WARN_ON(!ops
->unmap_pages
|| domain
->pgsize_bitmap
== 0UL))
2523 /* find out the minimum page size supported */
2524 min_pagesz
= 1 << __ffs(domain
->pgsize_bitmap
);
2527 * The virtual address, as well as the size of the mapping, must be
2528 * aligned (at least) to the size of the smallest page supported
2531 if (!IS_ALIGNED(iova
| size
, min_pagesz
)) {
2532 pr_err("unaligned: iova 0x%lx size 0x%zx min_pagesz 0x%x\n",
2533 iova
, size
, min_pagesz
);
2537 pr_debug("unmap this: iova 0x%lx size 0x%zx\n", iova
, size
);
2540 * Keep iterating until we either unmap 'size' bytes (or more)
2541 * or we hit an area that isn't mapped.
2543 while (unmapped
< size
) {
2544 size_t pgsize
, count
;
2546 pgsize
= iommu_pgsize(domain
, iova
, iova
, size
- unmapped
, &count
);
2547 unmapped_page
= ops
->unmap_pages(domain
, iova
, pgsize
, count
, iotlb_gather
);
2551 pr_debug("unmapped: iova 0x%lx size 0x%zx\n",
2552 iova
, unmapped_page
);
2554 iova
+= unmapped_page
;
2555 unmapped
+= unmapped_page
;
2558 trace_unmap(orig_iova
, size
, unmapped
);
2563 * iommu_unmap() - Remove mappings from a range of IOVA
2564 * @domain: Domain to manipulate
2565 * @iova: IO virtual address to start
2566 * @size: Length of the range starting from @iova
2568 * iommu_unmap() will remove a translation created by iommu_map(). It cannot
2569 * subdivide a mapping created by iommu_map(), so it should be called with IOVA
2570 * ranges that match what was passed to iommu_map(). The range can aggregate
2571 * contiguous iommu_map() calls so long as no individual range is split.
2573 * Returns: Number of bytes of IOVA unmapped. iova + res will be the point
2574 * unmapping stopped.
2576 size_t iommu_unmap(struct iommu_domain
*domain
,
2577 unsigned long iova
, size_t size
)
2579 struct iommu_iotlb_gather iotlb_gather
;
2582 iommu_iotlb_gather_init(&iotlb_gather
);
2583 ret
= __iommu_unmap(domain
, iova
, size
, &iotlb_gather
);
2584 iommu_iotlb_sync(domain
, &iotlb_gather
);
2588 EXPORT_SYMBOL_GPL(iommu_unmap
);
2590 size_t iommu_unmap_fast(struct iommu_domain
*domain
,
2591 unsigned long iova
, size_t size
,
2592 struct iommu_iotlb_gather
*iotlb_gather
)
2594 return __iommu_unmap(domain
, iova
, size
, iotlb_gather
);
2596 EXPORT_SYMBOL_GPL(iommu_unmap_fast
);
2598 ssize_t
iommu_map_sg(struct iommu_domain
*domain
, unsigned long iova
,
2599 struct scatterlist
*sg
, unsigned int nents
, int prot
,
2602 const struct iommu_domain_ops
*ops
= domain
->ops
;
2603 size_t len
= 0, mapped
= 0;
2608 might_sleep_if(gfpflags_allow_blocking(gfp
));
2610 /* Discourage passing strange GFP flags */
2611 if (WARN_ON_ONCE(gfp
& (__GFP_COMP
| __GFP_DMA
| __GFP_DMA32
|
2615 while (i
<= nents
) {
2616 phys_addr_t s_phys
= sg_phys(sg
);
2618 if (len
&& s_phys
!= start
+ len
) {
2619 ret
= __iommu_map(domain
, iova
+ mapped
, start
,
2629 if (sg_dma_is_bus_address(sg
))
2644 if (ops
->iotlb_sync_map
) {
2645 ret
= ops
->iotlb_sync_map(domain
, iova
, mapped
);
2652 /* undo mappings already done */
2653 iommu_unmap(domain
, iova
, mapped
);
2657 EXPORT_SYMBOL_GPL(iommu_map_sg
);
2660 * report_iommu_fault() - report about an IOMMU fault to the IOMMU framework
2661 * @domain: the iommu domain where the fault has happened
2662 * @dev: the device where the fault has happened
2663 * @iova: the faulting address
2664 * @flags: mmu fault flags (e.g. IOMMU_FAULT_READ/IOMMU_FAULT_WRITE/...)
2666 * This function should be called by the low-level IOMMU implementations
2667 * whenever IOMMU faults happen, to allow high-level users, that are
2668 * interested in such events, to know about them.
2670 * This event may be useful for several possible use cases:
2671 * - mere logging of the event
2672 * - dynamic TLB/PTE loading
2673 * - if restarting of the faulting device is required
2675 * Returns 0 on success and an appropriate error code otherwise (if dynamic
2676 * PTE/TLB loading will one day be supported, implementations will be able
2677 * to tell whether it succeeded or not according to this return value).
2679 * Specifically, -ENOSYS is returned if a fault handler isn't installed
2680 * (though fault handlers can also return -ENOSYS, in case they want to
2681 * elicit the default behavior of the IOMMU drivers).
2683 int report_iommu_fault(struct iommu_domain
*domain
, struct device
*dev
,
2684 unsigned long iova
, int flags
)
2689 * if upper layers showed interest and installed a fault handler,
2692 if (domain
->handler
)
2693 ret
= domain
->handler(domain
, dev
, iova
, flags
,
2694 domain
->handler_token
);
2696 trace_io_page_fault(dev
, iova
, flags
);
2699 EXPORT_SYMBOL_GPL(report_iommu_fault
);
2701 static int __init
iommu_init(void)
2703 iommu_group_kset
= kset_create_and_add("iommu_groups",
2705 BUG_ON(!iommu_group_kset
);
2707 iommu_debugfs_setup();
2711 core_initcall(iommu_init
);
2713 int iommu_set_pgtable_quirks(struct iommu_domain
*domain
,
2714 unsigned long quirk
)
2716 if (domain
->type
!= IOMMU_DOMAIN_UNMANAGED
)
2718 if (!domain
->ops
->set_pgtable_quirks
)
2720 return domain
->ops
->set_pgtable_quirks(domain
, quirk
);
2722 EXPORT_SYMBOL_GPL(iommu_set_pgtable_quirks
);
2725 * iommu_get_resv_regions - get reserved regions
2726 * @dev: device for which to get reserved regions
2727 * @list: reserved region list for device
2729 * This returns a list of reserved IOVA regions specific to this device.
2730 * A domain user should not map IOVA in these ranges.
2732 void iommu_get_resv_regions(struct device
*dev
, struct list_head
*list
)
2734 const struct iommu_ops
*ops
= dev_iommu_ops(dev
);
2736 if (ops
->get_resv_regions
)
2737 ops
->get_resv_regions(dev
, list
);
2739 EXPORT_SYMBOL_GPL(iommu_get_resv_regions
);
2742 * iommu_put_resv_regions - release reserved regions
2743 * @dev: device for which to free reserved regions
2744 * @list: reserved region list for device
2746 * This releases a reserved region list acquired by iommu_get_resv_regions().
2748 void iommu_put_resv_regions(struct device
*dev
, struct list_head
*list
)
2750 struct iommu_resv_region
*entry
, *next
;
2752 list_for_each_entry_safe(entry
, next
, list
, list
) {
2754 entry
->free(dev
, entry
);
2759 EXPORT_SYMBOL(iommu_put_resv_regions
);
2761 struct iommu_resv_region
*iommu_alloc_resv_region(phys_addr_t start
,
2762 size_t length
, int prot
,
2763 enum iommu_resv_type type
,
2766 struct iommu_resv_region
*region
;
2768 region
= kzalloc(sizeof(*region
), gfp
);
2772 INIT_LIST_HEAD(®ion
->list
);
2773 region
->start
= start
;
2774 region
->length
= length
;
2775 region
->prot
= prot
;
2776 region
->type
= type
;
2779 EXPORT_SYMBOL_GPL(iommu_alloc_resv_region
);
2781 void iommu_set_default_passthrough(bool cmd_line
)
2784 iommu_cmd_line
|= IOMMU_CMD_LINE_DMA_API
;
2785 iommu_def_domain_type
= IOMMU_DOMAIN_IDENTITY
;
2788 void iommu_set_default_translated(bool cmd_line
)
2791 iommu_cmd_line
|= IOMMU_CMD_LINE_DMA_API
;
2792 iommu_def_domain_type
= IOMMU_DOMAIN_DMA
;
2795 bool iommu_default_passthrough(void)
2797 return iommu_def_domain_type
== IOMMU_DOMAIN_IDENTITY
;
2799 EXPORT_SYMBOL_GPL(iommu_default_passthrough
);
2801 const struct iommu_ops
*iommu_ops_from_fwnode(const struct fwnode_handle
*fwnode
)
2803 const struct iommu_ops
*ops
= NULL
;
2804 struct iommu_device
*iommu
;
2806 spin_lock(&iommu_device_lock
);
2807 list_for_each_entry(iommu
, &iommu_device_list
, list
)
2808 if (iommu
->fwnode
== fwnode
) {
2812 spin_unlock(&iommu_device_lock
);
2816 int iommu_fwspec_init(struct device
*dev
, struct fwnode_handle
*iommu_fwnode
)
2818 const struct iommu_ops
*ops
= iommu_ops_from_fwnode(iommu_fwnode
);
2819 struct iommu_fwspec
*fwspec
= dev_iommu_fwspec_get(dev
);
2822 return -EPROBE_DEFER
;
2825 return ops
== iommu_fwspec_ops(fwspec
) ? 0 : -EINVAL
;
2827 if (!dev_iommu_get(dev
))
2830 /* Preallocate for the overwhelmingly common case of 1 ID */
2831 fwspec
= kzalloc(struct_size(fwspec
, ids
, 1), GFP_KERNEL
);
2835 fwnode_handle_get(iommu_fwnode
);
2836 fwspec
->iommu_fwnode
= iommu_fwnode
;
2837 dev_iommu_fwspec_set(dev
, fwspec
);
2840 EXPORT_SYMBOL_GPL(iommu_fwspec_init
);
2842 void iommu_fwspec_free(struct device
*dev
)
2844 struct iommu_fwspec
*fwspec
= dev_iommu_fwspec_get(dev
);
2847 fwnode_handle_put(fwspec
->iommu_fwnode
);
2849 dev_iommu_fwspec_set(dev
, NULL
);
2852 EXPORT_SYMBOL_GPL(iommu_fwspec_free
);
2854 int iommu_fwspec_add_ids(struct device
*dev
, const u32
*ids
, int num_ids
)
2856 struct iommu_fwspec
*fwspec
= dev_iommu_fwspec_get(dev
);
2862 new_num
= fwspec
->num_ids
+ num_ids
;
2864 fwspec
= krealloc(fwspec
, struct_size(fwspec
, ids
, new_num
),
2869 dev_iommu_fwspec_set(dev
, fwspec
);
2872 for (i
= 0; i
< num_ids
; i
++)
2873 fwspec
->ids
[fwspec
->num_ids
+ i
] = ids
[i
];
2875 fwspec
->num_ids
= new_num
;
2878 EXPORT_SYMBOL_GPL(iommu_fwspec_add_ids
);
2881 * Per device IOMMU features.
2883 int iommu_dev_enable_feature(struct device
*dev
, enum iommu_dev_features feat
)
2885 if (dev_has_iommu(dev
)) {
2886 const struct iommu_ops
*ops
= dev_iommu_ops(dev
);
2888 if (ops
->dev_enable_feat
)
2889 return ops
->dev_enable_feat(dev
, feat
);
2894 EXPORT_SYMBOL_GPL(iommu_dev_enable_feature
);
2897 * The device drivers should do the necessary cleanups before calling this.
2899 int iommu_dev_disable_feature(struct device
*dev
, enum iommu_dev_features feat
)
2901 if (dev_has_iommu(dev
)) {
2902 const struct iommu_ops
*ops
= dev_iommu_ops(dev
);
2904 if (ops
->dev_disable_feat
)
2905 return ops
->dev_disable_feat(dev
, feat
);
2910 EXPORT_SYMBOL_GPL(iommu_dev_disable_feature
);
2913 * iommu_setup_default_domain - Set the default_domain for the group
2914 * @group: Group to change
2915 * @target_type: Domain type to set as the default_domain
2917 * Allocate a default domain and set it as the current domain on the group. If
2918 * the group already has a default domain it will be changed to the target_type.
2919 * When target_type is 0 the default domain is selected based on driver and
2920 * system preferences.
2922 static int iommu_setup_default_domain(struct iommu_group
*group
,
2925 struct iommu_domain
*old_dom
= group
->default_domain
;
2926 struct group_device
*gdev
;
2927 struct iommu_domain
*dom
;
2932 lockdep_assert_held(&group
->mutex
);
2934 req_type
= iommu_get_default_domain_type(group
, target_type
);
2938 dom
= iommu_group_alloc_default_domain(group
, req_type
);
2940 return PTR_ERR(dom
);
2942 if (group
->default_domain
== dom
)
2945 if (iommu_is_dma_domain(dom
)) {
2946 ret
= iommu_get_dma_cookie(dom
);
2948 iommu_domain_free(dom
);
2954 * IOMMU_RESV_DIRECT and IOMMU_RESV_DIRECT_RELAXABLE regions must be
2955 * mapped before their device is attached, in order to guarantee
2956 * continuity with any FW activity
2958 direct_failed
= false;
2959 for_each_group_device(group
, gdev
) {
2960 if (iommu_create_device_direct_mappings(dom
, gdev
->dev
)) {
2961 direct_failed
= true;
2963 gdev
->dev
->iommu
->iommu_dev
->dev
,
2964 "IOMMU driver was not able to establish FW requested direct mapping.");
2968 /* We must set default_domain early for __iommu_device_set_domain */
2969 group
->default_domain
= dom
;
2970 if (!group
->domain
) {
2972 * Drivers are not allowed to fail the first domain attach.
2973 * The only way to recover from this is to fail attaching the
2974 * iommu driver and call ops->release_device. Put the domain
2975 * in group->default_domain so it is freed after.
2977 ret
= __iommu_group_set_domain_internal(
2978 group
, dom
, IOMMU_SET_DOMAIN_MUST_SUCCEED
);
2982 ret
= __iommu_group_set_domain(group
, dom
);
2984 goto err_restore_def_domain
;
2988 * Drivers are supposed to allow mappings to be installed in a domain
2989 * before device attachment, but some don't. Hack around this defect by
2990 * trying again after attaching. If this happens it means the device
2991 * will not continuously have the IOMMU_RESV_DIRECT map.
2993 if (direct_failed
) {
2994 for_each_group_device(group
, gdev
) {
2995 ret
= iommu_create_device_direct_mappings(dom
, gdev
->dev
);
2997 goto err_restore_domain
;
3003 iommu_domain_free(old_dom
);
3008 __iommu_group_set_domain_internal(
3009 group
, old_dom
, IOMMU_SET_DOMAIN_MUST_SUCCEED
);
3010 err_restore_def_domain
:
3012 iommu_domain_free(dom
);
3013 group
->default_domain
= old_dom
;
3019 * Changing the default domain through sysfs requires the users to unbind the
3020 * drivers from the devices in the iommu group, except for a DMA -> DMA-FQ
3021 * transition. Return failure if this isn't met.
3023 * We need to consider the race between this and the device release path.
3024 * group->mutex is used here to guarantee that the device release path
3025 * will not be entered at the same time.
3027 static ssize_t
iommu_group_store_type(struct iommu_group
*group
,
3028 const char *buf
, size_t count
)
3030 struct group_device
*gdev
;
3033 if (!capable(CAP_SYS_ADMIN
) || !capable(CAP_SYS_RAWIO
))
3036 if (WARN_ON(!group
) || !group
->default_domain
)
3039 if (sysfs_streq(buf
, "identity"))
3040 req_type
= IOMMU_DOMAIN_IDENTITY
;
3041 else if (sysfs_streq(buf
, "DMA"))
3042 req_type
= IOMMU_DOMAIN_DMA
;
3043 else if (sysfs_streq(buf
, "DMA-FQ"))
3044 req_type
= IOMMU_DOMAIN_DMA_FQ
;
3045 else if (sysfs_streq(buf
, "auto"))
3050 mutex_lock(&group
->mutex
);
3051 /* We can bring up a flush queue without tearing down the domain. */
3052 if (req_type
== IOMMU_DOMAIN_DMA_FQ
&&
3053 group
->default_domain
->type
== IOMMU_DOMAIN_DMA
) {
3054 ret
= iommu_dma_init_fq(group
->default_domain
);
3058 group
->default_domain
->type
= IOMMU_DOMAIN_DMA_FQ
;
3063 /* Otherwise, ensure that device exists and no driver is bound. */
3064 if (list_empty(&group
->devices
) || group
->owner_cnt
) {
3069 ret
= iommu_setup_default_domain(group
, req_type
);
3073 /* Make sure dma_ops is appropriatley set */
3074 for_each_group_device(group
, gdev
)
3075 iommu_setup_dma_ops(gdev
->dev
);
3078 mutex_unlock(&group
->mutex
);
3079 return ret
?: count
;
3083 * iommu_device_use_default_domain() - Device driver wants to handle device
3084 * DMA through the kernel DMA API.
3087 * The device driver about to bind @dev wants to do DMA through the kernel
3088 * DMA API. Return 0 if it is allowed, otherwise an error.
3090 int iommu_device_use_default_domain(struct device
*dev
)
3092 /* Caller is the driver core during the pre-probe path */
3093 struct iommu_group
*group
= dev
->iommu_group
;
3099 mutex_lock(&group
->mutex
);
3100 if (group
->owner_cnt
) {
3101 if (group
->domain
!= group
->default_domain
|| group
->owner
||
3102 !xa_empty(&group
->pasid_array
)) {
3111 mutex_unlock(&group
->mutex
);
3116 * iommu_device_unuse_default_domain() - Device driver stops handling device
3117 * DMA through the kernel DMA API.
3120 * The device driver doesn't want to do DMA through kernel DMA API anymore.
3121 * It must be called after iommu_device_use_default_domain().
3123 void iommu_device_unuse_default_domain(struct device
*dev
)
3125 /* Caller is the driver core during the post-probe path */
3126 struct iommu_group
*group
= dev
->iommu_group
;
3131 mutex_lock(&group
->mutex
);
3132 if (!WARN_ON(!group
->owner_cnt
|| !xa_empty(&group
->pasid_array
)))
3135 mutex_unlock(&group
->mutex
);
3138 static int __iommu_group_alloc_blocking_domain(struct iommu_group
*group
)
3140 struct device
*dev
= iommu_group_first_dev(group
);
3141 const struct iommu_ops
*ops
= dev_iommu_ops(dev
);
3142 struct iommu_domain
*domain
;
3144 if (group
->blocking_domain
)
3147 if (ops
->blocked_domain
) {
3148 group
->blocking_domain
= ops
->blocked_domain
;
3153 * For drivers that do not yet understand IOMMU_DOMAIN_BLOCKED create an
3154 * empty PAGING domain instead.
3156 domain
= iommu_paging_domain_alloc(dev
);
3158 return PTR_ERR(domain
);
3159 group
->blocking_domain
= domain
;
3163 static int __iommu_take_dma_ownership(struct iommu_group
*group
, void *owner
)
3167 if ((group
->domain
&& group
->domain
!= group
->default_domain
) ||
3168 !xa_empty(&group
->pasid_array
))
3171 ret
= __iommu_group_alloc_blocking_domain(group
);
3174 ret
= __iommu_group_set_domain(group
, group
->blocking_domain
);
3178 group
->owner
= owner
;
3184 * iommu_group_claim_dma_owner() - Set DMA ownership of a group
3185 * @group: The group.
3186 * @owner: Caller specified pointer. Used for exclusive ownership.
3188 * This is to support backward compatibility for vfio which manages the dma
3189 * ownership in iommu_group level. New invocations on this interface should be
3190 * prohibited. Only a single owner may exist for a group.
3192 int iommu_group_claim_dma_owner(struct iommu_group
*group
, void *owner
)
3196 if (WARN_ON(!owner
))
3199 mutex_lock(&group
->mutex
);
3200 if (group
->owner_cnt
) {
3205 ret
= __iommu_take_dma_ownership(group
, owner
);
3207 mutex_unlock(&group
->mutex
);
3211 EXPORT_SYMBOL_GPL(iommu_group_claim_dma_owner
);
3214 * iommu_device_claim_dma_owner() - Set DMA ownership of a device
3216 * @owner: Caller specified pointer. Used for exclusive ownership.
3218 * Claim the DMA ownership of a device. Multiple devices in the same group may
3219 * concurrently claim ownership if they present the same owner value. Returns 0
3220 * on success and error code on failure
3222 int iommu_device_claim_dma_owner(struct device
*dev
, void *owner
)
3224 /* Caller must be a probed driver on dev */
3225 struct iommu_group
*group
= dev
->iommu_group
;
3228 if (WARN_ON(!owner
))
3234 mutex_lock(&group
->mutex
);
3235 if (group
->owner_cnt
) {
3236 if (group
->owner
!= owner
) {
3244 ret
= __iommu_take_dma_ownership(group
, owner
);
3246 mutex_unlock(&group
->mutex
);
3249 EXPORT_SYMBOL_GPL(iommu_device_claim_dma_owner
);
3251 static void __iommu_release_dma_ownership(struct iommu_group
*group
)
3253 if (WARN_ON(!group
->owner_cnt
|| !group
->owner
||
3254 !xa_empty(&group
->pasid_array
)))
3257 group
->owner_cnt
= 0;
3258 group
->owner
= NULL
;
3259 __iommu_group_set_domain_nofail(group
, group
->default_domain
);
3263 * iommu_group_release_dma_owner() - Release DMA ownership of a group
3266 * Release the DMA ownership claimed by iommu_group_claim_dma_owner().
3268 void iommu_group_release_dma_owner(struct iommu_group
*group
)
3270 mutex_lock(&group
->mutex
);
3271 __iommu_release_dma_ownership(group
);
3272 mutex_unlock(&group
->mutex
);
3274 EXPORT_SYMBOL_GPL(iommu_group_release_dma_owner
);
3277 * iommu_device_release_dma_owner() - Release DMA ownership of a device
3280 * Release the DMA ownership claimed by iommu_device_claim_dma_owner().
3282 void iommu_device_release_dma_owner(struct device
*dev
)
3284 /* Caller must be a probed driver on dev */
3285 struct iommu_group
*group
= dev
->iommu_group
;
3287 mutex_lock(&group
->mutex
);
3288 if (group
->owner_cnt
> 1)
3291 __iommu_release_dma_ownership(group
);
3292 mutex_unlock(&group
->mutex
);
3294 EXPORT_SYMBOL_GPL(iommu_device_release_dma_owner
);
3297 * iommu_group_dma_owner_claimed() - Query group dma ownership status
3298 * @group: The group.
3300 * This provides status query on a given group. It is racy and only for
3301 * non-binding status reporting.
3303 bool iommu_group_dma_owner_claimed(struct iommu_group
*group
)
3307 mutex_lock(&group
->mutex
);
3308 user
= group
->owner_cnt
;
3309 mutex_unlock(&group
->mutex
);
3313 EXPORT_SYMBOL_GPL(iommu_group_dma_owner_claimed
);
3315 static int __iommu_set_group_pasid(struct iommu_domain
*domain
,
3316 struct iommu_group
*group
, ioasid_t pasid
)
3318 struct group_device
*device
, *last_gdev
;
3321 for_each_group_device(group
, device
) {
3322 ret
= domain
->ops
->set_dev_pasid(domain
, device
->dev
,
3332 for_each_group_device(group
, device
) {
3333 const struct iommu_ops
*ops
= dev_iommu_ops(device
->dev
);
3335 if (device
== last_gdev
)
3337 ops
->remove_dev_pasid(device
->dev
, pasid
, domain
);
3342 static void __iommu_remove_group_pasid(struct iommu_group
*group
,
3344 struct iommu_domain
*domain
)
3346 struct group_device
*device
;
3347 const struct iommu_ops
*ops
;
3349 for_each_group_device(group
, device
) {
3350 ops
= dev_iommu_ops(device
->dev
);
3351 ops
->remove_dev_pasid(device
->dev
, pasid
, domain
);
3356 * iommu_attach_device_pasid() - Attach a domain to pasid of device
3357 * @domain: the iommu domain.
3358 * @dev: the attached device.
3359 * @pasid: the pasid of the device.
3360 * @handle: the attach handle.
3362 * Return: 0 on success, or an error.
3364 int iommu_attach_device_pasid(struct iommu_domain
*domain
,
3365 struct device
*dev
, ioasid_t pasid
,
3366 struct iommu_attach_handle
*handle
)
3368 /* Caller must be a probed driver on dev */
3369 struct iommu_group
*group
= dev
->iommu_group
;
3370 struct group_device
*device
;
3373 if (!domain
->ops
->set_dev_pasid
)
3379 if (!dev_has_iommu(dev
) || dev_iommu_ops(dev
) != domain
->owner
||
3380 pasid
== IOMMU_NO_PASID
)
3383 mutex_lock(&group
->mutex
);
3384 for_each_group_device(group
, device
) {
3385 if (pasid
>= device
->dev
->iommu
->max_pasids
) {
3392 handle
->domain
= domain
;
3394 ret
= xa_insert(&group
->pasid_array
, pasid
, handle
, GFP_KERNEL
);
3398 ret
= __iommu_set_group_pasid(domain
, group
, pasid
);
3400 xa_erase(&group
->pasid_array
, pasid
);
3402 mutex_unlock(&group
->mutex
);
3405 EXPORT_SYMBOL_GPL(iommu_attach_device_pasid
);
3408 * iommu_detach_device_pasid() - Detach the domain from pasid of device
3409 * @domain: the iommu domain.
3410 * @dev: the attached device.
3411 * @pasid: the pasid of the device.
3413 * The @domain must have been attached to @pasid of the @dev with
3414 * iommu_attach_device_pasid().
3416 void iommu_detach_device_pasid(struct iommu_domain
*domain
, struct device
*dev
,
3419 /* Caller must be a probed driver on dev */
3420 struct iommu_group
*group
= dev
->iommu_group
;
3422 mutex_lock(&group
->mutex
);
3423 __iommu_remove_group_pasid(group
, pasid
, domain
);
3424 xa_erase(&group
->pasid_array
, pasid
);
3425 mutex_unlock(&group
->mutex
);
3427 EXPORT_SYMBOL_GPL(iommu_detach_device_pasid
);
3429 ioasid_t
iommu_alloc_global_pasid(struct device
*dev
)
3433 /* max_pasids == 0 means that the device does not support PASID */
3434 if (!dev
->iommu
->max_pasids
)
3435 return IOMMU_PASID_INVALID
;
3438 * max_pasids is set up by vendor driver based on number of PASID bits
3439 * supported but the IDA allocation is inclusive.
3441 ret
= ida_alloc_range(&iommu_global_pasid_ida
, IOMMU_FIRST_GLOBAL_PASID
,
3442 dev
->iommu
->max_pasids
- 1, GFP_KERNEL
);
3443 return ret
< 0 ? IOMMU_PASID_INVALID
: ret
;
3445 EXPORT_SYMBOL_GPL(iommu_alloc_global_pasid
);
3447 void iommu_free_global_pasid(ioasid_t pasid
)
3449 if (WARN_ON(pasid
== IOMMU_PASID_INVALID
))
3452 ida_free(&iommu_global_pasid_ida
, pasid
);
3454 EXPORT_SYMBOL_GPL(iommu_free_global_pasid
);
3457 * iommu_attach_handle_get - Return the attach handle
3458 * @group: the iommu group that domain was attached to
3459 * @pasid: the pasid within the group
3460 * @type: matched domain type, 0 for any match
3462 * Return handle or ERR_PTR(-ENOENT) on none, ERR_PTR(-EBUSY) on mismatch.
3464 * Return the attach handle to the caller. The life cycle of an iommu attach
3465 * handle is from the time when the domain is attached to the time when the
3466 * domain is detached. Callers are required to synchronize the call of
3467 * iommu_attach_handle_get() with domain attachment and detachment. The attach
3468 * handle can only be used during its life cycle.
3470 struct iommu_attach_handle
*
3471 iommu_attach_handle_get(struct iommu_group
*group
, ioasid_t pasid
, unsigned int type
)
3473 struct iommu_attach_handle
*handle
;
3475 xa_lock(&group
->pasid_array
);
3476 handle
= xa_load(&group
->pasid_array
, pasid
);
3478 handle
= ERR_PTR(-ENOENT
);
3479 else if (type
&& handle
->domain
->type
!= type
)
3480 handle
= ERR_PTR(-EBUSY
);
3481 xa_unlock(&group
->pasid_array
);
3485 EXPORT_SYMBOL_NS_GPL(iommu_attach_handle_get
, "IOMMUFD_INTERNAL");
3488 * iommu_attach_group_handle - Attach an IOMMU domain to an IOMMU group
3489 * @domain: IOMMU domain to attach
3490 * @group: IOMMU group that will be attached
3491 * @handle: attach handle
3493 * Returns 0 on success and error code on failure.
3495 * This is a variant of iommu_attach_group(). It allows the caller to provide
3496 * an attach handle and use it when the domain is attached. This is currently
3497 * used by IOMMUFD to deliver the I/O page faults.
3499 int iommu_attach_group_handle(struct iommu_domain
*domain
,
3500 struct iommu_group
*group
,
3501 struct iommu_attach_handle
*handle
)
3506 handle
->domain
= domain
;
3508 mutex_lock(&group
->mutex
);
3509 ret
= xa_insert(&group
->pasid_array
, IOMMU_NO_PASID
, handle
, GFP_KERNEL
);
3513 ret
= __iommu_attach_group(domain
, group
);
3516 mutex_unlock(&group
->mutex
);
3520 xa_erase(&group
->pasid_array
, IOMMU_NO_PASID
);
3522 mutex_unlock(&group
->mutex
);
3525 EXPORT_SYMBOL_NS_GPL(iommu_attach_group_handle
, "IOMMUFD_INTERNAL");
3528 * iommu_detach_group_handle - Detach an IOMMU domain from an IOMMU group
3529 * @domain: IOMMU domain to attach
3530 * @group: IOMMU group that will be attached
3532 * Detach the specified IOMMU domain from the specified IOMMU group.
3533 * It must be used in conjunction with iommu_attach_group_handle().
3535 void iommu_detach_group_handle(struct iommu_domain
*domain
,
3536 struct iommu_group
*group
)
3538 mutex_lock(&group
->mutex
);
3539 __iommu_group_set_core_domain(group
);
3540 xa_erase(&group
->pasid_array
, IOMMU_NO_PASID
);
3541 mutex_unlock(&group
->mutex
);
3543 EXPORT_SYMBOL_NS_GPL(iommu_detach_group_handle
, "IOMMUFD_INTERNAL");
3546 * iommu_replace_group_handle - replace the domain that a group is attached to
3547 * @group: IOMMU group that will be attached to the new domain
3548 * @new_domain: new IOMMU domain to replace with
3549 * @handle: attach handle
3551 * This is a variant of iommu_group_replace_domain(). It allows the caller to
3552 * provide an attach handle for the new domain and use it when the domain is
3555 int iommu_replace_group_handle(struct iommu_group
*group
,
3556 struct iommu_domain
*new_domain
,
3557 struct iommu_attach_handle
*handle
)
3565 mutex_lock(&group
->mutex
);
3567 ret
= xa_reserve(&group
->pasid_array
, IOMMU_NO_PASID
, GFP_KERNEL
);
3570 handle
->domain
= new_domain
;
3573 ret
= __iommu_group_set_domain(group
, new_domain
);
3577 curr
= xa_store(&group
->pasid_array
, IOMMU_NO_PASID
, handle
, GFP_KERNEL
);
3578 WARN_ON(xa_is_err(curr
));
3580 mutex_unlock(&group
->mutex
);
3584 xa_release(&group
->pasid_array
, IOMMU_NO_PASID
);
3586 mutex_unlock(&group
->mutex
);
3589 EXPORT_SYMBOL_NS_GPL(iommu_replace_group_handle
, "IOMMUFD_INTERNAL");