History

[PATCH] preempt_count is int - remove cast and don't assign to unsigned type

In kernel/sched.c the return value from preempt_count() is cast to an int. That made sense when preempt_count was defined as different types on is not needed and should go away. The patch removes the cast. In kernel/timer.c the return value from preempt_count() is assigned to a variable of type u32 and then that unsigned value is later compared to preempt_count(). Since preempt_count() returns an int, an int is what should be used to store its return value. Storing the result in an unsigned 32bit integer made a tiny bit of sense back when preempt_count was different types on different archs, but no more - let's not play signed vs unsigned comparison games when we don't have to. The patch modifies the code to use an int to hold the value. While I was around that bit of code I also made two changes to a nearby (related) printk() - I modified it to specify the loglevel explicitly and also broke the line into a few pieces to avoid it being longer than 80 chars and clarified the text a bit.

Jesper Juhl committed 21 years ago

Commit be5b4fb1 parent dcd497f2 files · +7 −3Browse files

Showing the changes to kernel/timer.c (1 of 2 files). Show all

Unified · Split

kernel/timer.c+6−2
@@ -489,10 +489,14 @@ static inline void __run_timers(tvec_base_t *base) · 488 unmodified lines
489 detach_timer(timer, 1);489 detach_timer(timer, 1);
490 spin_unlock_irq(&base->t_base.lock);490 spin_unlock_irq(&base->t_base.lock);
491 {491 {
492 u32 preempt_count = preempt_count();492 int preempt_count = preempt_count();
493 fn(data);493 fn(data);
494 if (preempt_count != preempt_count()) {494 if (preempt_count != preempt_count()) {
495 printk("huh, entered %p with %08x, exited with %08x?\n", fn, preempt_count, preempt_count());495 printk(KERN_WARNING "huh, entered %p "
496 "with preempt_count %08x, exited"
497 " with %08x?\n",
498 fn, preempt_count,
499 preempt_count());
496 BUG();500 BUG();
497 }501 }
498 }502 }