Hey Tao! On 7/6/22 19:49, Tao Zhou wrote: >> +static void *enabled_monitors_start(struct seq_file *m, loff_t *pos) >> +{ >> + struct rv_monitor_def *m_def; >> + loff_t l; >> + >> + mutex_lock(&rv_interface_lock); >> + m_def = list_entry(&rv_monitors_list, struct rv_monitor_def, list); > I realized this m_def is not real but vain. Is it possible the loop is > skiped and just return m_def that is not valid. that is empty... not a problem. I am not seeing (the possible) problem here. Could you simulate/reproduce the problem? Btw, this code is "inspired" (iow stolen) from trace_events.c. Am I missing something? steve? >> + for (l = 0; l <= *pos; ) { >> + m_def = enabled_monitors_next(m, m_def, &l); >> + if (!m_def) >> + break; >> + } >> + >> + return m_def; >> +} -- Daniel