diff --git a/msm/sde_dbg.c b/msm/sde_dbg.c index 712cefd63b..a7717f3e15 100755 --- a/msm/sde_dbg.c +++ b/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); diff --git a/msm/sde_dbg.h b/msm/sde_dbg.h index 03c02f20a9..95598e094e 100644 --- a/msm/sde_dbg.h +++ b/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; diff --git a/msm/sde_dbg_evtlog.c b/msm/sde_dbg_evtlog.c index 1b18d4a49b..c6d3746d6a 100644 --- a/msm/sde_dbg_evtlog.c +++ b/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; + index = abs(atomic_inc_return(&evtlog->curr) % SDE_EVTLOG_ENTRY); - spin_lock_irqsave(&evtlog->spin_lock, flags); - - 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;