static int trace_search_list(struct list_head **list)
 {
-       struct trace_event *e;
+       struct trace_event *e = NULL, *iter;
        int next = __TRACE_LAST_TYPE;
 
        if (list_empty(&ftrace_event_list)) {
         * We used up all possible max events,
         * lets see if somebody freed one.
         */
-       list_for_each_entry(e, &ftrace_event_list, list) {
-               if (e->type != next)
+       list_for_each_entry(iter, &ftrace_event_list, list) {
+               if (iter->type != next) {
+                       e = iter;
                        break;
+               }
                next++;
        }
 
        if (next > TRACE_EVENT_TYPE_MAX)
                return 0;
 
-       *list = &e->list;
+       if (e)
+               *list = &e->list;
+       else
+               *list = &ftrace_event_list;
        return next;
 }