Unverified Commit e55caf58 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!14009 drm/vc4: Stop the active perfmon before being destroyed

parents 627048d3 bc9e619a
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -673,6 +673,8 @@ struct vc4_exec_info {
 * released when the DRM file is closed should be placed here.
 */
struct vc4_file {
	struct vc4_dev *dev;

	struct {
		struct idr idr;
		struct mutex lock;
+6 −1
Original line number Diff line number Diff line
@@ -83,6 +83,11 @@ void vc4_perfmon_open_file(struct vc4_file *vc4file)
static int vc4_perfmon_idr_del(int id, void *elem, void *data)
{
	struct vc4_perfmon *perfmon = elem;
	struct vc4_dev *vc4 = (struct vc4_dev *)data;

	/* If the active perfmon is being destroyed, stop it first */
	if (perfmon == vc4->active_perfmon)
		vc4_perfmon_stop(vc4, perfmon, false);

	vc4_perfmon_put(perfmon);

@@ -92,7 +97,7 @@ static int vc4_perfmon_idr_del(int id, void *elem, void *data)
void vc4_perfmon_close_file(struct vc4_file *vc4file)
{
	mutex_lock(&vc4file->perfmon.lock);
	idr_for_each(&vc4file->perfmon.idr, vc4_perfmon_idr_del, NULL);
	idr_for_each(&vc4file->perfmon.idr, vc4_perfmon_idr_del, vc4file->dev);
	idr_destroy(&vc4file->perfmon.idr);
	mutex_unlock(&vc4file->perfmon.lock);
}