diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/exit.c | 4 | ||||
| -rw-r--r-- | kernel/hrtimer.c | 1 | ||||
| -rw-r--r-- | kernel/irq/Makefile | 3 | ||||
| -rw-r--r-- | kernel/irq/migration.c | 5 | ||||
| -rw-r--r-- | kernel/panic.c | 1 | ||||
| -rw-r--r-- | kernel/power/Kconfig | 2 | ||||
| -rw-r--r-- | kernel/printk.c | 6 | ||||
| -rw-r--r-- | kernel/ptrace.c | 3 | ||||
| -rw-r--r-- | kernel/sched.c | 62 | ||||
| -rw-r--r-- | kernel/signal.c | 7 | ||||
| -rw-r--r-- | kernel/sys_ni.c | 12 | ||||
| -rw-r--r-- | kernel/time.c | 8 | ||||
| -rw-r--r-- | kernel/timer.c | 34 |
13 files changed, 95 insertions, 53 deletions
diff --git a/kernel/exit.c b/kernel/exit.c index 6c2eeb8f6390..1a9787ac6173 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
| @@ -34,6 +34,7 @@ | |||
| 34 | #include <linux/mutex.h> | 34 | #include <linux/mutex.h> |
| 35 | #include <linux/futex.h> | 35 | #include <linux/futex.h> |
| 36 | #include <linux/compat.h> | 36 | #include <linux/compat.h> |
| 37 | #include <linux/pipe_fs_i.h> | ||
| 37 | 38 | ||
| 38 | #include <asm/uaccess.h> | 39 | #include <asm/uaccess.h> |
| 39 | #include <asm/unistd.h> | 40 | #include <asm/unistd.h> |
| @@ -941,6 +942,9 @@ fastcall NORET_TYPE void do_exit(long code) | |||
| 941 | if (tsk->io_context) | 942 | if (tsk->io_context) |
| 942 | exit_io_context(); | 943 | exit_io_context(); |
| 943 | 944 | ||
| 945 | if (tsk->splice_pipe) | ||
| 946 | __free_pipe_info(tsk->splice_pipe); | ||
| 947 | |||
| 944 | /* PF_DEAD causes final put_task_struct after we schedule. */ | 948 | /* PF_DEAD causes final put_task_struct after we schedule. */ |
| 945 | preempt_disable(); | 949 | preempt_disable(); |
| 946 | BUG_ON(tsk->flags & PF_DEAD); | 950 | BUG_ON(tsk->flags & PF_DEAD); |
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index f181ff4dd32e..d2a7296c8251 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c | |||
| @@ -501,6 +501,7 @@ int hrtimer_cancel(struct hrtimer *timer) | |||
| 501 | 501 | ||
| 502 | if (ret >= 0) | 502 | if (ret >= 0) |
| 503 | return ret; | 503 | return ret; |
| 504 | cpu_relax(); | ||
| 504 | } | 505 | } |
| 505 | } | 506 | } |
| 506 | 507 | ||
diff --git a/kernel/irq/Makefile b/kernel/irq/Makefile index 2b33f852be3e..9f77f50d8143 100644 --- a/kernel/irq/Makefile +++ b/kernel/irq/Makefile | |||
| @@ -1,4 +1,5 @@ | |||
| 1 | 1 | ||
| 2 | obj-y := handle.o manage.o spurious.o migration.o | 2 | obj-y := handle.o manage.o spurious.o |
| 3 | obj-$(CONFIG_GENERIC_IRQ_PROBE) += autoprobe.o | 3 | obj-$(CONFIG_GENERIC_IRQ_PROBE) += autoprobe.o |
| 4 | obj-$(CONFIG_PROC_FS) += proc.o | 4 | obj-$(CONFIG_PROC_FS) += proc.o |
| 5 | obj-$(CONFIG_GENERIC_PENDING_IRQ) += migration.o | ||
diff --git a/kernel/irq/migration.c b/kernel/irq/migration.c index 52a8655fa080..134f9f2e0e39 100644 --- a/kernel/irq/migration.c +++ b/kernel/irq/migration.c | |||
| @@ -1,6 +1,5 @@ | |||
| 1 | #include <linux/irq.h> | ||
| 2 | 1 | ||
| 3 | #if defined(CONFIG_GENERIC_PENDING_IRQ) | 2 | #include <linux/irq.h> |
| 4 | 3 | ||
| 5 | void set_pending_irq(unsigned int irq, cpumask_t mask) | 4 | void set_pending_irq(unsigned int irq, cpumask_t mask) |
| 6 | { | 5 | { |
| @@ -61,5 +60,3 @@ void move_native_irq(int irq) | |||
| 61 | } | 60 | } |
| 62 | cpus_clear(pending_irq_cpumask[irq]); | 61 | cpus_clear(pending_irq_cpumask[irq]); |
| 63 | } | 62 | } |
| 64 | |||
| 65 | #endif | ||
diff --git a/kernel/panic.c b/kernel/panic.c index f895c7c01d5b..cc2a4c9c36ac 100644 --- a/kernel/panic.c +++ b/kernel/panic.c | |||
| @@ -27,7 +27,6 @@ static int pause_on_oops_flag; | |||
| 27 | static DEFINE_SPINLOCK(pause_on_oops_lock); | 27 | static DEFINE_SPINLOCK(pause_on_oops_lock); |
| 28 | 28 | ||
| 29 | int panic_timeout; | 29 | int panic_timeout; |
| 30 | EXPORT_SYMBOL(panic_timeout); | ||
| 31 | 30 | ||
| 32 | ATOMIC_NOTIFIER_HEAD(panic_notifier_list); | 31 | ATOMIC_NOTIFIER_HEAD(panic_notifier_list); |
| 33 | 32 | ||
diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig index 9fd8d4f03595..ce0dfb8f4a4e 100644 --- a/kernel/power/Kconfig +++ b/kernel/power/Kconfig | |||
| @@ -41,7 +41,7 @@ config SOFTWARE_SUSPEND | |||
| 41 | depends on PM && SWAP && (X86 && (!SMP || SUSPEND_SMP)) || ((FRV || PPC32) && !SMP) | 41 | depends on PM && SWAP && (X86 && (!SMP || SUSPEND_SMP)) || ((FRV || PPC32) && !SMP) |
| 42 | ---help--- | 42 | ---help--- |
| 43 | Enable the possibility of suspending the machine. | 43 | Enable the possibility of suspending the machine. |
| 44 | It doesn't need APM. | 44 | It doesn't need ACPI or APM. |
| 45 | You may suspend your machine by 'swsusp' or 'shutdown -z <time>' | 45 | You may suspend your machine by 'swsusp' or 'shutdown -z <time>' |
| 46 | (patch for sysvinit needed). | 46 | (patch for sysvinit needed). |
| 47 | 47 | ||
diff --git a/kernel/printk.c b/kernel/printk.c index 8cc19431e74b..c056f3324432 100644 --- a/kernel/printk.c +++ b/kernel/printk.c | |||
| @@ -360,8 +360,7 @@ static void call_console_drivers(unsigned long start, unsigned long end) | |||
| 360 | unsigned long cur_index, start_print; | 360 | unsigned long cur_index, start_print; |
| 361 | static int msg_level = -1; | 361 | static int msg_level = -1; |
| 362 | 362 | ||
| 363 | if (((long)(start - end)) > 0) | 363 | BUG_ON(((long)(start - end)) > 0); |
| 364 | BUG(); | ||
| 365 | 364 | ||
| 366 | cur_index = start; | 365 | cur_index = start; |
| 367 | start_print = start; | 366 | start_print = start; |
| @@ -708,8 +707,7 @@ int __init add_preferred_console(char *name, int idx, char *options) | |||
| 708 | */ | 707 | */ |
| 709 | void acquire_console_sem(void) | 708 | void acquire_console_sem(void) |
| 710 | { | 709 | { |
| 711 | if (in_interrupt()) | 710 | BUG_ON(in_interrupt()); |
| 712 | BUG(); | ||
| 713 | down(&console_sem); | 711 | down(&console_sem); |
| 714 | console_locked = 1; | 712 | console_locked = 1; |
| 715 | console_may_schedule = 1; | 713 | console_may_schedule = 1; |
diff --git a/kernel/ptrace.c b/kernel/ptrace.c index 86a7f6c60cb2..0eeb7e66722c 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c | |||
| @@ -30,8 +30,7 @@ | |||
| 30 | */ | 30 | */ |
| 31 | void __ptrace_link(task_t *child, task_t *new_parent) | 31 | void __ptrace_link(task_t *child, task_t *new_parent) |
| 32 | { | 32 | { |
| 33 | if (!list_empty(&child->ptrace_list)) | 33 | BUG_ON(!list_empty(&child->ptrace_list)); |
| 34 | BUG(); | ||
| 35 | if (child->parent == new_parent) | 34 | if (child->parent == new_parent) |
| 36 | return; | 35 | return; |
| 37 | list_add(&child->ptrace_list, &child->parent->ptrace_children); | 36 | list_add(&child->ptrace_list, &child->parent->ptrace_children); |
diff --git a/kernel/sched.c b/kernel/sched.c index dd153d6f8a04..365f0b90b4de 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
| @@ -665,13 +665,55 @@ static int effective_prio(task_t *p) | |||
| 665 | } | 665 | } |
| 666 | 666 | ||
| 667 | /* | 667 | /* |
| 668 | * We place interactive tasks back into the active array, if possible. | ||
| 669 | * | ||
| 670 | * To guarantee that this does not starve expired tasks we ignore the | ||
| 671 | * interactivity of a task if the first expired task had to wait more | ||
| 672 | * than a 'reasonable' amount of time. This deadline timeout is | ||
| 673 | * load-dependent, as the frequency of array switched decreases with | ||
| 674 | * increasing number of running tasks. We also ignore the interactivity | ||
| 675 | * if a better static_prio task has expired, and switch periodically | ||
| 676 | * regardless, to ensure that highly interactive tasks do not starve | ||
| 677 | * the less fortunate for unreasonably long periods. | ||
| 678 | */ | ||
| 679 | static inline int expired_starving(runqueue_t *rq) | ||
| 680 | { | ||
| 681 | int limit; | ||
| 682 | |||
| 683 | /* | ||
| 684 | * Arrays were recently switched, all is well | ||
| 685 | */ | ||
| 686 | if (!rq->expired_timestamp) | ||
| 687 | return 0; | ||
| 688 | |||
| 689 | limit = STARVATION_LIMIT * rq->nr_running; | ||
| 690 | |||
| 691 | /* | ||
| 692 | * It's time to switch arrays | ||
| 693 | */ | ||
| 694 | if (jiffies - rq->expired_timestamp >= limit) | ||
| 695 | return 1; | ||
| 696 | |||
| 697 | /* | ||
| 698 | * There's a better selection in the expired array | ||
| 699 | */ | ||
| 700 | if (rq->curr->static_prio > rq->best_expired_prio) | ||
| 701 | return 1; | ||
| 702 | |||
| 703 | /* | ||
| 704 | * All is well | ||
| 705 | */ | ||
| 706 | return 0; | ||
| 707 | } | ||
| 708 | |||
| 709 | /* | ||
| 668 | * __activate_task - move a task to the runqueue. | 710 | * __activate_task - move a task to the runqueue. |
| 669 | */ | 711 | */ |
| 670 | static void __activate_task(task_t *p, runqueue_t *rq) | 712 | static void __activate_task(task_t *p, runqueue_t *rq) |
| 671 | { | 713 | { |
| 672 | prio_array_t *target = rq->active; | 714 | prio_array_t *target = rq->active; |
| 673 | 715 | ||
| 674 | if (batch_task(p)) | 716 | if (unlikely(batch_task(p) || (expired_starving(rq) && !rt_task(p)))) |
| 675 | target = rq->expired; | 717 | target = rq->expired; |
| 676 | enqueue_task(p, target); | 718 | enqueue_task(p, target); |
| 677 | rq->nr_running++; | 719 | rq->nr_running++; |
| @@ -2490,22 +2532,6 @@ unsigned long long current_sched_time(const task_t *tsk) | |||
| 2490 | } | 2532 | } |
| 2491 | 2533 | ||
| 2492 | /* | 2534 | /* |
| 2493 | * We place interactive tasks back into the active array, if possible. | ||
| 2494 | * | ||
| 2495 | * To guarantee that this does not starve expired tasks we ignore the | ||
| 2496 | * interactivity of a task if the first expired task had to wait more | ||
| 2497 | * than a 'reasonable' amount of time. This deadline timeout is | ||
| 2498 | * load-dependent, as the frequency of array switched decreases with | ||
| 2499 | * increasing number of running tasks. We also ignore the interactivity | ||
| 2500 | * if a better static_prio task has expired: | ||
| 2501 | */ | ||
| 2502 | #define EXPIRED_STARVING(rq) \ | ||
| 2503 | ((STARVATION_LIMIT && ((rq)->expired_timestamp && \ | ||
| 2504 | (jiffies - (rq)->expired_timestamp >= \ | ||
| 2505 | STARVATION_LIMIT * ((rq)->nr_running) + 1))) || \ | ||
| 2506 | ((rq)->curr->static_prio > (rq)->best_expired_prio)) | ||
| 2507 | |||
| 2508 | /* | ||
| 2509 | * Account user cpu time to a process. | 2535 | * Account user cpu time to a process. |
| 2510 | * @p: the process that the cpu time gets accounted to | 2536 | * @p: the process that the cpu time gets accounted to |
| 2511 | * @hardirq_offset: the offset to subtract from hardirq_count() | 2537 | * @hardirq_offset: the offset to subtract from hardirq_count() |
| @@ -2640,7 +2666,7 @@ void scheduler_tick(void) | |||
| 2640 | 2666 | ||
| 2641 | if (!rq->expired_timestamp) | 2667 | if (!rq->expired_timestamp) |
| 2642 | rq->expired_timestamp = jiffies; | 2668 | rq->expired_timestamp = jiffies; |
| 2643 | if (!TASK_INTERACTIVE(p) || EXPIRED_STARVING(rq)) { | 2669 | if (!TASK_INTERACTIVE(p) || expired_starving(rq)) { |
| 2644 | enqueue_task(p, rq->expired); | 2670 | enqueue_task(p, rq->expired); |
| 2645 | if (p->static_prio < rq->best_expired_prio) | 2671 | if (p->static_prio < rq->best_expired_prio) |
| 2646 | rq->best_expired_prio = p->static_prio; | 2672 | rq->best_expired_prio = p->static_prio; |
diff --git a/kernel/signal.c b/kernel/signal.c index 92025b108791..b14f895027c3 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
| @@ -769,8 +769,7 @@ specific_send_sig_info(int sig, struct siginfo *info, struct task_struct *t) | |||
| 769 | { | 769 | { |
| 770 | int ret = 0; | 770 | int ret = 0; |
| 771 | 771 | ||
| 772 | if (!irqs_disabled()) | 772 | BUG_ON(!irqs_disabled()); |
| 773 | BUG(); | ||
| 774 | assert_spin_locked(&t->sighand->siglock); | 773 | assert_spin_locked(&t->sighand->siglock); |
| 775 | 774 | ||
| 776 | /* Short-circuit ignored signals. */ | 775 | /* Short-circuit ignored signals. */ |
| @@ -869,7 +868,6 @@ __group_complete_signal(int sig, struct task_struct *p) | |||
| 869 | if (t == NULL) | 868 | if (t == NULL) |
| 870 | /* restart balancing at this thread */ | 869 | /* restart balancing at this thread */ |
| 871 | t = p->signal->curr_target = p; | 870 | t = p->signal->curr_target = p; |
| 872 | BUG_ON(t->tgid != p->tgid); | ||
| 873 | 871 | ||
| 874 | while (!wants_signal(sig, t)) { | 872 | while (!wants_signal(sig, t)) { |
| 875 | t = next_thread(t); | 873 | t = next_thread(t); |
| @@ -1384,8 +1382,7 @@ send_group_sigqueue(int sig, struct sigqueue *q, struct task_struct *p) | |||
| 1384 | * the overrun count. Other uses should not try to | 1382 | * the overrun count. Other uses should not try to |
| 1385 | * send the signal multiple times. | 1383 | * send the signal multiple times. |
| 1386 | */ | 1384 | */ |
| 1387 | if (q->info.si_code != SI_TIMER) | 1385 | BUG_ON(q->info.si_code != SI_TIMER); |
| 1388 | BUG(); | ||
| 1389 | q->info.si_overrun++; | 1386 | q->info.si_overrun++; |
| 1390 | goto out; | 1387 | goto out; |
| 1391 | } | 1388 | } |
diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c index d82864c4a617..5433195040f1 100644 --- a/kernel/sys_ni.c +++ b/kernel/sys_ni.c | |||
| @@ -120,3 +120,15 @@ cond_syscall(sys32_sysctl); | |||
| 120 | cond_syscall(ppc_rtas); | 120 | cond_syscall(ppc_rtas); |
| 121 | cond_syscall(sys_spu_run); | 121 | cond_syscall(sys_spu_run); |
| 122 | cond_syscall(sys_spu_create); | 122 | cond_syscall(sys_spu_create); |
| 123 | |||
| 124 | /* mmu depending weak syscall entries */ | ||
| 125 | cond_syscall(sys_mprotect); | ||
| 126 | cond_syscall(sys_msync); | ||
| 127 | cond_syscall(sys_mlock); | ||
| 128 | cond_syscall(sys_munlock); | ||
| 129 | cond_syscall(sys_mlockall); | ||
| 130 | cond_syscall(sys_munlockall); | ||
| 131 | cond_syscall(sys_mincore); | ||
| 132 | cond_syscall(sys_madvise); | ||
| 133 | cond_syscall(sys_mremap); | ||
| 134 | cond_syscall(sys_remap_file_pages); | ||
diff --git a/kernel/time.c b/kernel/time.c index ff8e7019c4c4..b00ddc71cedb 100644 --- a/kernel/time.c +++ b/kernel/time.c | |||
| @@ -410,7 +410,7 @@ EXPORT_SYMBOL(current_kernel_time); | |||
| 410 | * current_fs_time - Return FS time | 410 | * current_fs_time - Return FS time |
| 411 | * @sb: Superblock. | 411 | * @sb: Superblock. |
| 412 | * | 412 | * |
| 413 | * Return the current time truncated to the time granuality supported by | 413 | * Return the current time truncated to the time granularity supported by |
| 414 | * the fs. | 414 | * the fs. |
| 415 | */ | 415 | */ |
| 416 | struct timespec current_fs_time(struct super_block *sb) | 416 | struct timespec current_fs_time(struct super_block *sb) |
| @@ -421,11 +421,11 @@ struct timespec current_fs_time(struct super_block *sb) | |||
| 421 | EXPORT_SYMBOL(current_fs_time); | 421 | EXPORT_SYMBOL(current_fs_time); |
| 422 | 422 | ||
| 423 | /** | 423 | /** |
| 424 | * timespec_trunc - Truncate timespec to a granuality | 424 | * timespec_trunc - Truncate timespec to a granularity |
| 425 | * @t: Timespec | 425 | * @t: Timespec |
| 426 | * @gran: Granuality in ns. | 426 | * @gran: Granularity in ns. |
| 427 | * | 427 | * |
| 428 | * Truncate a timespec to a granuality. gran must be smaller than a second. | 428 | * Truncate a timespec to a granularity. gran must be smaller than a second. |
| 429 | * Always rounds down. | 429 | * Always rounds down. |
| 430 | * | 430 | * |
| 431 | * This function should be only used for timestamps returned by | 431 | * This function should be only used for timestamps returned by |
diff --git a/kernel/timer.c b/kernel/timer.c index 6b812c04737b..883773788836 100644 --- a/kernel/timer.c +++ b/kernel/timer.c | |||
| @@ -81,9 +81,10 @@ struct tvec_t_base_s { | |||
| 81 | } ____cacheline_aligned_in_smp; | 81 | } ____cacheline_aligned_in_smp; |
| 82 | 82 | ||
| 83 | typedef struct tvec_t_base_s tvec_base_t; | 83 | typedef struct tvec_t_base_s tvec_base_t; |
| 84 | static DEFINE_PER_CPU(tvec_base_t *, tvec_bases); | 84 | |
| 85 | tvec_base_t boot_tvec_bases; | 85 | tvec_base_t boot_tvec_bases; |
| 86 | EXPORT_SYMBOL(boot_tvec_bases); | 86 | EXPORT_SYMBOL(boot_tvec_bases); |
| 87 | static DEFINE_PER_CPU(tvec_base_t *, tvec_bases) = { &boot_tvec_bases }; | ||
| 87 | 88 | ||
| 88 | static inline void set_running_timer(tvec_base_t *base, | 89 | static inline void set_running_timer(tvec_base_t *base, |
| 89 | struct timer_list *timer) | 90 | struct timer_list *timer) |
| @@ -1224,28 +1225,36 @@ static int __devinit init_timers_cpu(int cpu) | |||
| 1224 | { | 1225 | { |
| 1225 | int j; | 1226 | int j; |
| 1226 | tvec_base_t *base; | 1227 | tvec_base_t *base; |
| 1228 | static char __devinitdata tvec_base_done[NR_CPUS]; | ||
| 1227 | 1229 | ||
| 1228 | base = per_cpu(tvec_bases, cpu); | 1230 | if (!tvec_base_done[cpu]) { |
| 1229 | if (!base) { | ||
| 1230 | static char boot_done; | 1231 | static char boot_done; |
| 1231 | 1232 | ||
| 1232 | /* | ||
| 1233 | * Cannot do allocation in init_timers as that runs before the | ||
| 1234 | * allocator initializes (and would waste memory if there are | ||
| 1235 | * more possible CPUs than will ever be installed/brought up). | ||
| 1236 | */ | ||
| 1237 | if (boot_done) { | 1233 | if (boot_done) { |
| 1234 | /* | ||
| 1235 | * The APs use this path later in boot | ||
| 1236 | */ | ||
| 1238 | base = kmalloc_node(sizeof(*base), GFP_KERNEL, | 1237 | base = kmalloc_node(sizeof(*base), GFP_KERNEL, |
| 1239 | cpu_to_node(cpu)); | 1238 | cpu_to_node(cpu)); |
| 1240 | if (!base) | 1239 | if (!base) |
| 1241 | return -ENOMEM; | 1240 | return -ENOMEM; |
| 1242 | memset(base, 0, sizeof(*base)); | 1241 | memset(base, 0, sizeof(*base)); |
| 1242 | per_cpu(tvec_bases, cpu) = base; | ||
| 1243 | } else { | 1243 | } else { |
| 1244 | base = &boot_tvec_bases; | 1244 | /* |
| 1245 | * This is for the boot CPU - we use compile-time | ||
| 1246 | * static initialisation because per-cpu memory isn't | ||
| 1247 | * ready yet and because the memory allocators are not | ||
| 1248 | * initialised either. | ||
| 1249 | */ | ||
| 1245 | boot_done = 1; | 1250 | boot_done = 1; |
| 1251 | base = &boot_tvec_bases; | ||
| 1246 | } | 1252 | } |
| 1247 | per_cpu(tvec_bases, cpu) = base; | 1253 | tvec_base_done[cpu] = 1; |
| 1254 | } else { | ||
| 1255 | base = per_cpu(tvec_bases, cpu); | ||
| 1248 | } | 1256 | } |
| 1257 | |||
| 1249 | spin_lock_init(&base->lock); | 1258 | spin_lock_init(&base->lock); |
| 1250 | for (j = 0; j < TVN_SIZE; j++) { | 1259 | for (j = 0; j < TVN_SIZE; j++) { |
| 1251 | INIT_LIST_HEAD(base->tv5.vec + j); | 1260 | INIT_LIST_HEAD(base->tv5.vec + j); |
| @@ -1455,7 +1464,7 @@ static void time_interpolator_update(long delta_nsec) | |||
| 1455 | */ | 1464 | */ |
| 1456 | if (jiffies % INTERPOLATOR_ADJUST == 0) | 1465 | if (jiffies % INTERPOLATOR_ADJUST == 0) |
| 1457 | { | 1466 | { |
| 1458 | if (time_interpolator->skips == 0 && time_interpolator->offset > TICK_NSEC) | 1467 | if (time_interpolator->skips == 0 && time_interpolator->offset > tick_nsec) |
| 1459 | time_interpolator->nsec_per_cyc--; | 1468 | time_interpolator->nsec_per_cyc--; |
| 1460 | if (time_interpolator->ns_skipped > INTERPOLATOR_MAX_SKIP && time_interpolator->offset == 0) | 1469 | if (time_interpolator->ns_skipped > INTERPOLATOR_MAX_SKIP && time_interpolator->offset == 0) |
| 1461 | time_interpolator->nsec_per_cyc++; | 1470 | time_interpolator->nsec_per_cyc++; |
| @@ -1479,8 +1488,7 @@ register_time_interpolator(struct time_interpolator *ti) | |||
| 1479 | unsigned long flags; | 1488 | unsigned long flags; |
| 1480 | 1489 | ||
| 1481 | /* Sanity check */ | 1490 | /* Sanity check */ |
| 1482 | if (ti->frequency == 0 || ti->mask == 0) | 1491 | BUG_ON(ti->frequency == 0 || ti->mask == 0); |
| 1483 | BUG(); | ||
| 1484 | 1492 | ||
| 1485 | ti->nsec_per_cyc = ((u64)NSEC_PER_SEC << ti->shift) / ti->frequency; | 1493 | ti->nsec_per_cyc = ((u64)NSEC_PER_SEC << ti->shift) / ti->frequency; |
| 1486 | spin_lock(&time_interpolator_lock); | 1494 | spin_lock(&time_interpolator_lock); |
