Pārlūkot izejas kodu

disp: msm: avoid using spinlock while adding evtlog entry

Add support to use atomic variable instead of spinlog
for event log while adding enries. This change will
help optimize event log writing time.

Change-Id: I83661b85cd76ca738729ac51aa5afd97d162508d
Signed-off-by: Samantha Tran <[email protected]>
Samantha Tran 4 gadi atpakaļ
vecāks
revīzija
ae94f07d6e
3 mainītis faili ar 8 papildinājumiem un 15 dzēšanām
  1. 1 1
      msm/sde_dbg.c
  2. 1 1
      msm/sde_dbg.h
  3. 6 13
      msm/sde_dbg_evtlog.c

+ 1 - 1
msm/sde_dbg.c

@@ -1154,7 +1154,7 @@ static int sde_dbg_debugfs_open(struct inode *inode, struct file *file)
 	file->private_data = inode->i_private;
 	mutex_lock(&sde_dbg_base.mutex);
 	sde_dbg_base.cur_evt_index = 0;
-	sde_dbg_base.evtlog->first = sde_dbg_base.evtlog->curr + 1;
+	sde_dbg_base.evtlog->first = (u32)atomic_add_return(0, &sde_dbg_base.evtlog->curr) + 1;
 	sde_dbg_base.evtlog->last =
 		sde_dbg_base.evtlog->first + SDE_EVTLOG_ENTRY;
 	mutex_unlock(&sde_dbg_base.mutex);

+ 1 - 1
msm/sde_dbg.h

@@ -153,7 +153,7 @@ struct sde_dbg_evtlog {
 	u32 first;
 	u32 last;
 	u32 last_dump;
-	u32 curr;
+	atomic_t curr;
 	u32 next;
 	u32 enable;
 	u32 dump_mode;

+ 6 - 13
msm/sde_dbg_evtlog.c

@@ -58,23 +58,18 @@ bool sde_evtlog_is_enabled(struct sde_dbg_evtlog *evtlog, u32 flag)
 void sde_evtlog_log(struct sde_dbg_evtlog *evtlog, const char *name, int line,
 		int flag, ...)
 {
-	unsigned long flags;
 	int i, val = 0;
 	va_list args;
 	struct sde_dbg_evtlog_log *log;
+	u32 index;
 
-	if (!evtlog)
+	if (!evtlog || !sde_evtlog_is_enabled(evtlog, flag) ||
+			_sde_evtlog_is_filtered_no_lock(evtlog, name))
 		return;
 
-	if (!sde_evtlog_is_enabled(evtlog, flag))
-		return;
-
-	spin_lock_irqsave(&evtlog->spin_lock, flags);
+	index = abs(atomic_inc_return(&evtlog->curr) % SDE_EVTLOG_ENTRY);
 
-	if (_sde_evtlog_is_filtered_no_lock(evtlog, name))
-		goto exit;
-
-	log = &evtlog->logs[evtlog->curr];
+	log = &evtlog->logs[index];
 	log->time = local_clock();
 	log->name = name;
 	log->line = line;
@@ -93,12 +88,9 @@ void sde_evtlog_log(struct sde_dbg_evtlog *evtlog, const char *name, int line,
 	}
 	va_end(args);
 	log->data_cnt = i;
-	evtlog->curr = (evtlog->curr + 1) % SDE_EVTLOG_ENTRY;
 	evtlog->last++;
 
 	trace_sde_evtlog(name, line, log->data_cnt, log->data);
-exit:
-	spin_unlock_irqrestore(&evtlog->spin_lock, flags);
 }
 
 void sde_reglog_log(u8 blk_id, u32 val, u32 addr)
@@ -224,6 +216,7 @@ struct sde_dbg_evtlog *sde_evtlog_init(void)
 		return ERR_PTR(-ENOMEM);
 
 	spin_lock_init(&evtlog->spin_lock);
+	atomic_set(&evtlog->curr, 0);
 	evtlog->enable = SDE_EVTLOG_DEFAULT_ENABLE;
 	evtlog->dump_mode = SDE_DBG_DEFAULT_DUMP_MODE;