rem: unlock( &(timer_list->mutex) );
add: unlock(timer_list->mutex);
context: struct timer_link  *check_and_split_time_list( struct timer *timer_list, int time ){	struct timer_link *tl , *tmp , *end, *ret;	/* quick check whether it is worth entering the lock */	if (timer_list->first_tl.next_tl==&timer_list->last_tl ||		timer_list->first_tl.next_tl->time_out > time )			return NULL;	/* the entire timer list is locked now -- noone else can manipulate it */	lock( &(timer_list->mutex) );	end = &timer_list->last_tl;	tl = timer_list->first_tl.next_tl;	while( tl!=end && tl->time_out <= time) {		tl->timer_list = NULL;		tl=tl->next_tl;	}	/* nothing to delete found */	if (tl->prev_tl==&(timer_list->first_tl)) {		ret = NULL;	} else { /* we did find timers to be fired! */		/* the detached list begins with current beginning */		ret = timer_list->first_tl.next_tl;		/* and we mark the end of the split list */		tl->prev_tl->next_tl = NULL;		/* the shortened list starts from where we suspended */		timer_list->first_tl.next_tl = tl;			tl->prev_tl = & timer_list->first_tl;	}   /* give the list lock away */   unlock( &(timer_list->mutex) );   return ret;}