• Home
  • Raw
  • Download

Lines Matching full:group

71 	ssize_t (*show)(struct iommu_group *group, char *buf);
72 ssize_t (*store)(struct iommu_group *group,
116 struct iommu_group *group);
118 struct iommu_group *group);
138 struct iommu_group *group = to_iommu_group(kobj); in iommu_group_attr_show() local
142 ret = attr->show(group, buf); in iommu_group_attr_show()
151 struct iommu_group *group = to_iommu_group(kobj); in iommu_group_attr_store() local
155 ret = attr->store(group, buf, count); in iommu_group_attr_store()
164 static int iommu_group_create_file(struct iommu_group *group, in iommu_group_create_file() argument
167 return sysfs_create_file(&group->kobj, &attr->attr); in iommu_group_create_file()
170 static void iommu_group_remove_file(struct iommu_group *group, in iommu_group_remove_file() argument
173 sysfs_remove_file(&group->kobj, &attr->attr); in iommu_group_remove_file()
176 static ssize_t iommu_group_show_name(struct iommu_group *group, char *buf) in iommu_group_show_name() argument
178 return sprintf(buf, "%s\n", group->name); in iommu_group_show_name()
259 int iommu_get_group_resv_regions(struct iommu_group *group, in iommu_get_group_resv_regions() argument
265 mutex_lock(&group->mutex); in iommu_get_group_resv_regions()
266 list_for_each_entry(device, &group->devices, list) { in iommu_get_group_resv_regions()
276 mutex_unlock(&group->mutex); in iommu_get_group_resv_regions()
281 static ssize_t iommu_group_show_resv_regions(struct iommu_group *group, in iommu_group_show_resv_regions() argument
289 iommu_get_group_resv_regions(group, &group_resv_regions); in iommu_group_show_resv_regions()
303 static ssize_t iommu_group_show_type(struct iommu_group *group, in iommu_group_show_type() argument
308 if (group->default_domain) { in iommu_group_show_type()
309 switch (group->default_domain->type) { in iommu_group_show_type()
338 struct iommu_group *group = to_iommu_group(kobj); in iommu_group_release() local
340 pr_debug("Releasing group %d\n", group->id); in iommu_group_release()
342 if (group->iommu_data_release) in iommu_group_release()
343 group->iommu_data_release(group->iommu_data); in iommu_group_release()
345 ida_simple_remove(&iommu_group_ida, group->id); in iommu_group_release()
347 if (group->default_domain) in iommu_group_release()
348 iommu_domain_free(group->default_domain); in iommu_group_release()
350 kfree(group->name); in iommu_group_release()
351 kfree(group); in iommu_group_release()
360 * iommu_group_alloc - Allocate a new group
363 * group. The iommu group represents the minimum granularity of the iommu.
365 * group in order to hold the group until devices are added. Use
367 * group to be automatically reclaimed once it has no devices or external
372 struct iommu_group *group; in iommu_group_alloc() local
375 group = kzalloc(sizeof(*group), GFP_KERNEL); in iommu_group_alloc()
376 if (!group) in iommu_group_alloc()
379 group->kobj.kset = iommu_group_kset; in iommu_group_alloc()
380 mutex_init(&group->mutex); in iommu_group_alloc()
381 INIT_LIST_HEAD(&group->devices); in iommu_group_alloc()
382 BLOCKING_INIT_NOTIFIER_HEAD(&group->notifier); in iommu_group_alloc()
386 kfree(group); in iommu_group_alloc()
389 group->id = ret; in iommu_group_alloc()
391 ret = kobject_init_and_add(&group->kobj, &iommu_group_ktype, in iommu_group_alloc()
392 NULL, "%d", group->id); in iommu_group_alloc()
394 ida_simple_remove(&iommu_group_ida, group->id); in iommu_group_alloc()
395 kobject_put(&group->kobj); in iommu_group_alloc()
399 group->devices_kobj = kobject_create_and_add("devices", &group->kobj); in iommu_group_alloc()
400 if (!group->devices_kobj) { in iommu_group_alloc()
401 kobject_put(&group->kobj); /* triggers .release & free */ in iommu_group_alloc()
406 * The devices_kobj holds a reference on the group kobject, so in iommu_group_alloc()
407 * as long as that exists so will the group. We can therefore in iommu_group_alloc()
410 kobject_put(&group->kobj); in iommu_group_alloc()
412 ret = iommu_group_create_file(group, in iommu_group_alloc()
417 ret = iommu_group_create_file(group, &iommu_group_attr_type); in iommu_group_alloc()
421 pr_debug("Allocated group %d\n", group->id); in iommu_group_alloc()
423 return group; in iommu_group_alloc()
430 struct iommu_group *group; in iommu_group_get_by_id() local
446 group = container_of(group_kobj, struct iommu_group, kobj); in iommu_group_get_by_id()
447 BUG_ON(group->id != id); in iommu_group_get_by_id()
449 kobject_get(group->devices_kobj); in iommu_group_get_by_id()
450 kobject_put(&group->kobj); in iommu_group_get_by_id()
452 return group; in iommu_group_get_by_id()
457 * iommu_group_get_iommudata - retrieve iommu_data registered for a group
458 * @group: the group
460 * iommu drivers can store data in the group for use when doing iommu
462 * should hold a group reference.
464 void *iommu_group_get_iommudata(struct iommu_group *group) in iommu_group_get_iommudata() argument
466 return group->iommu_data; in iommu_group_get_iommudata()
471 * iommu_group_set_iommudata - set iommu_data for a group
472 * @group: the group
476 * iommu drivers can store data in the group for use when doing iommu
478 * the group has been allocated. Caller should hold a group reference.
480 void iommu_group_set_iommudata(struct iommu_group *group, void *iommu_data, in iommu_group_set_iommudata() argument
483 group->iommu_data = iommu_data; in iommu_group_set_iommudata()
484 group->iommu_data_release = release; in iommu_group_set_iommudata()
489 * iommu_group_set_name - set name for a group
490 * @group: the group
493 * Allow iommu driver to set a name for a group. When set it will
494 * appear in a name attribute file under the group in sysfs.
496 int iommu_group_set_name(struct iommu_group *group, const char *name) in iommu_group_set_name() argument
500 if (group->name) { in iommu_group_set_name()
501 iommu_group_remove_file(group, &iommu_group_attr_name); in iommu_group_set_name()
502 kfree(group->name); in iommu_group_set_name()
503 group->name = NULL; in iommu_group_set_name()
508 group->name = kstrdup(name, GFP_KERNEL); in iommu_group_set_name()
509 if (!group->name) in iommu_group_set_name()
512 ret = iommu_group_create_file(group, &iommu_group_attr_name); in iommu_group_set_name()
514 kfree(group->name); in iommu_group_set_name()
515 group->name = NULL; in iommu_group_set_name()
523 static int iommu_group_create_direct_mappings(struct iommu_group *group, in iommu_group_create_direct_mappings() argument
526 struct iommu_domain *domain = group->default_domain; in iommu_group_create_direct_mappings()
578 * iommu_group_add_device - add a device to an iommu group
579 * @group: the group into which to add the device (reference should be held)
583 * group. Adding a device increments the group reference count.
585 int iommu_group_add_device(struct iommu_group *group, struct device *dev) in iommu_group_add_device() argument
596 ret = sysfs_create_link(&dev->kobj, &group->kobj, "iommu_group"); in iommu_group_add_device()
607 ret = sysfs_create_link_nowarn(group->devices_kobj, in iommu_group_add_device()
623 kobject_get(group->devices_kobj); in iommu_group_add_device()
625 dev->iommu_group = group; in iommu_group_add_device()
627 iommu_group_create_direct_mappings(group, dev); in iommu_group_add_device()
629 mutex_lock(&group->mutex); in iommu_group_add_device()
630 list_add_tail(&device->list, &group->devices); in iommu_group_add_device()
631 if (group->domain) in iommu_group_add_device()
632 ret = __iommu_attach_device(group->domain, dev); in iommu_group_add_device()
633 mutex_unlock(&group->mutex); in iommu_group_add_device()
637 /* Notify any listeners about change to group. */ in iommu_group_add_device()
638 blocking_notifier_call_chain(&group->notifier, in iommu_group_add_device()
641 trace_add_device_to_group(group->id, dev); in iommu_group_add_device()
643 pr_info("Adding device %s to group %d\n", dev_name(dev), group->id); in iommu_group_add_device()
648 mutex_lock(&group->mutex); in iommu_group_add_device()
650 mutex_unlock(&group->mutex); in iommu_group_add_device()
652 kobject_put(group->devices_kobj); in iommu_group_add_device()
653 sysfs_remove_link(group->devices_kobj, device->name); in iommu_group_add_device()
660 pr_err("Failed to add device %s to group %d: %d\n", dev_name(dev), group->id, ret); in iommu_group_add_device()
666 * iommu_group_remove_device - remove a device from it's current group
670 * it's current group. This decrements the iommu group reference count.
674 struct iommu_group *group = dev->iommu_group; in iommu_group_remove_device() local
677 pr_info("Removing device %s from group %d\n", dev_name(dev), group->id); in iommu_group_remove_device()
680 blocking_notifier_call_chain(&group->notifier, in iommu_group_remove_device()
683 mutex_lock(&group->mutex); in iommu_group_remove_device()
684 list_for_each_entry(tmp_device, &group->devices, list) { in iommu_group_remove_device()
691 mutex_unlock(&group->mutex); in iommu_group_remove_device()
696 sysfs_remove_link(group->devices_kobj, device->name); in iommu_group_remove_device()
699 trace_remove_device_from_group(group->id, dev); in iommu_group_remove_device()
704 kobject_put(group->devices_kobj); in iommu_group_remove_device()
708 static int iommu_group_device_count(struct iommu_group *group) in iommu_group_device_count() argument
713 list_for_each_entry(entry, &group->devices, list) in iommu_group_device_count()
720 * iommu_group_for_each_dev - iterate over each device in the group
721 * @group: the group
725 * This function is called by group users to iterate over group devices.
726 * Callers should hold a reference count to the group during callback.
727 * The group->mutex is held across callbacks, which will block calls to
730 static int __iommu_group_for_each_dev(struct iommu_group *group, void *data, in __iommu_group_for_each_dev() argument
736 list_for_each_entry(device, &group->devices, list) { in __iommu_group_for_each_dev()
745 int iommu_group_for_each_dev(struct iommu_group *group, void *data, in iommu_group_for_each_dev() argument
750 mutex_lock(&group->mutex); in iommu_group_for_each_dev()
751 ret = __iommu_group_for_each_dev(group, data, fn); in iommu_group_for_each_dev()
752 mutex_unlock(&group->mutex); in iommu_group_for_each_dev()
759 * iommu_group_get - Return the group for a device and increment reference
760 * @dev: get the group that this device belongs to
762 * This function is called by iommu drivers and users to get the group
763 * for the specified device. If found, the group is returned and the group
768 struct iommu_group *group = dev->iommu_group; in iommu_group_get() local
770 if (group) in iommu_group_get()
771 kobject_get(group->devices_kobj); in iommu_group_get()
773 return group; in iommu_group_get()
778 * iommu_group_ref_get - Increment reference on a group
779 * @group: the group to use, must not be NULL
782 * existing group. Returns the given group for convenience.
784 struct iommu_group *iommu_group_ref_get(struct iommu_group *group) in iommu_group_ref_get() argument
786 kobject_get(group->devices_kobj); in iommu_group_ref_get()
787 return group; in iommu_group_ref_get()
791 * iommu_group_put - Decrement group reference
792 * @group: the group to use
795 * iommu group. Once the reference count is zero, the group is released.
797 void iommu_group_put(struct iommu_group *group) in iommu_group_put() argument
799 if (group) in iommu_group_put()
800 kobject_put(group->devices_kobj); in iommu_group_put()
805 * iommu_group_register_notifier - Register a notifier for group changes
806 * @group: the group to watch
809 * This function allows iommu group users to track changes in a group.
811 * should hold a reference to the group throughout notifier registration.
813 int iommu_group_register_notifier(struct iommu_group *group, in iommu_group_register_notifier() argument
816 return blocking_notifier_chain_register(&group->notifier, nb); in iommu_group_register_notifier()
822 * @group: the group to watch
825 * Unregister a previously registered group notifier block.
827 int iommu_group_unregister_notifier(struct iommu_group *group, in iommu_group_unregister_notifier() argument
830 return blocking_notifier_chain_unregister(&group->notifier, nb); in iommu_group_unregister_notifier()
835 * iommu_group_id - Return ID for a group
836 * @group: the group to ID
838 * Return the unique ID for the group matching the sysfs group number.
840 int iommu_group_id(struct iommu_group *group) in iommu_group_id() argument
842 return group->id; in iommu_group_id()
863 * that may already have a group.
869 struct iommu_group *group; in get_pci_function_alias_group() local
880 group = get_pci_alias_group(tmp, devfns); in get_pci_function_alias_group()
881 if (group) { in get_pci_function_alias_group()
883 return group; in get_pci_function_alias_group()
903 struct iommu_group *group; in get_pci_alias_group() local
908 group = iommu_group_get(&pdev->dev); in get_pci_alias_group()
909 if (group) in get_pci_alias_group()
910 return group; in get_pci_alias_group()
918 group = get_pci_alias_group(tmp, devfns); in get_pci_alias_group()
919 if (group) { in get_pci_alias_group()
921 return group; in get_pci_alias_group()
924 group = get_pci_function_alias_group(tmp, devfns); in get_pci_alias_group()
925 if (group) { in get_pci_alias_group()
927 return group; in get_pci_alias_group()
937 struct iommu_group *group; member
942 * the IOMMU group if we find one along the way.
949 data->group = iommu_group_get(&pdev->dev); in get_pci_alias_or_group()
951 return data->group != NULL; in get_pci_alias_or_group()
956 * iommu-group per device.
965 * to find or create an IOMMU group for a device.
972 struct iommu_group *group = NULL; in pci_device_group() local
980 * be aliased due to topology in order to have its own IOMMU group. in pci_device_group()
982 * group, use it. in pci_device_group()
985 return data.group; in pci_device_group()
993 * group, use it. in pci_device_group()
1004 group = iommu_group_get(&pdev->dev); in pci_device_group()
1005 if (group) in pci_device_group()
1006 return group; in pci_device_group()
1011 * device or another device aliases us, use the same group. in pci_device_group()
1013 group = get_pci_alias_group(pdev, (unsigned long *)devfns); in pci_device_group()
1014 if (group) in pci_device_group()
1015 return group; in pci_device_group()
1022 group = get_pci_function_alias_group(pdev, (unsigned long *)devfns); in pci_device_group()
1023 if (group) in pci_device_group()
1024 return group; in pci_device_group()
1026 /* No shared group found, allocate new */ in pci_device_group()
1031 * iommu_group_get_for_dev - Find or create the IOMMU group for a device
1036 * IOMMU group for a device. On success, the caller will hold a reference
1037 * to the returned IOMMU group, which will already include the provided
1043 struct iommu_group *group; in iommu_group_get_for_dev() local
1046 group = iommu_group_get(dev); in iommu_group_get_for_dev()
1047 if (group) in iommu_group_get_for_dev()
1048 return group; in iommu_group_get_for_dev()
1053 group = ops->device_group(dev); in iommu_group_get_for_dev()
1054 if (WARN_ON_ONCE(group == NULL)) in iommu_group_get_for_dev()
1057 if (IS_ERR(group)) in iommu_group_get_for_dev()
1058 return group; in iommu_group_get_for_dev()
1064 if (!group->default_domain) { in iommu_group_get_for_dev()
1075 group->default_domain = dom; in iommu_group_get_for_dev()
1076 if (!group->domain) in iommu_group_get_for_dev()
1077 group->domain = dom; in iommu_group_get_for_dev()
1080 ret = iommu_group_add_device(group, dev); in iommu_group_get_for_dev()
1082 iommu_group_put(group); in iommu_group_get_for_dev()
1086 return group; in iommu_group_get_for_dev()
1089 struct iommu_domain *iommu_group_default_domain(struct iommu_group *group) in iommu_group_default_domain() argument
1091 return group->default_domain; in iommu_group_default_domain()
1134 struct iommu_group *group; in iommu_bus_notifier() local
1139 * result in ADD/DEL notifiers to group->notifier in iommu_bus_notifier()
1157 * group, if anyone is listening in iommu_bus_notifier()
1159 group = iommu_group_get(dev); in iommu_bus_notifier()
1160 if (!group) in iommu_bus_notifier()
1179 blocking_notifier_call_chain(&group->notifier, in iommu_bus_notifier()
1182 iommu_group_put(group); in iommu_bus_notifier()
1342 struct iommu_group *group; in iommu_attach_device() local
1345 group = iommu_group_get(dev); in iommu_attach_device()
1346 if (!group) in iommu_attach_device()
1350 * Lock the group to make sure the device-count doesn't in iommu_attach_device()
1353 mutex_lock(&group->mutex); in iommu_attach_device()
1355 if (iommu_group_device_count(group) != 1) in iommu_attach_device()
1358 ret = __iommu_attach_group(domain, group); in iommu_attach_device()
1361 mutex_unlock(&group->mutex); in iommu_attach_device()
1362 iommu_group_put(group); in iommu_attach_device()
1384 struct iommu_group *group; in iommu_detach_device() local
1386 group = iommu_group_get(dev); in iommu_detach_device()
1387 if (!group) in iommu_detach_device()
1390 mutex_lock(&group->mutex); in iommu_detach_device()
1391 if (iommu_group_device_count(group) != 1) { in iommu_detach_device()
1396 __iommu_detach_group(domain, group); in iommu_detach_device()
1399 mutex_unlock(&group->mutex); in iommu_detach_device()
1400 iommu_group_put(group); in iommu_detach_device()
1407 struct iommu_group *group; in iommu_get_domain_for_dev() local
1409 group = iommu_group_get(dev); in iommu_get_domain_for_dev()
1410 if (!group) in iommu_get_domain_for_dev()
1413 domain = group->domain; in iommu_get_domain_for_dev()
1415 iommu_group_put(group); in iommu_get_domain_for_dev()
1424 * iterating over the devices in a group. Ideally we'd have a single
1425 * device which represents the requestor ID of the group, but we also
1428 * wish to group them at a higher level (ex. untrusted multi-function
1439 struct iommu_group *group) in __iommu_attach_group() argument
1443 if (group->default_domain && group->domain != group->default_domain) in __iommu_attach_group()
1446 ret = __iommu_group_for_each_dev(group, domain, in __iommu_attach_group()
1449 group->domain = domain; in __iommu_attach_group()
1454 int iommu_attach_group(struct iommu_domain *domain, struct iommu_group *group) in iommu_attach_group() argument
1458 mutex_lock(&group->mutex); in iommu_attach_group()
1459 ret = __iommu_attach_group(domain, group); in iommu_attach_group()
1460 mutex_unlock(&group->mutex); in iommu_attach_group()
1476 struct iommu_group *group) in __iommu_detach_group() argument
1480 if (!group->default_domain) { in __iommu_detach_group()
1481 __iommu_group_for_each_dev(group, domain, in __iommu_detach_group()
1483 group->domain = NULL; in __iommu_detach_group()
1487 if (group->domain == group->default_domain) in __iommu_detach_group()
1491 ret = __iommu_group_for_each_dev(group, group->default_domain, in __iommu_detach_group()
1496 group->domain = group->default_domain; in __iommu_detach_group()
1499 void iommu_detach_group(struct iommu_domain *domain, struct iommu_group *group) in iommu_detach_group() argument
1501 mutex_lock(&group->mutex); in iommu_detach_group()
1502 __iommu_detach_group(domain, group); in iommu_detach_group()
1503 mutex_unlock(&group->mutex); in iommu_detach_group()
1899 struct iommu_group *group; in iommu_request_dm_for_dev() local
1902 /* Device must already be in a group before calling this function */ in iommu_request_dm_for_dev()
1903 group = iommu_group_get(dev); in iommu_request_dm_for_dev()
1904 if (!group) in iommu_request_dm_for_dev()
1907 mutex_lock(&group->mutex); in iommu_request_dm_for_dev()
1911 if (group->default_domain && in iommu_request_dm_for_dev()
1912 group->default_domain->type == IOMMU_DOMAIN_IDENTITY) in iommu_request_dm_for_dev()
1917 if (iommu_group_device_count(group) != 1) in iommu_request_dm_for_dev()
1927 ret = __iommu_attach_group(dm_domain, group); in iommu_request_dm_for_dev()
1933 /* Make the direct mapped domain the default for this group */ in iommu_request_dm_for_dev()
1934 if (group->default_domain) in iommu_request_dm_for_dev()
1935 iommu_domain_free(group->default_domain); in iommu_request_dm_for_dev()
1936 group->default_domain = dm_domain; in iommu_request_dm_for_dev()
1942 mutex_unlock(&group->mutex); in iommu_request_dm_for_dev()
1943 iommu_group_put(group); in iommu_request_dm_for_dev()