diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/irq/chip.c | 5 | ||||
| -rw-r--r-- | kernel/irq/resend.c | 7 | ||||
| -rw-r--r-- | kernel/kprobes.c | 5 | ||||
| -rw-r--r-- | kernel/power/snapshot.c | 3 | ||||
| -rw-r--r-- | kernel/profile.c | 4 | ||||
| -rw-r--r-- | kernel/sched.c | 63 | ||||
| -rw-r--r-- | kernel/sched_debug.c | 2 | ||||
| -rw-r--r-- | kernel/sched_fair.c | 19 | ||||
| -rw-r--r-- | kernel/sysctl.c | 2 | ||||
| -rw-r--r-- | kernel/time/clockevents.c | 10 |
10 files changed, 64 insertions, 56 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 615ce97c6cfd..f1a73f0b54e7 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c | |||
| @@ -352,13 +352,10 @@ handle_level_irq(unsigned int irq, struct irq_desc *desc) | |||
| 352 | * keep it masked and get out of here | 352 | * keep it masked and get out of here |
| 353 | */ | 353 | */ |
| 354 | action = desc->action; | 354 | action = desc->action; |
| 355 | if (unlikely(!action || (desc->status & IRQ_DISABLED))) { | 355 | if (unlikely(!action || (desc->status & IRQ_DISABLED))) |
| 356 | desc->status |= IRQ_PENDING; | ||
| 357 | goto out_unlock; | 356 | goto out_unlock; |
| 358 | } | ||
| 359 | 357 | ||
| 360 | desc->status |= IRQ_INPROGRESS; | 358 | desc->status |= IRQ_INPROGRESS; |
| 361 | desc->status &= ~IRQ_PENDING; | ||
| 362 | spin_unlock(&desc->lock); | 359 | spin_unlock(&desc->lock); |
| 363 | 360 | ||
| 364 | action_ret = handle_IRQ_event(irq, action); | 361 | action_ret = handle_IRQ_event(irq, action); |
diff --git a/kernel/irq/resend.c b/kernel/irq/resend.c index 5bfeaed7e487..a8046791ba2d 100644 --- a/kernel/irq/resend.c +++ b/kernel/irq/resend.c | |||
| @@ -62,7 +62,12 @@ void check_irq_resend(struct irq_desc *desc, unsigned int irq) | |||
| 62 | */ | 62 | */ |
| 63 | desc->chip->enable(irq); | 63 | desc->chip->enable(irq); |
| 64 | 64 | ||
| 65 | if ((status & (IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) { | 65 | /* |
| 66 | * We do not resend level type interrupts. Level type | ||
| 67 | * interrupts are resent by hardware when they are still | ||
| 68 | * active. | ||
| 69 | */ | ||
| 70 | if ((status & (IRQ_LEVEL | IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) { | ||
| 66 | desc->status = (status & ~IRQ_PENDING) | IRQ_REPLAY; | 71 | desc->status = (status & ~IRQ_PENDING) | IRQ_REPLAY; |
| 67 | 72 | ||
| 68 | if (!desc->chip || !desc->chip->retrigger || | 73 | if (!desc->chip || !desc->chip->retrigger || |
diff --git a/kernel/kprobes.c b/kernel/kprobes.c index 3e9f513a728d..4b8a4493c541 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c | |||
| @@ -1063,6 +1063,11 @@ EXPORT_SYMBOL_GPL(register_kprobe); | |||
| 1063 | EXPORT_SYMBOL_GPL(unregister_kprobe); | 1063 | EXPORT_SYMBOL_GPL(unregister_kprobe); |
| 1064 | EXPORT_SYMBOL_GPL(register_jprobe); | 1064 | EXPORT_SYMBOL_GPL(register_jprobe); |
| 1065 | EXPORT_SYMBOL_GPL(unregister_jprobe); | 1065 | EXPORT_SYMBOL_GPL(unregister_jprobe); |
| 1066 | #ifdef CONFIG_KPROBES | ||
| 1066 | EXPORT_SYMBOL_GPL(jprobe_return); | 1067 | EXPORT_SYMBOL_GPL(jprobe_return); |
| 1068 | #endif | ||
| 1069 | |||
| 1070 | #ifdef CONFIG_KPROBES | ||
| 1067 | EXPORT_SYMBOL_GPL(register_kretprobe); | 1071 | EXPORT_SYMBOL_GPL(register_kretprobe); |
| 1068 | EXPORT_SYMBOL_GPL(unregister_kretprobe); | 1072 | EXPORT_SYMBOL_GPL(unregister_kretprobe); |
| 1073 | #endif | ||
diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c index a3b7854b8f7c..a686590d88c1 100644 --- a/kernel/power/snapshot.c +++ b/kernel/power/snapshot.c | |||
| @@ -709,7 +709,8 @@ static void mark_nosave_pages(struct memory_bitmap *bm) | |||
| 709 | region->end_pfn << PAGE_SHIFT); | 709 | region->end_pfn << PAGE_SHIFT); |
| 710 | 710 | ||
| 711 | for (pfn = region->start_pfn; pfn < region->end_pfn; pfn++) | 711 | for (pfn = region->start_pfn; pfn < region->end_pfn; pfn++) |
| 712 | memory_bm_set_bit(bm, pfn); | 712 | if (pfn_valid(pfn)) |
| 713 | memory_bm_set_bit(bm, pfn); | ||
| 713 | } | 714 | } |
| 714 | } | 715 | } |
| 715 | 716 | ||
diff --git a/kernel/profile.c b/kernel/profile.c index 5b20fe977bed..cb1e37d2dac3 100644 --- a/kernel/profile.c +++ b/kernel/profile.c | |||
| @@ -199,11 +199,11 @@ EXPORT_SYMBOL_GPL(register_timer_hook); | |||
| 199 | EXPORT_SYMBOL_GPL(unregister_timer_hook); | 199 | EXPORT_SYMBOL_GPL(unregister_timer_hook); |
| 200 | EXPORT_SYMBOL_GPL(task_handoff_register); | 200 | EXPORT_SYMBOL_GPL(task_handoff_register); |
| 201 | EXPORT_SYMBOL_GPL(task_handoff_unregister); | 201 | EXPORT_SYMBOL_GPL(task_handoff_unregister); |
| 202 | EXPORT_SYMBOL_GPL(profile_event_register); | ||
| 203 | EXPORT_SYMBOL_GPL(profile_event_unregister); | ||
| 202 | 204 | ||
| 203 | #endif /* CONFIG_PROFILING */ | 205 | #endif /* CONFIG_PROFILING */ |
| 204 | 206 | ||
| 205 | EXPORT_SYMBOL_GPL(profile_event_register); | ||
| 206 | EXPORT_SYMBOL_GPL(profile_event_unregister); | ||
| 207 | 207 | ||
| 208 | #ifdef CONFIG_SMP | 208 | #ifdef CONFIG_SMP |
| 209 | /* | 209 | /* |
diff --git a/kernel/sched.c b/kernel/sched.c index b0afd8db1396..45e17b83b7f1 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
| @@ -263,6 +263,7 @@ struct rq { | |||
| 263 | 263 | ||
| 264 | unsigned int clock_warps, clock_overflows; | 264 | unsigned int clock_warps, clock_overflows; |
| 265 | unsigned int clock_unstable_events; | 265 | unsigned int clock_unstable_events; |
| 266 | u64 tick_timestamp; | ||
| 266 | 267 | ||
| 267 | atomic_t nr_iowait; | 268 | atomic_t nr_iowait; |
| 268 | 269 | ||
| @@ -341,8 +342,11 @@ static void __update_rq_clock(struct rq *rq) | |||
| 341 | /* | 342 | /* |
| 342 | * Catch too large forward jumps too: | 343 | * Catch too large forward jumps too: |
| 343 | */ | 344 | */ |
| 344 | if (unlikely(delta > 2*TICK_NSEC)) { | 345 | if (unlikely(clock + delta > rq->tick_timestamp + TICK_NSEC)) { |
| 345 | clock++; | 346 | if (clock < rq->tick_timestamp + TICK_NSEC) |
| 347 | clock = rq->tick_timestamp + TICK_NSEC; | ||
| 348 | else | ||
| 349 | clock++; | ||
| 346 | rq->clock_overflows++; | 350 | rq->clock_overflows++; |
| 347 | } else { | 351 | } else { |
| 348 | if (unlikely(delta > rq->clock_max_delta)) | 352 | if (unlikely(delta > rq->clock_max_delta)) |
| @@ -3102,7 +3106,7 @@ static void run_rebalance_domains(struct softirq_action *h) | |||
| 3102 | if (need_resched()) | 3106 | if (need_resched()) |
| 3103 | break; | 3107 | break; |
| 3104 | 3108 | ||
| 3105 | rebalance_domains(balance_cpu, SCHED_IDLE); | 3109 | rebalance_domains(balance_cpu, CPU_IDLE); |
| 3106 | 3110 | ||
| 3107 | rq = cpu_rq(balance_cpu); | 3111 | rq = cpu_rq(balance_cpu); |
| 3108 | if (time_after(this_rq->next_balance, rq->next_balance)) | 3112 | if (time_after(this_rq->next_balance, rq->next_balance)) |
| @@ -3308,9 +3312,16 @@ void scheduler_tick(void) | |||
| 3308 | int cpu = smp_processor_id(); | 3312 | int cpu = smp_processor_id(); |
| 3309 | struct rq *rq = cpu_rq(cpu); | 3313 | struct rq *rq = cpu_rq(cpu); |
| 3310 | struct task_struct *curr = rq->curr; | 3314 | struct task_struct *curr = rq->curr; |
| 3315 | u64 next_tick = rq->tick_timestamp + TICK_NSEC; | ||
| 3311 | 3316 | ||
| 3312 | spin_lock(&rq->lock); | 3317 | spin_lock(&rq->lock); |
| 3313 | __update_rq_clock(rq); | 3318 | __update_rq_clock(rq); |
| 3319 | /* | ||
| 3320 | * Let rq->clock advance by at least TICK_NSEC: | ||
| 3321 | */ | ||
| 3322 | if (unlikely(rq->clock < next_tick)) | ||
| 3323 | rq->clock = next_tick; | ||
| 3324 | rq->tick_timestamp = rq->clock; | ||
| 3314 | update_cpu_load(rq); | 3325 | update_cpu_load(rq); |
| 3315 | if (curr != rq->idle) /* FIXME: needed? */ | 3326 | if (curr != rq->idle) /* FIXME: needed? */ |
| 3316 | curr->sched_class->task_tick(rq, curr); | 3327 | curr->sched_class->task_tick(rq, curr); |
| @@ -6317,7 +6328,7 @@ int partition_sched_domains(cpumask_t *partition1, cpumask_t *partition2) | |||
| 6317 | } | 6328 | } |
| 6318 | 6329 | ||
| 6319 | #if defined(CONFIG_SCHED_MC) || defined(CONFIG_SCHED_SMT) | 6330 | #if defined(CONFIG_SCHED_MC) || defined(CONFIG_SCHED_SMT) |
| 6320 | int arch_reinit_sched_domains(void) | 6331 | static int arch_reinit_sched_domains(void) |
| 6321 | { | 6332 | { |
| 6322 | int err; | 6333 | int err; |
| 6323 | 6334 | ||
| @@ -6346,24 +6357,6 @@ static ssize_t sched_power_savings_store(const char *buf, size_t count, int smt) | |||
| 6346 | return ret ? ret : count; | 6357 | return ret ? ret : count; |
| 6347 | } | 6358 | } |
| 6348 | 6359 | ||
| 6349 | int sched_create_sysfs_power_savings_entries(struct sysdev_class *cls) | ||
| 6350 | { | ||
| 6351 | int err = 0; | ||
| 6352 | |||
| 6353 | #ifdef CONFIG_SCHED_SMT | ||
| 6354 | if (smt_capable()) | ||
| 6355 | err = sysfs_create_file(&cls->kset.kobj, | ||
| 6356 | &attr_sched_smt_power_savings.attr); | ||
| 6357 | #endif | ||
| 6358 | #ifdef CONFIG_SCHED_MC | ||
| 6359 | if (!err && mc_capable()) | ||
| 6360 | err = sysfs_create_file(&cls->kset.kobj, | ||
| 6361 | &attr_sched_mc_power_savings.attr); | ||
| 6362 | #endif | ||
| 6363 | return err; | ||
| 6364 | } | ||
| 6365 | #endif | ||
| 6366 | |||
| 6367 | #ifdef CONFIG_SCHED_MC | 6360 | #ifdef CONFIG_SCHED_MC |
| 6368 | static ssize_t sched_mc_power_savings_show(struct sys_device *dev, char *page) | 6361 | static ssize_t sched_mc_power_savings_show(struct sys_device *dev, char *page) |
| 6369 | { | 6362 | { |
| @@ -6374,8 +6367,8 @@ static ssize_t sched_mc_power_savings_store(struct sys_device *dev, | |||
| 6374 | { | 6367 | { |
| 6375 | return sched_power_savings_store(buf, count, 0); | 6368 | return sched_power_savings_store(buf, count, 0); |
| 6376 | } | 6369 | } |
| 6377 | SYSDEV_ATTR(sched_mc_power_savings, 0644, sched_mc_power_savings_show, | 6370 | static SYSDEV_ATTR(sched_mc_power_savings, 0644, sched_mc_power_savings_show, |
| 6378 | sched_mc_power_savings_store); | 6371 | sched_mc_power_savings_store); |
| 6379 | #endif | 6372 | #endif |
| 6380 | 6373 | ||
| 6381 | #ifdef CONFIG_SCHED_SMT | 6374 | #ifdef CONFIG_SCHED_SMT |
| @@ -6388,8 +6381,26 @@ static ssize_t sched_smt_power_savings_store(struct sys_device *dev, | |||
| 6388 | { | 6381 | { |
| 6389 | return sched_power_savings_store(buf, count, 1); | 6382 | return sched_power_savings_store(buf, count, 1); |
| 6390 | } | 6383 | } |
| 6391 | SYSDEV_ATTR(sched_smt_power_savings, 0644, sched_smt_power_savings_show, | 6384 | static SYSDEV_ATTR(sched_smt_power_savings, 0644, sched_smt_power_savings_show, |
| 6392 | sched_smt_power_savings_store); | 6385 | sched_smt_power_savings_store); |
| 6386 | #endif | ||
| 6387 | |||
| 6388 | int sched_create_sysfs_power_savings_entries(struct sysdev_class *cls) | ||
| 6389 | { | ||
| 6390 | int err = 0; | ||
| 6391 | |||
| 6392 | #ifdef CONFIG_SCHED_SMT | ||
| 6393 | if (smt_capable()) | ||
| 6394 | err = sysfs_create_file(&cls->kset.kobj, | ||
| 6395 | &attr_sched_smt_power_savings.attr); | ||
| 6396 | #endif | ||
| 6397 | #ifdef CONFIG_SCHED_MC | ||
| 6398 | if (!err && mc_capable()) | ||
| 6399 | err = sysfs_create_file(&cls->kset.kobj, | ||
| 6400 | &attr_sched_mc_power_savings.attr); | ||
| 6401 | #endif | ||
| 6402 | return err; | ||
| 6403 | } | ||
| 6393 | #endif | 6404 | #endif |
| 6394 | 6405 | ||
| 6395 | /* | 6406 | /* |
diff --git a/kernel/sched_debug.c b/kernel/sched_debug.c index 3da32156394e..87e524762b85 100644 --- a/kernel/sched_debug.c +++ b/kernel/sched_debug.c | |||
| @@ -108,7 +108,7 @@ print_cfs_rq_runtime_sum(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq) | |||
| 108 | 108 | ||
| 109 | void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq) | 109 | void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq) |
| 110 | { | 110 | { |
| 111 | SEQ_printf(m, "\ncfs_rq %p\n", cfs_rq); | 111 | SEQ_printf(m, "\ncfs_rq\n"); |
| 112 | 112 | ||
| 113 | #define P(x) \ | 113 | #define P(x) \ |
| 114 | SEQ_printf(m, " .%-30s: %Ld\n", #x, (long long)(cfs_rq->x)) | 114 | SEQ_printf(m, " .%-30s: %Ld\n", #x, (long long)(cfs_rq->x)) |
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index e91db32cadfd..fedbb51bba96 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c | |||
| @@ -75,7 +75,7 @@ enum { | |||
| 75 | 75 | ||
| 76 | unsigned int sysctl_sched_features __read_mostly = | 76 | unsigned int sysctl_sched_features __read_mostly = |
| 77 | SCHED_FEAT_FAIR_SLEEPERS *1 | | 77 | SCHED_FEAT_FAIR_SLEEPERS *1 | |
| 78 | SCHED_FEAT_SLEEPER_AVG *1 | | 78 | SCHED_FEAT_SLEEPER_AVG *0 | |
| 79 | SCHED_FEAT_SLEEPER_LOAD_AVG *1 | | 79 | SCHED_FEAT_SLEEPER_LOAD_AVG *1 | |
| 80 | SCHED_FEAT_PRECISE_CPU_LOAD *1 | | 80 | SCHED_FEAT_PRECISE_CPU_LOAD *1 | |
| 81 | SCHED_FEAT_START_DEBIT *1 | | 81 | SCHED_FEAT_START_DEBIT *1 | |
| @@ -304,11 +304,9 @@ __update_curr(struct cfs_rq *cfs_rq, struct sched_entity *curr) | |||
| 304 | delta_mine = calc_delta_mine(delta_exec, curr->load.weight, lw); | 304 | delta_mine = calc_delta_mine(delta_exec, curr->load.weight, lw); |
| 305 | 305 | ||
| 306 | if (cfs_rq->sleeper_bonus > sysctl_sched_granularity) { | 306 | if (cfs_rq->sleeper_bonus > sysctl_sched_granularity) { |
| 307 | delta = calc_delta_mine(cfs_rq->sleeper_bonus, | 307 | delta = min(cfs_rq->sleeper_bonus, (u64)delta_exec); |
| 308 | curr->load.weight, lw); | 308 | delta = calc_delta_mine(delta, curr->load.weight, lw); |
| 309 | if (unlikely(delta > cfs_rq->sleeper_bonus)) | 309 | delta = min((u64)delta, cfs_rq->sleeper_bonus); |
| 310 | delta = cfs_rq->sleeper_bonus; | ||
| 311 | |||
| 312 | cfs_rq->sleeper_bonus -= delta; | 310 | cfs_rq->sleeper_bonus -= delta; |
| 313 | delta_mine -= delta; | 311 | delta_mine -= delta; |
| 314 | } | 312 | } |
| @@ -521,6 +519,8 @@ static void __enqueue_sleeper(struct cfs_rq *cfs_rq, struct sched_entity *se) | |||
| 521 | * Track the amount of bonus we've given to sleepers: | 519 | * Track the amount of bonus we've given to sleepers: |
| 522 | */ | 520 | */ |
| 523 | cfs_rq->sleeper_bonus += delta_fair; | 521 | cfs_rq->sleeper_bonus += delta_fair; |
| 522 | if (unlikely(cfs_rq->sleeper_bonus > sysctl_sched_runtime_limit)) | ||
| 523 | cfs_rq->sleeper_bonus = sysctl_sched_runtime_limit; | ||
| 524 | 524 | ||
| 525 | schedstat_add(cfs_rq, wait_runtime, se->wait_runtime); | 525 | schedstat_add(cfs_rq, wait_runtime, se->wait_runtime); |
| 526 | } | 526 | } |
| @@ -959,13 +959,12 @@ load_balance_fair(struct rq *this_rq, int this_cpu, struct rq *busiest, | |||
| 959 | for_each_leaf_cfs_rq(busiest, busy_cfs_rq) { | 959 | for_each_leaf_cfs_rq(busiest, busy_cfs_rq) { |
| 960 | #ifdef CONFIG_FAIR_GROUP_SCHED | 960 | #ifdef CONFIG_FAIR_GROUP_SCHED |
| 961 | struct cfs_rq *this_cfs_rq; | 961 | struct cfs_rq *this_cfs_rq; |
| 962 | long imbalances; | 962 | long imbalance; |
| 963 | unsigned long maxload; | 963 | unsigned long maxload; |
| 964 | 964 | ||
| 965 | this_cfs_rq = cpu_cfs_rq(busy_cfs_rq, this_cpu); | 965 | this_cfs_rq = cpu_cfs_rq(busy_cfs_rq, this_cpu); |
| 966 | 966 | ||
| 967 | imbalance = busy_cfs_rq->load.weight - | 967 | imbalance = busy_cfs_rq->load.weight - this_cfs_rq->load.weight; |
| 968 | this_cfs_rq->load.weight; | ||
| 969 | /* Don't pull if this_cfs_rq has more load than busy_cfs_rq */ | 968 | /* Don't pull if this_cfs_rq has more load than busy_cfs_rq */ |
| 970 | if (imbalance <= 0) | 969 | if (imbalance <= 0) |
| 971 | continue; | 970 | continue; |
| @@ -976,7 +975,7 @@ load_balance_fair(struct rq *this_rq, int this_cpu, struct rq *busiest, | |||
| 976 | 975 | ||
| 977 | *this_best_prio = cfs_rq_best_prio(this_cfs_rq); | 976 | *this_best_prio = cfs_rq_best_prio(this_cfs_rq); |
| 978 | #else | 977 | #else |
| 979 | #define maxload rem_load_move | 978 | # define maxload rem_load_move |
| 980 | #endif | 979 | #endif |
| 981 | /* pass busy_cfs_rq argument into | 980 | /* pass busy_cfs_rq argument into |
| 982 | * load_balance_[start|next]_fair iterators | 981 | * load_balance_[start|next]_fair iterators |
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 79c891e6266c..8bdb8c07e04f 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
| @@ -1023,6 +1023,7 @@ static ctl_table vm_table[] = { | |||
| 1023 | .mode = 0644, | 1023 | .mode = 0644, |
| 1024 | .proc_handler = &proc_doulongvec_minmax, | 1024 | .proc_handler = &proc_doulongvec_minmax, |
| 1025 | }, | 1025 | }, |
| 1026 | #endif | ||
| 1026 | #ifdef CONFIG_NUMA | 1027 | #ifdef CONFIG_NUMA |
| 1027 | { | 1028 | { |
| 1028 | .ctl_name = CTL_UNNUMBERED, | 1029 | .ctl_name = CTL_UNNUMBERED, |
| @@ -1034,7 +1035,6 @@ static ctl_table vm_table[] = { | |||
| 1034 | .strategy = &sysctl_string, | 1035 | .strategy = &sysctl_string, |
| 1035 | }, | 1036 | }, |
| 1036 | #endif | 1037 | #endif |
| 1037 | #endif | ||
| 1038 | #if defined(CONFIG_X86_32) || \ | 1038 | #if defined(CONFIG_X86_32) || \ |
| 1039 | (defined(CONFIG_SUPERH) && defined(CONFIG_VSYSCALL)) | 1039 | (defined(CONFIG_SUPERH) && defined(CONFIG_VSYSCALL)) |
| 1040 | { | 1040 | { |
diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c index 2ad1c37b8dfe..41dd3105ce7f 100644 --- a/kernel/time/clockevents.c +++ b/kernel/time/clockevents.c | |||
| @@ -113,16 +113,6 @@ int clockevents_register_notifier(struct notifier_block *nb) | |||
| 113 | return ret; | 113 | return ret; |
| 114 | } | 114 | } |
| 115 | 115 | ||
| 116 | /** | ||
| 117 | * clockevents_unregister_notifier - unregister a clock events change listener | ||
| 118 | */ | ||
| 119 | void clockevents_unregister_notifier(struct notifier_block *nb) | ||
| 120 | { | ||
| 121 | spin_lock(&clockevents_lock); | ||
| 122 | raw_notifier_chain_unregister(&clockevents_chain, nb); | ||
| 123 | spin_unlock(&clockevents_lock); | ||
| 124 | } | ||
| 125 | |||
| 126 | /* | 116 | /* |
| 127 | * Notify about a clock event change. Called with clockevents_lock | 117 | * Notify about a clock event change. Called with clockevents_lock |
| 128 | * held. | 118 | * held. |
