Lines Matching defs:perfmon
20 void vc4_perfmon_get(struct vc4_perfmon *perfmon)
24 if (!perfmon)
27 vc4 = perfmon->dev;
31 refcount_inc(&perfmon->refcnt);
34 void vc4_perfmon_put(struct vc4_perfmon *perfmon)
38 if (!perfmon)
41 vc4 = perfmon->dev;
45 if (refcount_dec_and_test(&perfmon->refcnt))
46 kfree(perfmon);
49 void vc4_perfmon_start(struct vc4_dev *vc4, struct vc4_perfmon *perfmon)
57 if (WARN_ON_ONCE(!perfmon || vc4->active_perfmon))
60 for (i = 0; i < perfmon->ncounters; i++)
61 V3D_WRITE(V3D_PCTRS(i), perfmon->events[i]);
63 mask = GENMASK(perfmon->ncounters - 1, 0);
66 vc4->active_perfmon = perfmon;
69 void vc4_perfmon_stop(struct vc4_dev *vc4, struct vc4_perfmon *perfmon,
78 perfmon != vc4->active_perfmon))
82 for (i = 0; i < perfmon->ncounters; i++)
83 perfmon->counters[i] += V3D_READ(V3D_PCTR(i));
93 struct vc4_perfmon *perfmon;
98 mutex_lock(&vc4file->perfmon.lock);
99 perfmon = idr_find(&vc4file->perfmon.idr, id);
100 vc4_perfmon_get(perfmon);
101 mutex_unlock(&vc4file->perfmon.lock);
103 return perfmon;
113 mutex_init(&vc4file->perfmon.lock);
114 idr_init_base(&vc4file->perfmon.idr, VC4_PERFMONID_MIN);
120 struct vc4_perfmon *perfmon = elem;
123 /* If the active perfmon is being destroyed, stop it first */
124 if (perfmon == vc4->active_perfmon)
125 vc4_perfmon_stop(vc4, perfmon, false);
127 vc4_perfmon_put(perfmon);
139 mutex_lock(&vc4file->perfmon.lock);
140 idr_for_each(&vc4file->perfmon.idr, vc4_perfmon_idr_del, vc4);
141 idr_destroy(&vc4file->perfmon.idr);
142 mutex_unlock(&vc4file->perfmon.lock);
143 mutex_destroy(&vc4file->perfmon.lock);
152 struct vc4_perfmon *perfmon;
160 DRM_DEBUG("Creating perfmon no VC4 V3D probed\n");
175 perfmon = kzalloc(struct_size(perfmon, counters, req->ncounters),
177 if (!perfmon)
179 perfmon->dev = vc4;
182 perfmon->events[i] = req->events[i];
184 perfmon->ncounters = req->ncounters;
186 refcount_set(&perfmon->refcnt, 1);
188 mutex_lock(&vc4file->perfmon.lock);
189 ret = idr_alloc(&vc4file->perfmon.idr, perfmon, VC4_PERFMONID_MIN,
191 mutex_unlock(&vc4file->perfmon.lock);
194 kfree(perfmon);
208 struct vc4_perfmon *perfmon;
214 DRM_DEBUG("Destroying perfmon no VC4 V3D probed\n");
218 mutex_lock(&vc4file->perfmon.lock);
219 perfmon = idr_remove(&vc4file->perfmon.idr, req->id);
220 mutex_unlock(&vc4file->perfmon.lock);
222 if (!perfmon)
225 vc4_perfmon_put(perfmon);
235 struct vc4_perfmon *perfmon;
242 DRM_DEBUG("Getting perfmon no VC4 V3D probed\n");
246 perfmon = vc4_perfmon_find(vc4file, req->id);
247 if (!perfmon)
250 if (copy_to_user(u64_to_user_ptr(req->values_ptr), perfmon->counters,
251 perfmon->ncounters * sizeof(u64)))
256 vc4_perfmon_put(perfmon);