Lines Matching full:cmd
40 struct iommu_ioas_alloc *cmd = ucmd->cmd; in iommufd_ioas_alloc_ioctl() local
44 if (cmd->flags) in iommufd_ioas_alloc_ioctl()
51 cmd->out_ioas_id = ioas->obj.id; in iommufd_ioas_alloc_ioctl()
52 rc = iommufd_ucmd_respond(ucmd, sizeof(*cmd)); in iommufd_ioas_alloc_ioctl()
69 struct iommu_ioas_iova_ranges *cmd = ucmd->cmd; in iommufd_ioas_iova_ranges() local
75 if (cmd->__reserved) in iommufd_ioas_iova_ranges()
78 ioas = iommufd_get_ioas(ucmd->ictx, cmd->ioas_id); in iommufd_ioas_iova_ranges()
83 max_iovas = cmd->num_iovas; in iommufd_ioas_iova_ranges()
84 ranges = u64_to_user_ptr(cmd->allowed_iovas); in iommufd_ioas_iova_ranges()
85 cmd->num_iovas = 0; in iommufd_ioas_iova_ranges()
86 cmd->out_iova_alignment = ioas->iopt.iova_alignment; in iommufd_ioas_iova_ranges()
91 if (cmd->num_iovas < max_iovas) { in iommufd_ioas_iova_ranges()
97 if (copy_to_user(&ranges[cmd->num_iovas], &elm, in iommufd_ioas_iova_ranges()
103 cmd->num_iovas++; in iommufd_ioas_iova_ranges()
105 rc = iommufd_ucmd_respond(ucmd, sizeof(*cmd)); in iommufd_ioas_iova_ranges()
108 if (cmd->num_iovas > max_iovas) in iommufd_ioas_iova_ranges()
148 struct iommu_ioas_allow_iovas *cmd = ucmd->cmd; in iommufd_ioas_allow_iovas() local
155 if (cmd->__reserved) in iommufd_ioas_allow_iovas()
158 ioas = iommufd_get_ioas(ucmd->ictx, cmd->ioas_id); in iommufd_ioas_allow_iovas()
164 u64_to_user_ptr(cmd->allowed_iovas), in iommufd_ioas_allow_iovas()
165 cmd->num_iovas); in iommufd_ioas_allow_iovas()
206 struct iommu_ioas_map_file *cmd = ucmd->cmd; in iommufd_ioas_map_file() local
207 unsigned long iova = cmd->iova; in iommufd_ioas_map_file()
213 if (cmd->flags & in iommufd_ioas_map_file()
218 if (cmd->iova >= ULONG_MAX || cmd->length >= ULONG_MAX) in iommufd_ioas_map_file()
221 if (!(cmd->flags & in iommufd_ioas_map_file()
225 ioas = iommufd_get_ioas(ucmd->ictx, cmd->ioas_id); in iommufd_ioas_map_file()
229 if (!(cmd->flags & IOMMU_IOAS_MAP_FIXED_IOVA)) in iommufd_ioas_map_file()
232 file = fget(cmd->fd); in iommufd_ioas_map_file()
237 cmd->start, cmd->length, in iommufd_ioas_map_file()
238 conv_iommu_prot(cmd->flags), flags); in iommufd_ioas_map_file()
242 cmd->iova = iova; in iommufd_ioas_map_file()
243 rc = iommufd_ucmd_respond(ucmd, sizeof(*cmd)); in iommufd_ioas_map_file()
252 struct iommu_ioas_map *cmd = ucmd->cmd; in iommufd_ioas_map() local
253 unsigned long iova = cmd->iova; in iommufd_ioas_map()
258 if ((cmd->flags & in iommufd_ioas_map()
261 cmd->__reserved) in iommufd_ioas_map()
263 if (cmd->iova >= ULONG_MAX || cmd->length >= ULONG_MAX) in iommufd_ioas_map()
266 if (!(cmd->flags & in iommufd_ioas_map()
270 ioas = iommufd_get_ioas(ucmd->ictx, cmd->ioas_id); in iommufd_ioas_map()
274 if (!(cmd->flags & IOMMU_IOAS_MAP_FIXED_IOVA)) in iommufd_ioas_map()
277 u64_to_user_ptr(cmd->user_va), cmd->length, in iommufd_ioas_map()
278 conv_iommu_prot(cmd->flags), flags); in iommufd_ioas_map()
282 cmd->iova = iova; in iommufd_ioas_map()
283 rc = iommufd_ucmd_respond(ucmd, sizeof(*cmd)); in iommufd_ioas_map()
291 struct iommu_ioas_copy *cmd = ucmd->cmd; in iommufd_ioas_copy() local
299 iommufd_test_syz_conv_iova_id(ucmd, cmd->src_ioas_id, &cmd->src_iova, in iommufd_ioas_copy()
300 &cmd->flags); in iommufd_ioas_copy()
302 if ((cmd->flags & in iommufd_ioas_copy()
306 if (cmd->length >= ULONG_MAX || cmd->src_iova >= ULONG_MAX || in iommufd_ioas_copy()
307 cmd->dst_iova >= ULONG_MAX) in iommufd_ioas_copy()
310 if (!(cmd->flags & in iommufd_ioas_copy()
314 src_ioas = iommufd_get_ioas(ucmd->ictx, cmd->src_ioas_id); in iommufd_ioas_copy()
317 rc = iopt_get_pages(&src_ioas->iopt, cmd->src_iova, cmd->length, in iommufd_ioas_copy()
323 dst_ioas = iommufd_get_ioas(ucmd->ictx, cmd->dst_ioas_id); in iommufd_ioas_copy()
329 if (!(cmd->flags & IOMMU_IOAS_MAP_FIXED_IOVA)) in iommufd_ioas_copy()
331 iova = cmd->dst_iova; in iommufd_ioas_copy()
332 rc = iopt_map_pages(&dst_ioas->iopt, &pages_list, cmd->length, &iova, in iommufd_ioas_copy()
333 conv_iommu_prot(cmd->flags), flags); in iommufd_ioas_copy()
337 cmd->dst_iova = iova; in iommufd_ioas_copy()
338 rc = iommufd_ucmd_respond(ucmd, sizeof(*cmd)); in iommufd_ioas_copy()
348 struct iommu_ioas_unmap *cmd = ucmd->cmd; in iommufd_ioas_unmap() local
353 ioas = iommufd_get_ioas(ucmd->ictx, cmd->ioas_id); in iommufd_ioas_unmap()
357 if (cmd->iova == 0 && cmd->length == U64_MAX) { in iommufd_ioas_unmap()
362 if (cmd->iova >= ULONG_MAX || cmd->length >= ULONG_MAX) { in iommufd_ioas_unmap()
366 rc = iopt_unmap_iova(&ioas->iopt, cmd->iova, cmd->length, in iommufd_ioas_unmap()
372 cmd->length = unmapped; in iommufd_ioas_unmap()
373 rc = iommufd_ucmd_respond(ucmd, sizeof(*cmd)); in iommufd_ioas_unmap()
521 struct iommu_ioas_change_process *cmd = ucmd->cmd; in iommufd_ioas_change_process() local
531 if (cmd->__reserved) in iommufd_ioas_change_process()
589 int iommufd_option_rlimit_mode(struct iommu_option *cmd, in iommufd_option_rlimit_mode() argument
592 if (cmd->object_id) in iommufd_option_rlimit_mode()
595 if (cmd->op == IOMMU_OPTION_OP_GET) { in iommufd_option_rlimit_mode()
596 cmd->val64 = ictx->account_mode == IOPT_PAGES_ACCOUNT_MM; in iommufd_option_rlimit_mode()
599 if (cmd->op == IOMMU_OPTION_OP_SET) { in iommufd_option_rlimit_mode()
609 if (cmd->val64 == 0) in iommufd_option_rlimit_mode()
611 else if (cmd->val64 == 1) in iommufd_option_rlimit_mode()
623 static int iommufd_ioas_option_huge_pages(struct iommu_option *cmd, in iommufd_ioas_option_huge_pages() argument
626 if (cmd->op == IOMMU_OPTION_OP_GET) { in iommufd_ioas_option_huge_pages()
627 cmd->val64 = !ioas->iopt.disable_large_pages; in iommufd_ioas_option_huge_pages()
630 if (cmd->op == IOMMU_OPTION_OP_SET) { in iommufd_ioas_option_huge_pages()
631 if (cmd->val64 == 0) in iommufd_ioas_option_huge_pages()
633 if (cmd->val64 == 1) { in iommufd_ioas_option_huge_pages()
644 struct iommu_option *cmd = ucmd->cmd; in iommufd_ioas_option() local
648 if (cmd->__reserved) in iommufd_ioas_option()
651 ioas = iommufd_get_ioas(ucmd->ictx, cmd->object_id); in iommufd_ioas_option()
655 switch (cmd->option_id) { in iommufd_ioas_option()
657 rc = iommufd_ioas_option_huge_pages(cmd, ioas); in iommufd_ioas_option()