diff options
Diffstat (limited to 'kernel/time/clocksource.c')
| -rw-r--r-- | kernel/time/clocksource.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/kernel/time/clocksource.c b/kernel/time/clocksource.c index ecfd7b5187e0..592bf584d1d2 100644 --- a/kernel/time/clocksource.c +++ b/kernel/time/clocksource.c | |||
| @@ -402,9 +402,6 @@ int clocksource_register(struct clocksource *c) | |||
| 402 | unsigned long flags; | 402 | unsigned long flags; |
| 403 | int ret; | 403 | int ret; |
| 404 | 404 | ||
| 405 | /* save mult_orig on registration */ | ||
| 406 | c->mult_orig = c->mult; | ||
| 407 | |||
| 408 | spin_lock_irqsave(&clocksource_lock, flags); | 405 | spin_lock_irqsave(&clocksource_lock, flags); |
| 409 | ret = clocksource_enqueue(c); | 406 | ret = clocksource_enqueue(c); |
| 410 | if (!ret) | 407 | if (!ret) |
| @@ -512,6 +509,18 @@ static ssize_t sysfs_override_clocksource(struct sys_device *dev, | |||
| 512 | } | 509 | } |
| 513 | } | 510 | } |
| 514 | 511 | ||
| 512 | /* | ||
| 513 | * Check to make sure we don't switch to a non-highres capable | ||
| 514 | * clocksource if the tick code is in oneshot mode (highres or nohz) | ||
| 515 | */ | ||
| 516 | if (tick_oneshot_mode_active() && | ||
| 517 | !(ovr->flags & CLOCK_SOURCE_VALID_FOR_HRES)) { | ||
| 518 | printk(KERN_WARNING "%s clocksource is not HRT compatible. " | ||
| 519 | "Cannot switch while in HRT/NOHZ mode\n", ovr->name); | ||
| 520 | ovr = NULL; | ||
| 521 | override_name[0] = 0; | ||
| 522 | } | ||
| 523 | |||
| 515 | /* Reselect, when the override name has changed */ | 524 | /* Reselect, when the override name has changed */ |
| 516 | if (ovr != clocksource_override) { | 525 | if (ovr != clocksource_override) { |
| 517 | clocksource_override = ovr; | 526 | clocksource_override = ovr; |
| @@ -540,7 +549,13 @@ sysfs_show_available_clocksources(struct sys_device *dev, | |||
| 540 | 549 | ||
| 541 | spin_lock_irq(&clocksource_lock); | 550 | spin_lock_irq(&clocksource_lock); |
| 542 | list_for_each_entry(src, &clocksource_list, list) { | 551 | list_for_each_entry(src, &clocksource_list, list) { |
| 543 | count += snprintf(buf + count, | 552 | /* |
| 553 | * Don't show non-HRES clocksource if the tick code is | ||
| 554 | * in one shot mode (highres=on or nohz=on) | ||
| 555 | */ | ||
| 556 | if (!tick_oneshot_mode_active() || | ||
| 557 | (src->flags & CLOCK_SOURCE_VALID_FOR_HRES)) | ||
| 558 | count += snprintf(buf + count, | ||
| 544 | max((ssize_t)PAGE_SIZE - count, (ssize_t)0), | 559 | max((ssize_t)PAGE_SIZE - count, (ssize_t)0), |
| 545 | "%s ", src->name); | 560 | "%s ", src->name); |
| 546 | } | 561 | } |
