if (check_vtimer(timer) || !timer->function) { 
if (!timer->function) { 
int mod_virt_timer(struct vtimer_list *timer, __u64 expires){	struct vtimer_queue *vt_list;	unsigned long flags;	int cpu;	if (check_vtimer(timer) || !timer->function) {		printk("mod_virt_timer: uninitialized timer\n");		return	-EINVAL;	}	if (!expires || expires > VTIMER_MAX_SLICE) {		printk("mod_virt_timer: invalid expire range\n");		return -EINVAL;	}	/*	 * This is a common optimization triggered by the	 * networking code - if the timer is re-modified	 * to be the same thing then just return:	 */	if (timer->expires == expires && vtimer_pending(timer))		return 1;	cpu = get_cpu();	vt_list = &per_cpu(virt_cpu_timer, cpu);	/* disable interrupts before test if timer is pending */	spin_lock_irqsave(&vt_list->lock, flags);	/* if timer isn't pending add it on the current CPU */	if (!vtimer_pending(timer)) {		spin_unlock_irqrestore(&vt_list->lock, flags);		/* we do not activate an interval timer with mod_virt_timer */		timer->interval = 0;		timer->expires = expires;		timer->cpu = cpu;		internal_add_vtimer(timer);		return 0;	}	/* check if we run on the right CPU */	if (timer->cpu != cpu) {		printk("mod_virt_timer: running on wrong CPU, check your code\n");		spin_unlock_irqrestore(&vt_list->lock, flags);		put_cpu();		return -EINVAL;	}	list_del_init(&timer->entry);	timer->expires = expires;	/* also change the interval if we have an interval timer */	if (timer->interval)		timer->interval = expires;	/* the timer can't expire anymore so we can release the lock */	spin_unlock_irqrestore(&vt_list->lock, flags);	internal_add_vtimer(timer);	return 1;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/dfc4f94d2ff95fc92127d3e512c1df7cab274fb8/vtime.c/buggy/arch/s390/kernel/vtime.c