Lines Matching refs:perfmon

18 void vc4_perfmon_get(struct vc4_perfmon *perfmon)  in vc4_perfmon_get()  argument
20 if (perfmon) in vc4_perfmon_get()
21 refcount_inc(&perfmon->refcnt); in vc4_perfmon_get()
24 void vc4_perfmon_put(struct vc4_perfmon *perfmon) in vc4_perfmon_put() argument
26 if (perfmon && refcount_dec_and_test(&perfmon->refcnt)) in vc4_perfmon_put()
27 kfree(perfmon); in vc4_perfmon_put()
30 void vc4_perfmon_start(struct vc4_dev *vc4, struct vc4_perfmon *perfmon) in vc4_perfmon_start() argument
35 if (WARN_ON_ONCE(!perfmon || vc4->active_perfmon)) in vc4_perfmon_start()
38 for (i = 0; i < perfmon->ncounters; i++) in vc4_perfmon_start()
39 V3D_WRITE(V3D_PCTRS(i), perfmon->events[i]); in vc4_perfmon_start()
41 mask = GENMASK(perfmon->ncounters - 1, 0); in vc4_perfmon_start()
44 vc4->active_perfmon = perfmon; in vc4_perfmon_start()
47 void vc4_perfmon_stop(struct vc4_dev *vc4, struct vc4_perfmon *perfmon, in vc4_perfmon_stop() argument
53 perfmon != vc4->active_perfmon)) in vc4_perfmon_stop()
57 for (i = 0; i < perfmon->ncounters; i++) in vc4_perfmon_stop()
58 perfmon->counters[i] += V3D_READ(V3D_PCTR(i)); in vc4_perfmon_stop()
67 struct vc4_perfmon *perfmon; in vc4_perfmon_find() local
69 mutex_lock(&vc4file->perfmon.lock); in vc4_perfmon_find()
70 perfmon = idr_find(&vc4file->perfmon.idr, id); in vc4_perfmon_find()
71 vc4_perfmon_get(perfmon); in vc4_perfmon_find()
72 mutex_unlock(&vc4file->perfmon.lock); in vc4_perfmon_find()
74 return perfmon; in vc4_perfmon_find()
79 mutex_init(&vc4file->perfmon.lock); in vc4_perfmon_open_file()
80 idr_init_base(&vc4file->perfmon.idr, VC4_PERFMONID_MIN); in vc4_perfmon_open_file()
85 struct vc4_perfmon *perfmon = elem; in vc4_perfmon_idr_del() local
87 vc4_perfmon_put(perfmon); in vc4_perfmon_idr_del()
94 mutex_lock(&vc4file->perfmon.lock); in vc4_perfmon_close_file()
95 idr_for_each(&vc4file->perfmon.idr, vc4_perfmon_idr_del, NULL); in vc4_perfmon_close_file()
96 idr_destroy(&vc4file->perfmon.idr); in vc4_perfmon_close_file()
97 mutex_unlock(&vc4file->perfmon.lock); in vc4_perfmon_close_file()
106 struct vc4_perfmon *perfmon; in vc4_perfmon_create_ioctl() local
126 perfmon = kzalloc(struct_size(perfmon, counters, req->ncounters), in vc4_perfmon_create_ioctl()
128 if (!perfmon) in vc4_perfmon_create_ioctl()
132 perfmon->events[i] = req->events[i]; in vc4_perfmon_create_ioctl()
134 perfmon->ncounters = req->ncounters; in vc4_perfmon_create_ioctl()
136 refcount_set(&perfmon->refcnt, 1); in vc4_perfmon_create_ioctl()
138 mutex_lock(&vc4file->perfmon.lock); in vc4_perfmon_create_ioctl()
139 ret = idr_alloc(&vc4file->perfmon.idr, perfmon, VC4_PERFMONID_MIN, in vc4_perfmon_create_ioctl()
141 mutex_unlock(&vc4file->perfmon.lock); in vc4_perfmon_create_ioctl()
144 kfree(perfmon); in vc4_perfmon_create_ioctl()
158 struct vc4_perfmon *perfmon; in vc4_perfmon_destroy_ioctl() local
165 mutex_lock(&vc4file->perfmon.lock); in vc4_perfmon_destroy_ioctl()
166 perfmon = idr_remove(&vc4file->perfmon.idr, req->id); in vc4_perfmon_destroy_ioctl()
167 mutex_unlock(&vc4file->perfmon.lock); in vc4_perfmon_destroy_ioctl()
169 if (!perfmon) in vc4_perfmon_destroy_ioctl()
172 vc4_perfmon_put(perfmon); in vc4_perfmon_destroy_ioctl()
182 struct vc4_perfmon *perfmon; in vc4_perfmon_get_values_ioctl() local
190 mutex_lock(&vc4file->perfmon.lock); in vc4_perfmon_get_values_ioctl()
191 perfmon = idr_find(&vc4file->perfmon.idr, req->id); in vc4_perfmon_get_values_ioctl()
192 vc4_perfmon_get(perfmon); in vc4_perfmon_get_values_ioctl()
193 mutex_unlock(&vc4file->perfmon.lock); in vc4_perfmon_get_values_ioctl()
195 if (!perfmon) in vc4_perfmon_get_values_ioctl()
198 if (copy_to_user(u64_to_user_ptr(req->values_ptr), perfmon->counters, in vc4_perfmon_get_values_ioctl()
199 perfmon->ncounters * sizeof(u64))) in vc4_perfmon_get_values_ioctl()
204 vc4_perfmon_put(perfmon); in vc4_perfmon_get_values_ioctl()