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

Commit e10b49be 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 6c409bb5 7c7dfa62
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -2165,14 +2165,18 @@ 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);
@@ -2200,10 +2204,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.
@@ -2220,5 +2220,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;
}