diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/s390/kernel/vtime.c | 56 |
1 files changed, 12 insertions, 44 deletions
diff --git a/arch/s390/kernel/vtime.c b/arch/s390/kernel/vtime.c index eb08d04bc1ec..0fa5dc5d68e1 100644 --- a/arch/s390/kernel/vtime.c +++ b/arch/s390/kernel/vtime.c | |||
@@ -318,8 +318,7 @@ static void internal_add_vtimer(struct vtimer_list *timer) | |||
318 | vt_list = &per_cpu(virt_cpu_timer, timer->cpu); | 318 | vt_list = &per_cpu(virt_cpu_timer, timer->cpu); |
319 | spin_lock_irqsave(&vt_list->lock, flags); | 319 | spin_lock_irqsave(&vt_list->lock, flags); |
320 | 320 | ||
321 | if (timer->cpu != smp_processor_id()) | 321 | BUG_ON(timer->cpu != smp_processor_id()); |
322 | printk("internal_add_vtimer: BUG, running on wrong CPU"); | ||
323 | 322 | ||
324 | /* if list is empty we only have to set the timer */ | 323 | /* if list is empty we only have to set the timer */ |
325 | if (list_empty(&vt_list->list)) { | 324 | if (list_empty(&vt_list->list)) { |
@@ -353,25 +352,12 @@ static void internal_add_vtimer(struct vtimer_list *timer) | |||
353 | put_cpu(); | 352 | put_cpu(); |
354 | } | 353 | } |
355 | 354 | ||
356 | static inline int prepare_vtimer(struct vtimer_list *timer) | 355 | static inline void prepare_vtimer(struct vtimer_list *timer) |
357 | { | 356 | { |
358 | if (!timer->function) { | 357 | BUG_ON(!timer->function); |
359 | printk("add_virt_timer: uninitialized timer\n"); | 358 | BUG_ON(!timer->expires || timer->expires > VTIMER_MAX_SLICE); |
360 | return -EINVAL; | 359 | BUG_ON(vtimer_pending(timer)); |
361 | } | ||
362 | |||
363 | if (!timer->expires || timer->expires > VTIMER_MAX_SLICE) { | ||
364 | printk("add_virt_timer: invalid timer expire value!\n"); | ||
365 | return -EINVAL; | ||
366 | } | ||
367 | |||
368 | if (vtimer_pending(timer)) { | ||
369 | printk("add_virt_timer: timer pending\n"); | ||
370 | return -EBUSY; | ||
371 | } | ||
372 | |||
373 | timer->cpu = get_cpu(); | 360 | timer->cpu = get_cpu(); |
374 | return 0; | ||
375 | } | 361 | } |
376 | 362 | ||
377 | /* | 363 | /* |
@@ -382,10 +368,7 @@ void add_virt_timer(void *new) | |||
382 | struct vtimer_list *timer; | 368 | struct vtimer_list *timer; |
383 | 369 | ||
384 | timer = (struct vtimer_list *)new; | 370 | timer = (struct vtimer_list *)new; |
385 | 371 | prepare_vtimer(timer); | |
386 | if (prepare_vtimer(timer) < 0) | ||
387 | return; | ||
388 | |||
389 | timer->interval = 0; | 372 | timer->interval = 0; |
390 | internal_add_vtimer(timer); | 373 | internal_add_vtimer(timer); |
391 | } | 374 | } |
@@ -399,10 +382,7 @@ void add_virt_timer_periodic(void *new) | |||
399 | struct vtimer_list *timer; | 382 | struct vtimer_list *timer; |
400 | 383 | ||
401 | timer = (struct vtimer_list *)new; | 384 | timer = (struct vtimer_list *)new; |
402 | 385 | prepare_vtimer(timer); | |
403 | if (prepare_vtimer(timer) < 0) | ||
404 | return; | ||
405 | |||
406 | timer->interval = timer->expires; | 386 | timer->interval = timer->expires; |
407 | internal_add_vtimer(timer); | 387 | internal_add_vtimer(timer); |
408 | } | 388 | } |
@@ -423,15 +403,8 @@ int mod_virt_timer(struct vtimer_list *timer, __u64 expires) | |||
423 | unsigned long flags; | 403 | unsigned long flags; |
424 | int cpu; | 404 | int cpu; |
425 | 405 | ||
426 | if (!timer->function) { | 406 | BUG_ON(!timer->function); |
427 | printk("mod_virt_timer: uninitialized timer\n"); | 407 | BUG_ON(!expires || expires > VTIMER_MAX_SLICE); |
428 | return -EINVAL; | ||
429 | } | ||
430 | |||
431 | if (!expires || expires > VTIMER_MAX_SLICE) { | ||
432 | printk("mod_virt_timer: invalid expire range\n"); | ||
433 | return -EINVAL; | ||
434 | } | ||
435 | 408 | ||
436 | /* | 409 | /* |
437 | * This is a common optimization triggered by the | 410 | * This is a common optimization triggered by the |
@@ -444,6 +417,9 @@ int mod_virt_timer(struct vtimer_list *timer, __u64 expires) | |||
444 | cpu = get_cpu(); | 417 | cpu = get_cpu(); |
445 | vt_list = &per_cpu(virt_cpu_timer, cpu); | 418 | vt_list = &per_cpu(virt_cpu_timer, cpu); |
446 | 419 | ||
420 | /* check if we run on the right CPU */ | ||
421 | BUG_ON(timer->cpu != cpu); | ||
422 | |||
447 | /* disable interrupts before test if timer is pending */ | 423 | /* disable interrupts before test if timer is pending */ |
448 | spin_lock_irqsave(&vt_list->lock, flags); | 424 | spin_lock_irqsave(&vt_list->lock, flags); |
449 | 425 | ||
@@ -458,14 +434,6 @@ int mod_virt_timer(struct vtimer_list *timer, __u64 expires) | |||
458 | return 0; | 434 | return 0; |
459 | } | 435 | } |
460 | 436 | ||
461 | /* check if we run on the right CPU */ | ||
462 | if (timer->cpu != cpu) { | ||
463 | printk("mod_virt_timer: running on wrong CPU, check your code\n"); | ||
464 | spin_unlock_irqrestore(&vt_list->lock, flags); | ||
465 | put_cpu(); | ||
466 | return -EINVAL; | ||
467 | } | ||
468 | |||
469 | list_del_init(&timer->entry); | 437 | list_del_init(&timer->entry); |
470 | timer->expires = expires; | 438 | timer->expires = expires; |
471 | 439 | ||