init_timer(&timer); timer.expires = expire; timer.data = (unsigned long) current; timer.function = process_timeout;  add_timer(&timer); 
setup_timer(&timer, process_timeout, (unsigned long)current); __mod_timer(&timer, expire); 
fastcall signed long __sched schedule_timeout(signed long timeout){	struct timer_list timer;	unsigned long expire;	switch (timeout)	{	case MAX_SCHEDULE_TIMEOUT:		/*		 * These two special cases are useful to be comfortable		 * in the caller. Nothing more. We could take		 * MAX_SCHEDULE_TIMEOUT from one of the negative value		 * but I' d like to return a valid offset (>=0) to allow		 * the caller to do everything it want with the retval.		 */		schedule();		goto out;	default:		/*		 * Another bit of PARANOID. Note that the retval will be		 * 0 since no piece of kernel is supposed to do a check		 * for a negative retval of schedule_timeout() (since it		 * should never happens anyway). You just have the printk()		 * that will tell you if something is gone wrong and where.		 */		if (timeout < 0)		{			printk(KERN_ERR "schedule_timeout: wrong timeout "			       "value %lx from %p\n", timeout,			       __builtin_return_address(0));			current->state = TASK_RUNNING;			goto out;		}	}	expire = timeout + jiffies;	init_timer(&timer);	timer.expires = expire;	timer.data = (unsigned long) current;	timer.function = process_timeout;	add_timer(&timer);	schedule();	del_singleshot_timer_sync(&timer);	timeout = expire - jiffies; out:	return timeout < 0 ? 0 : timeout;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/a8db2db1e6a8d323d87a67c5391d48fe2b97faf5/timer.c/buggy/kernel/timer.c