Lines Matching refs:group
64 ssize_t (*show)(struct iommu_group *group, char *buf);
65 ssize_t (*store)(struct iommu_group *group,
82 struct iommu_group *group = to_iommu_group(kobj); in iommu_group_attr_show() local
86 ret = attr->show(group, buf); in iommu_group_attr_show()
95 struct iommu_group *group = to_iommu_group(kobj); in iommu_group_attr_store() local
99 ret = attr->store(group, buf, count); in iommu_group_attr_store()
108 static int iommu_group_create_file(struct iommu_group *group, in iommu_group_create_file() argument
111 return sysfs_create_file(&group->kobj, &attr->attr); in iommu_group_create_file()
114 static void iommu_group_remove_file(struct iommu_group *group, in iommu_group_remove_file() argument
117 sysfs_remove_file(&group->kobj, &attr->attr); in iommu_group_remove_file()
120 static ssize_t iommu_group_show_name(struct iommu_group *group, char *buf) in iommu_group_show_name() argument
122 return sprintf(buf, "%s\n", group->name); in iommu_group_show_name()
129 struct iommu_group *group = to_iommu_group(kobj); in iommu_group_release() local
131 if (group->iommu_data_release) in iommu_group_release()
132 group->iommu_data_release(group->iommu_data); in iommu_group_release()
135 ida_remove(&iommu_group_ida, group->id); in iommu_group_release()
138 kfree(group->name); in iommu_group_release()
139 kfree(group); in iommu_group_release()
161 struct iommu_group *group; in iommu_group_alloc() local
164 group = kzalloc(sizeof(*group), GFP_KERNEL); in iommu_group_alloc()
165 if (!group) in iommu_group_alloc()
168 group->kobj.kset = iommu_group_kset; in iommu_group_alloc()
169 mutex_init(&group->mutex); in iommu_group_alloc()
170 INIT_LIST_HEAD(&group->devices); in iommu_group_alloc()
171 BLOCKING_INIT_NOTIFIER_HEAD(&group->notifier); in iommu_group_alloc()
177 kfree(group); in iommu_group_alloc()
182 if (-EAGAIN == ida_get_new(&iommu_group_ida, &group->id)) in iommu_group_alloc()
187 ret = kobject_init_and_add(&group->kobj, &iommu_group_ktype, in iommu_group_alloc()
188 NULL, "%d", group->id); in iommu_group_alloc()
191 ida_remove(&iommu_group_ida, group->id); in iommu_group_alloc()
193 kfree(group); in iommu_group_alloc()
197 group->devices_kobj = kobject_create_and_add("devices", &group->kobj); in iommu_group_alloc()
198 if (!group->devices_kobj) { in iommu_group_alloc()
199 kobject_put(&group->kobj); /* triggers .release & free */ in iommu_group_alloc()
208 kobject_put(&group->kobj); in iommu_group_alloc()
210 return group; in iommu_group_alloc()
217 struct iommu_group *group; in iommu_group_get_by_id() local
233 group = container_of(group_kobj, struct iommu_group, kobj); in iommu_group_get_by_id()
234 BUG_ON(group->id != id); in iommu_group_get_by_id()
236 kobject_get(group->devices_kobj); in iommu_group_get_by_id()
237 kobject_put(&group->kobj); in iommu_group_get_by_id()
239 return group; in iommu_group_get_by_id()
251 void *iommu_group_get_iommudata(struct iommu_group *group) in iommu_group_get_iommudata() argument
253 return group->iommu_data; in iommu_group_get_iommudata()
267 void iommu_group_set_iommudata(struct iommu_group *group, void *iommu_data, in iommu_group_set_iommudata() argument
270 group->iommu_data = iommu_data; in iommu_group_set_iommudata()
271 group->iommu_data_release = release; in iommu_group_set_iommudata()
283 int iommu_group_set_name(struct iommu_group *group, const char *name) in iommu_group_set_name() argument
287 if (group->name) { in iommu_group_set_name()
288 iommu_group_remove_file(group, &iommu_group_attr_name); in iommu_group_set_name()
289 kfree(group->name); in iommu_group_set_name()
290 group->name = NULL; in iommu_group_set_name()
295 group->name = kstrdup(name, GFP_KERNEL); in iommu_group_set_name()
296 if (!group->name) in iommu_group_set_name()
299 ret = iommu_group_create_file(group, &iommu_group_attr_name); in iommu_group_set_name()
301 kfree(group->name); in iommu_group_set_name()
302 group->name = NULL; in iommu_group_set_name()
318 int iommu_group_add_device(struct iommu_group *group, struct device *dev) in iommu_group_add_device() argument
329 ret = sysfs_create_link(&dev->kobj, &group->kobj, "iommu_group"); in iommu_group_add_device()
343 ret = sysfs_create_link_nowarn(group->devices_kobj, in iommu_group_add_device()
362 kobject_get(group->devices_kobj); in iommu_group_add_device()
364 dev->iommu_group = group; in iommu_group_add_device()
366 mutex_lock(&group->mutex); in iommu_group_add_device()
367 list_add_tail(&device->list, &group->devices); in iommu_group_add_device()
368 mutex_unlock(&group->mutex); in iommu_group_add_device()
371 blocking_notifier_call_chain(&group->notifier, in iommu_group_add_device()
374 trace_add_device_to_group(group->id, dev); in iommu_group_add_device()
388 struct iommu_group *group = dev->iommu_group; in iommu_group_remove_device() local
392 blocking_notifier_call_chain(&group->notifier, in iommu_group_remove_device()
395 mutex_lock(&group->mutex); in iommu_group_remove_device()
396 list_for_each_entry(tmp_device, &group->devices, list) { in iommu_group_remove_device()
403 mutex_unlock(&group->mutex); in iommu_group_remove_device()
408 sysfs_remove_link(group->devices_kobj, device->name); in iommu_group_remove_device()
411 trace_remove_device_from_group(group->id, dev); in iommu_group_remove_device()
416 kobject_put(group->devices_kobj); in iommu_group_remove_device()
431 int iommu_group_for_each_dev(struct iommu_group *group, void *data, in iommu_group_for_each_dev() argument
437 mutex_lock(&group->mutex); in iommu_group_for_each_dev()
438 list_for_each_entry(device, &group->devices, list) { in iommu_group_for_each_dev()
443 mutex_unlock(&group->mutex); in iommu_group_for_each_dev()
458 struct iommu_group *group = dev->iommu_group; in iommu_group_get() local
460 if (group) in iommu_group_get()
461 kobject_get(group->devices_kobj); in iommu_group_get()
463 return group; in iommu_group_get()
474 void iommu_group_put(struct iommu_group *group) in iommu_group_put() argument
476 if (group) in iommu_group_put()
477 kobject_put(group->devices_kobj); in iommu_group_put()
490 int iommu_group_register_notifier(struct iommu_group *group, in iommu_group_register_notifier() argument
493 return blocking_notifier_chain_register(&group->notifier, nb); in iommu_group_register_notifier()
504 int iommu_group_unregister_notifier(struct iommu_group *group, in iommu_group_unregister_notifier() argument
507 return blocking_notifier_chain_unregister(&group->notifier, nb); in iommu_group_unregister_notifier()
517 int iommu_group_id(struct iommu_group *group) in iommu_group_id() argument
519 return group->id; in iommu_group_id()
546 struct iommu_group *group; in get_pci_function_alias_group() local
557 group = get_pci_alias_group(tmp, devfns); in get_pci_function_alias_group()
558 if (group) { in get_pci_function_alias_group()
560 return group; in get_pci_function_alias_group()
580 struct iommu_group *group; in get_pci_alias_group() local
585 group = iommu_group_get(&pdev->dev); in get_pci_alias_group()
586 if (group) in get_pci_alias_group()
587 return group; in get_pci_alias_group()
599 group = get_pci_alias_group(tmp, devfns); in get_pci_alias_group()
600 if (group) { in get_pci_alias_group()
602 return group; in get_pci_alias_group()
605 group = get_pci_function_alias_group(tmp, devfns); in get_pci_alias_group()
606 if (group) { in get_pci_alias_group()
608 return group; in get_pci_alias_group()
618 struct iommu_group *group; member
630 data->group = iommu_group_get(&pdev->dev); in get_pci_alias_or_group()
632 return data->group != NULL; in get_pci_alias_or_group()
643 struct iommu_group *group = NULL; in iommu_group_get_for_pci_dev() local
653 return data.group; in iommu_group_get_for_pci_dev()
672 group = iommu_group_get(&pdev->dev); in iommu_group_get_for_pci_dev()
673 if (group) in iommu_group_get_for_pci_dev()
674 return group; in iommu_group_get_for_pci_dev()
681 group = get_pci_alias_group(pdev, (unsigned long *)devfns); in iommu_group_get_for_pci_dev()
682 if (group) in iommu_group_get_for_pci_dev()
683 return group; in iommu_group_get_for_pci_dev()
690 group = get_pci_function_alias_group(pdev, (unsigned long *)devfns); in iommu_group_get_for_pci_dev()
691 if (group) in iommu_group_get_for_pci_dev()
692 return group; in iommu_group_get_for_pci_dev()
710 struct iommu_group *group; in iommu_group_get_for_dev() local
713 group = iommu_group_get(dev); in iommu_group_get_for_dev()
714 if (group) in iommu_group_get_for_dev()
715 return group; in iommu_group_get_for_dev()
720 group = iommu_group_get_for_pci_dev(to_pci_dev(dev)); in iommu_group_get_for_dev()
722 if (IS_ERR(group)) in iommu_group_get_for_dev()
723 return group; in iommu_group_get_for_dev()
725 ret = iommu_group_add_device(group, dev); in iommu_group_get_for_dev()
727 iommu_group_put(group); in iommu_group_get_for_dev()
731 return group; in iommu_group_get_for_dev()
754 struct iommu_group *group; in iommu_bus_notifier() local
775 group = iommu_group_get(dev); in iommu_bus_notifier()
776 if (!group) in iommu_bus_notifier()
795 blocking_notifier_call_chain(&group->notifier, in iommu_bus_notifier()
798 iommu_group_put(group); in iommu_bus_notifier()
965 int iommu_attach_group(struct iommu_domain *domain, struct iommu_group *group) in iommu_attach_group() argument
967 return iommu_group_for_each_dev(group, domain, in iommu_attach_group()
981 void iommu_detach_group(struct iommu_domain *domain, struct iommu_group *group) in iommu_detach_group() argument
983 iommu_group_for_each_dev(group, domain, iommu_group_do_detach_device); in iommu_detach_group()