Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9db707b4 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "coresight: tmc-etr: Fix deadlock issue while reading from ETR"

parents 3ca0f1e5 e2d07d1a
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -2168,15 +2168,19 @@ int tmc_read_prepare_etr(struct tmc_drvdata *drvdata)
		goto out;
	}

	drvdata->reading = true;

	/* Disable the TMC if we are trying to read from a running session */
	if (drvdata->mode == CS_MODE_SYSFS) {
		spin_unlock_irqrestore(&drvdata->spinlock, flags);
		mutex_unlock(&drvdata->mem_lock);
		coresight_disable_all_source_link();
		mutex_lock(&drvdata->mem_lock);
		spin_lock_irqsave(&drvdata->spinlock, flags);

		__tmc_etr_disable_hw(drvdata);
	}
	drvdata->reading = true;

out:
	spin_unlock_irqrestore(&drvdata->spinlock, flags);
	mutex_unlock(&drvdata->mem_lock);
@@ -2204,10 +2208,6 @@ int tmc_read_unprepare_etr(struct tmc_drvdata *drvdata)
		 * be NULL.
		 */
		__tmc_etr_enable_hw(drvdata);

		spin_unlock_irqrestore(&drvdata->spinlock, flags);
		coresight_enable_all_source_link();
		spin_lock_irqsave(&drvdata->spinlock, flags);
	} else {
		/*
		 * The ETR is not tracing and the buffer was just read.
@@ -2224,5 +2224,9 @@ int tmc_read_unprepare_etr(struct tmc_drvdata *drvdata)
		tmc_etr_free_sysfs_buf(sysfs_buf);

	mutex_unlock(&drvdata->mem_lock);

	if (drvdata->mode == CS_MODE_SYSFS)
		coresight_enable_all_source_link();

	return 0;
}