Lines Matching full:ms
23 struct ivpu_ms_instance *ms; in get_instance_by_mask() local
27 list_for_each_entry(ms, &file_priv->ms_instance_list, ms_instance_node) in get_instance_by_mask()
28 if (ms->mask == metric_mask) in get_instance_by_mask()
29 return ms; in get_instance_by_mask()
39 struct ivpu_ms_instance *ms; in ivpu_ms_start_ioctl() local
60 ms = kzalloc(sizeof(*ms), GFP_KERNEL); in ivpu_ms_start_ioctl()
61 if (!ms) { in ivpu_ms_start_ioctl()
66 ms->mask = args->metric_group_mask; in ivpu_ms_start_ioctl()
68 ret = ivpu_jsm_metric_streamer_info(vdev, ms->mask, 0, 0, &sample_size, NULL); in ivpu_ms_start_ioctl()
74 ms->bo = ivpu_bo_create_global(vdev, PAGE_ALIGN(single_buff_size * MS_NUM_BUFFERS), in ivpu_ms_start_ioctl()
76 if (!ms->bo) { in ivpu_ms_start_ioctl()
77 ivpu_err(vdev, "Failed to allocate MS buffer (size %llu)\n", single_buff_size); in ivpu_ms_start_ioctl()
82 ms->buff_size = ivpu_bo_size(ms->bo) / MS_NUM_BUFFERS; in ivpu_ms_start_ioctl()
83 ms->active_buff_vpu_addr = ms->bo->vpu_addr; in ivpu_ms_start_ioctl()
84 ms->inactive_buff_vpu_addr = ms->bo->vpu_addr + ms->buff_size; in ivpu_ms_start_ioctl()
85 ms->active_buff_ptr = ivpu_bo_vaddr(ms->bo); in ivpu_ms_start_ioctl()
86 ms->inactive_buff_ptr = ivpu_bo_vaddr(ms->bo) + ms->buff_size; in ivpu_ms_start_ioctl()
88 ret = ivpu_jsm_metric_streamer_start(vdev, ms->mask, args->sampling_period_ns, in ivpu_ms_start_ioctl()
89 ms->active_buff_vpu_addr, ms->buff_size); in ivpu_ms_start_ioctl()
94 args->max_data_size = ivpu_bo_size(ms->bo); in ivpu_ms_start_ioctl()
95 list_add_tail(&ms->ms_instance_node, &file_priv->ms_instance_list); in ivpu_ms_start_ioctl()
99 ivpu_bo_free(ms->bo); in ivpu_ms_start_ioctl()
101 kfree(ms); in ivpu_ms_start_ioctl()
110 copy_leftover_bytes(struct ivpu_ms_instance *ms, in copy_leftover_bytes() argument
115 if (ms->leftover_bytes) { in copy_leftover_bytes()
116 copy_bytes = min(user_size - *user_bytes_copied, ms->leftover_bytes); in copy_leftover_bytes()
117 if (copy_to_user(user_ptr + *user_bytes_copied, ms->leftover_addr, copy_bytes)) in copy_leftover_bytes()
120 ms->leftover_bytes -= copy_bytes; in copy_leftover_bytes()
121 ms->leftover_addr += copy_bytes; in copy_leftover_bytes()
129 copy_samples_to_user(struct ivpu_device *vdev, struct ivpu_ms_instance *ms, in copy_samples_to_user() argument
137 ret = copy_leftover_bytes(ms, user_ptr, user_size, user_bytes_copied); in copy_samples_to_user()
144 ret = ivpu_jsm_metric_streamer_update(vdev, ms->mask, ms->inactive_buff_vpu_addr, in copy_samples_to_user()
145 ms->buff_size, &bytes_written); in copy_samples_to_user()
149 swap(ms->active_buff_vpu_addr, ms->inactive_buff_vpu_addr); in copy_samples_to_user()
150 swap(ms->active_buff_ptr, ms->inactive_buff_ptr); in copy_samples_to_user()
152 ms->leftover_bytes = bytes_written; in copy_samples_to_user()
153 ms->leftover_addr = ms->inactive_buff_ptr; in copy_samples_to_user()
155 return copy_leftover_bytes(ms, user_ptr, user_size, user_bytes_copied); in copy_samples_to_user()
163 struct ivpu_ms_instance *ms; in ivpu_ms_get_data_ioctl() local
176 ms = get_instance_by_mask(file_priv, args->metric_group_mask); in ivpu_ms_get_data_ioctl()
177 if (!ms) { in ivpu_ms_get_data_ioctl()
184 ret = ivpu_jsm_metric_streamer_update(vdev, ms->mask, 0, 0, &bytes_written); in ivpu_ms_get_data_ioctl()
187 args->data_size = bytes_written + ms->leftover_bytes; in ivpu_ms_get_data_ioctl()
196 ret = copy_samples_to_user(vdev, ms, u64_to_user_ptr(args->buffer_ptr), in ivpu_ms_get_data_ioctl()
205 static void free_instance(struct ivpu_file_priv *file_priv, struct ivpu_ms_instance *ms) in free_instance() argument
209 list_del(&ms->ms_instance_node); in free_instance()
210 ivpu_jsm_metric_streamer_stop(file_priv->vdev, ms->mask); in free_instance()
211 ivpu_bo_free(ms->bo); in free_instance()
212 kfree(ms); in free_instance()
220 struct ivpu_ms_instance *ms; in ivpu_ms_stop_ioctl() local
232 ms = get_instance_by_mask(file_priv, args->metric_group_mask); in ivpu_ms_stop_ioctl()
233 if (ms) in ivpu_ms_stop_ioctl()
234 free_instance(file_priv, ms); in ivpu_ms_stop_ioctl()
239 return ms ? 0 : -EINVAL; in ivpu_ms_stop_ioctl()
302 struct ivpu_ms_instance *ms, *tmp; in ivpu_ms_cleanup() local
314 list_for_each_entry_safe(ms, tmp, &file_priv->ms_instance_list, ms_instance_node) in ivpu_ms_cleanup()
315 free_instance(file_priv, ms); in ivpu_ms_cleanup()