Lines Matching refs:container

50 static int tce_iommu_enable(struct tce_container *container)  in tce_iommu_enable()  argument
54 struct iommu_table *tbl = container->tbl; in tce_iommu_enable()
56 if (!container->tbl) in tce_iommu_enable()
62 if (container->enabled) in tce_iommu_enable()
94 container->enabled = true; in tce_iommu_enable()
101 static void tce_iommu_disable(struct tce_container *container) in tce_iommu_disable() argument
103 if (!container->enabled) in tce_iommu_disable()
106 container->enabled = false; in tce_iommu_disable()
108 if (!container->tbl || !current->mm) in tce_iommu_disable()
112 current->mm->locked_vm -= (container->tbl->it_size << in tce_iommu_disable()
119 struct tce_container *container; in tce_iommu_open() local
126 container = kzalloc(sizeof(*container), GFP_KERNEL); in tce_iommu_open()
127 if (!container) in tce_iommu_open()
130 mutex_init(&container->lock); in tce_iommu_open()
132 return container; in tce_iommu_open()
137 struct tce_container *container = iommu_data; in tce_iommu_release() local
139 WARN_ON(container->tbl && !container->tbl->it_group); in tce_iommu_release()
140 tce_iommu_disable(container); in tce_iommu_release()
142 if (container->tbl && container->tbl->it_group) in tce_iommu_release()
143 tce_iommu_detach_group(iommu_data, container->tbl->it_group); in tce_iommu_release()
145 mutex_destroy(&container->lock); in tce_iommu_release()
147 kfree(container); in tce_iommu_release()
153 struct tce_container *container = iommu_data; in tce_iommu_ioctl() local
172 struct iommu_table *tbl = container->tbl; in tce_iommu_ioctl()
197 struct iommu_table *tbl = container->tbl; in tce_iommu_ioctl()
250 struct iommu_table *tbl = container->tbl; in tce_iommu_ioctl()
284 mutex_lock(&container->lock); in tce_iommu_ioctl()
285 ret = tce_iommu_enable(container); in tce_iommu_ioctl()
286 mutex_unlock(&container->lock); in tce_iommu_ioctl()
291 mutex_lock(&container->lock); in tce_iommu_ioctl()
292 tce_iommu_disable(container); in tce_iommu_ioctl()
293 mutex_unlock(&container->lock); in tce_iommu_ioctl()
296 if (!container->tbl || !container->tbl->it_group) in tce_iommu_ioctl()
299 return vfio_spapr_iommu_eeh_ioctl(container->tbl->it_group, in tce_iommu_ioctl()
310 struct tce_container *container = iommu_data; in tce_iommu_attach_group() local
314 mutex_lock(&container->lock); in tce_iommu_attach_group()
318 if (container->tbl) { in tce_iommu_attach_group()
320 iommu_group_id(container->tbl->it_group), in tce_iommu_attach_group()
323 } else if (container->enabled) { in tce_iommu_attach_group()
330 container->tbl = tbl; in tce_iommu_attach_group()
333 mutex_unlock(&container->lock); in tce_iommu_attach_group()
341 struct tce_container *container = iommu_data; in tce_iommu_detach_group() local
345 mutex_lock(&container->lock); in tce_iommu_detach_group()
346 if (tbl != container->tbl) { in tce_iommu_detach_group()
351 if (container->enabled) { in tce_iommu_detach_group()
354 tce_iommu_disable(container); in tce_iommu_detach_group()
359 container->tbl = NULL; in tce_iommu_detach_group()
362 mutex_unlock(&container->lock); in tce_iommu_detach_group()