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

Commit 6b4a148d authored by Yashwanth's avatar Yashwanth
Browse files

disp: msm: sde: avoid using spinlock for register log



Add support to use atomic variable instead of spinlock
for register logs during register write. This change
helps in reducing the run-time and is safe to use as
most of the register writes happen in commit context.

Change-Id: Ib7e377f80cbf437e391792b0b424cbd1eefdf497
Signed-off-by: default avatarYashwanth <yvulapu@codeaurora.org>
parent 9025759e
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -156,11 +156,10 @@ struct sde_dbg_reglog {
	u32 first;
	u32 last;
	u32 last_dump;
	u32 curr;
	atomic64_t curr;
	u32 next;
	u32 enable;
	u32 enable_mask;
	spinlock_t spin_lock;
};

extern struct sde_dbg_reglog *sde_dbg_base_reglog;
+4 −9
Original line number Diff line number Diff line
@@ -103,27 +103,22 @@ void sde_evtlog_log(struct sde_dbg_evtlog *evtlog, const char *name, int line,

void sde_reglog_log(u8 blk_id, u32 val, u32 addr)
{
	unsigned long flags;
	struct sde_dbg_reglog_log *log;
	struct sde_dbg_reglog *reglog = sde_dbg_base_reglog;
	int index;

	if (!reglog)
		return;

	spin_lock_irqsave(&reglog->spin_lock, flags);

	log = &reglog->logs[reglog->curr];
	index = abs(atomic64_inc_return(&reglog->curr) % SDE_REGLOG_ENTRY);

	log = &reglog->logs[index];
	log->blk_id = blk_id;
	log->val = val;
	log->addr = addr;
	log->time = local_clock();
	log->pid = current->pid;

	reglog->curr = (reglog->curr + 1) % SDE_REGLOG_ENTRY;
	reglog->last++;

	spin_unlock_irqrestore(&reglog->spin_lock, flags);
}

/* always dump the last entries which are not dumped yet */
@@ -244,7 +239,7 @@ struct sde_dbg_reglog *sde_reglog_init(void)
	if (!reglog)
		return ERR_PTR(-ENOMEM);

	spin_lock_init(&reglog->spin_lock);
	atomic64_set(&reglog->curr, 0);

	return reglog;
}