LCOV - code coverage report
Current view: top level - kernel/time - clocksource.c (source / functions) Hit Total Coverage
Test: landlock.info Lines: 227 449 50.6 %
Date: 2021-04-22 12:43:58 Functions: 20 41 48.8 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0+
       2             : /*
       3             :  * This file contains the functions which manage clocksource drivers.
       4             :  *
       5             :  * Copyright (C) 2004, 2005 IBM, John Stultz (johnstul@us.ibm.com)
       6             :  */
       7             : 
       8             : #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
       9             : 
      10             : #include <linux/device.h>
      11             : #include <linux/clocksource.h>
      12             : #include <linux/init.h>
      13             : #include <linux/module.h>
      14             : #include <linux/sched.h> /* for spin_unlock_irq() using preempt_count() m68k */
      15             : #include <linux/tick.h>
      16             : #include <linux/kthread.h>
      17             : 
      18             : #include "tick-internal.h"
      19             : #include "timekeeping_internal.h"
      20             : 
      21             : /**
      22             :  * clocks_calc_mult_shift - calculate mult/shift factors for scaled math of clocks
      23             :  * @mult:       pointer to mult variable
      24             :  * @shift:      pointer to shift variable
      25             :  * @from:       frequency to convert from
      26             :  * @to:         frequency to convert to
      27             :  * @maxsec:     guaranteed runtime conversion range in seconds
      28             :  *
      29             :  * The function evaluates the shift/mult pair for the scaled math
      30             :  * operations of clocksources and clockevents.
      31             :  *
      32             :  * @to and @from are frequency values in HZ. For clock sources @to is
      33             :  * NSEC_PER_SEC == 1GHz and @from is the counter frequency. For clock
      34             :  * event @to is the counter frequency and @from is NSEC_PER_SEC.
      35             :  *
      36             :  * The @maxsec conversion range argument controls the time frame in
      37             :  * seconds which must be covered by the runtime conversion with the
      38             :  * calculated mult and shift factors. This guarantees that no 64bit
      39             :  * overflow happens when the input value of the conversion is
      40             :  * multiplied with the calculated mult factor. Larger ranges may
      41             :  * reduce the conversion accuracy by chosing smaller mult and shift
      42             :  * factors.
      43             :  */
      44             : void
      45           8 : clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 maxsec)
      46             : {
      47           8 :         u64 tmp;
      48           8 :         u32 sft, sftacc= 32;
      49             : 
      50             :         /*
      51             :          * Calculate the shift factor which is limiting the conversion
      52             :          * range:
      53             :          */
      54           8 :         tmp = ((u64)maxsec * from) >> 32;
      55          66 :         while (tmp) {
      56          58 :                 tmp >>=1;
      57          58 :                 sftacc--;
      58             :         }
      59             : 
      60             :         /*
      61             :          * Find the conversion shift/mult pair which has the best
      62             :          * accuracy and fits the maxsec conversion range:
      63             :          */
      64          61 :         for (sft = 32; sft > 0; sft--) {
      65          61 :                 tmp = (u64) to << sft;
      66          61 :                 tmp += from / 2;
      67          61 :                 do_div(tmp, from);
      68          61 :                 if ((tmp >> sftacc) == 0)
      69             :                         break;
      70             :         }
      71           8 :         *mult = tmp;
      72           8 :         *shift = sft;
      73           8 : }
      74             : EXPORT_SYMBOL_GPL(clocks_calc_mult_shift);
      75             : 
      76             : /*[Clocksource internal variables]---------
      77             :  * curr_clocksource:
      78             :  *      currently selected clocksource.
      79             :  * suspend_clocksource:
      80             :  *      used to calculate the suspend time.
      81             :  * clocksource_list:
      82             :  *      linked list with the registered clocksources
      83             :  * clocksource_mutex:
      84             :  *      protects manipulations to curr_clocksource and the clocksource_list
      85             :  * override_name:
      86             :  *      Name of the user-specified clocksource.
      87             :  */
      88             : static struct clocksource *curr_clocksource;
      89             : static struct clocksource *suspend_clocksource;
      90             : static LIST_HEAD(clocksource_list);
      91             : static DEFINE_MUTEX(clocksource_mutex);
      92             : static char override_name[CS_NAME_LEN];
      93             : static int finished_booting;
      94             : static u64 suspend_start;
      95             : 
      96             : #ifdef CONFIG_CLOCKSOURCE_WATCHDOG
      97             : static void clocksource_watchdog_work(struct work_struct *work);
      98             : static void clocksource_select(void);
      99             : 
     100             : static LIST_HEAD(watchdog_list);
     101             : static struct clocksource *watchdog;
     102             : static struct timer_list watchdog_timer;
     103             : static DECLARE_WORK(watchdog_work, clocksource_watchdog_work);
     104             : static DEFINE_SPINLOCK(watchdog_lock);
     105             : static int watchdog_running;
     106             : static atomic_t watchdog_reset_pending;
     107             : 
     108           6 : static inline void clocksource_watchdog_lock(unsigned long *flags)
     109             : {
     110          12 :         spin_lock_irqsave(&watchdog_lock, *flags);
     111             : }
     112             : 
     113           6 : static inline void clocksource_watchdog_unlock(unsigned long *flags)
     114             : {
     115          11 :         spin_unlock_irqrestore(&watchdog_lock, *flags);
     116             : }
     117             : 
     118             : static int clocksource_watchdog_kthread(void *data);
     119             : static void __clocksource_change_rating(struct clocksource *cs, int rating);
     120             : 
     121             : /*
     122             :  * Interval: 0.5sec Threshold: 0.0625s
     123             :  */
     124             : #define WATCHDOG_INTERVAL (HZ >> 1)
     125             : #define WATCHDOG_THRESHOLD (NSEC_PER_SEC >> 4)
     126             : 
     127           0 : static void clocksource_watchdog_work(struct work_struct *work)
     128             : {
     129             :         /*
     130             :          * We cannot directly run clocksource_watchdog_kthread() here, because
     131             :          * clocksource_select() calls timekeeping_notify() which uses
     132             :          * stop_machine(). One cannot use stop_machine() from a workqueue() due
     133             :          * lock inversions wrt CPU hotplug.
     134             :          *
     135             :          * Also, we only ever run this work once or twice during the lifetime
     136             :          * of the kernel, so there is no point in creating a more permanent
     137             :          * kthread for this.
     138             :          *
     139             :          * If kthread_run fails the next watchdog scan over the
     140             :          * watchdog_list will find the unstable clock again.
     141             :          */
     142           0 :         kthread_run(clocksource_watchdog_kthread, NULL, "kwatchdog");
     143           0 : }
     144             : 
     145           0 : static void __clocksource_unstable(struct clocksource *cs)
     146             : {
     147           0 :         cs->flags &= ~(CLOCK_SOURCE_VALID_FOR_HRES | CLOCK_SOURCE_WATCHDOG);
     148           0 :         cs->flags |= CLOCK_SOURCE_UNSTABLE;
     149             : 
     150             :         /*
     151             :          * If the clocksource is registered clocksource_watchdog_kthread() will
     152             :          * re-rate and re-select.
     153             :          */
     154           0 :         if (list_empty(&cs->list)) {
     155           0 :                 cs->rating = 0;
     156           0 :                 return;
     157             :         }
     158             : 
     159           0 :         if (cs->mark_unstable)
     160           0 :                 cs->mark_unstable(cs);
     161             : 
     162             :         /* kick clocksource_watchdog_kthread() */
     163           0 :         if (finished_booting)
     164           0 :                 schedule_work(&watchdog_work);
     165             : }
     166             : 
     167             : /**
     168             :  * clocksource_mark_unstable - mark clocksource unstable via watchdog
     169             :  * @cs:         clocksource to be marked unstable
     170             :  *
     171             :  * This function is called by the x86 TSC code to mark clocksources as unstable;
     172             :  * it defers demotion and re-selection to a kthread.
     173             :  */
     174           0 : void clocksource_mark_unstable(struct clocksource *cs)
     175             : {
     176           0 :         unsigned long flags;
     177             : 
     178           0 :         spin_lock_irqsave(&watchdog_lock, flags);
     179           0 :         if (!(cs->flags & CLOCK_SOURCE_UNSTABLE)) {
     180           0 :                 if (!list_empty(&cs->list) && list_empty(&cs->wd_list))
     181           0 :                         list_add(&cs->wd_list, &watchdog_list);
     182           0 :                 __clocksource_unstable(cs);
     183             :         }
     184           0 :         spin_unlock_irqrestore(&watchdog_lock, flags);
     185           0 : }
     186             : 
     187          69 : static void clocksource_watchdog(struct timer_list *unused)
     188             : {
     189          69 :         struct clocksource *cs;
     190          69 :         u64 csnow, wdnow, cslast, wdlast, delta;
     191          69 :         int64_t wd_nsec, cs_nsec;
     192          69 :         int next_cpu, reset_pending;
     193             : 
     194          69 :         spin_lock(&watchdog_lock);
     195          69 :         if (!watchdog_running)
     196           0 :                 goto out;
     197             : 
     198          69 :         reset_pending = atomic_read(&watchdog_reset_pending);
     199             : 
     200         138 :         list_for_each_entry(cs, &watchdog_list, wd_list) {
     201             : 
     202             :                 /* Clocksource already marked unstable? */
     203          69 :                 if (cs->flags & CLOCK_SOURCE_UNSTABLE) {
     204           0 :                         if (finished_booting)
     205           0 :                                 schedule_work(&watchdog_work);
     206           0 :                         continue;
     207             :                 }
     208             : 
     209          69 :                 local_irq_disable();
     210          69 :                 csnow = cs->read(cs);
     211          69 :                 wdnow = watchdog->read(watchdog);
     212          69 :                 local_irq_enable();
     213             : 
     214             :                 /* Clocksource initialized ? */
     215          69 :                 if (!(cs->flags & CLOCK_SOURCE_WATCHDOG) ||
     216          68 :                     atomic_read(&watchdog_reset_pending)) {
     217           1 :                         cs->flags |= CLOCK_SOURCE_WATCHDOG;
     218           1 :                         cs->wd_last = wdnow;
     219           1 :                         cs->cs_last = csnow;
     220           1 :                         continue;
     221             :                 }
     222             : 
     223          68 :                 delta = clocksource_delta(wdnow, cs->wd_last, watchdog->mask);
     224          68 :                 wd_nsec = clocksource_cyc2ns(delta, watchdog->mult,
     225             :                                              watchdog->shift);
     226             : 
     227          68 :                 delta = clocksource_delta(csnow, cs->cs_last, cs->mask);
     228          68 :                 cs_nsec = clocksource_cyc2ns(delta, cs->mult, cs->shift);
     229          68 :                 wdlast = cs->wd_last; /* save these in case we print them */
     230          68 :                 cslast = cs->cs_last;
     231          68 :                 cs->cs_last = csnow;
     232          68 :                 cs->wd_last = wdnow;
     233             : 
     234          68 :                 if (atomic_read(&watchdog_reset_pending))
     235           0 :                         continue;
     236             : 
     237             :                 /* Check the deviation from the watchdog clocksource. */
     238          68 :                 if (abs(cs_nsec - wd_nsec) > WATCHDOG_THRESHOLD) {
     239           0 :                         pr_warn("timekeeping watchdog on CPU%d: Marking clocksource '%s' as unstable because the skew is too large:\n",
     240             :                                 smp_processor_id(), cs->name);
     241           0 :                         pr_warn("                      '%s' wd_now: %llx wd_last: %llx mask: %llx\n",
     242             :                                 watchdog->name, wdnow, wdlast, watchdog->mask);
     243           0 :                         pr_warn("                      '%s' cs_now: %llx cs_last: %llx mask: %llx\n",
     244             :                                 cs->name, csnow, cslast, cs->mask);
     245           0 :                         __clocksource_unstable(cs);
     246           0 :                         continue;
     247             :                 }
     248             : 
     249          68 :                 if (cs == curr_clocksource && cs->tick_stable)
     250           0 :                         cs->tick_stable(cs);
     251             : 
     252          68 :                 if (!(cs->flags & CLOCK_SOURCE_VALID_FOR_HRES) &&
     253           0 :                     (cs->flags & CLOCK_SOURCE_IS_CONTINUOUS) &&
     254           0 :                     (watchdog->flags & CLOCK_SOURCE_IS_CONTINUOUS)) {
     255             :                         /* Mark it valid for high-res. */
     256           0 :                         cs->flags |= CLOCK_SOURCE_VALID_FOR_HRES;
     257             : 
     258             :                         /*
     259             :                          * clocksource_done_booting() will sort it if
     260             :                          * finished_booting is not set yet.
     261             :                          */
     262           0 :                         if (!finished_booting)
     263           0 :                                 continue;
     264             : 
     265             :                         /*
     266             :                          * If this is not the current clocksource let
     267             :                          * the watchdog thread reselect it. Due to the
     268             :                          * change to high res this clocksource might
     269             :                          * be preferred now. If it is the current
     270             :                          * clocksource let the tick code know about
     271             :                          * that change.
     272             :                          */
     273           0 :                         if (cs != curr_clocksource) {
     274           0 :                                 cs->flags |= CLOCK_SOURCE_RESELECT;
     275           0 :                                 schedule_work(&watchdog_work);
     276             :                         } else {
     277           0 :                                 tick_clock_notify();
     278             :                         }
     279             :                 }
     280             :         }
     281             : 
     282             :         /*
     283             :          * We only clear the watchdog_reset_pending, when we did a
     284             :          * full cycle through all clocksources.
     285             :          */
     286          69 :         if (reset_pending)
     287           0 :                 atomic_dec(&watchdog_reset_pending);
     288             : 
     289             :         /*
     290             :          * Cycle through CPUs to check if the CPUs stay synchronized
     291             :          * to each other.
     292             :          */
     293          69 :         next_cpu = cpumask_next(raw_smp_processor_id(), cpu_online_mask);
     294          69 :         if (next_cpu >= nr_cpu_ids)
     295          17 :                 next_cpu = cpumask_first(cpu_online_mask);
     296             : 
     297             :         /*
     298             :          * Arm timer if not already pending: could race with concurrent
     299             :          * pair clocksource_stop_watchdog() clocksource_start_watchdog().
     300             :          */
     301          69 :         if (!timer_pending(&watchdog_timer)) {
     302          69 :                 watchdog_timer.expires += WATCHDOG_INTERVAL;
     303          69 :                 add_timer_on(&watchdog_timer, next_cpu);
     304             :         }
     305           0 : out:
     306          69 :         spin_unlock(&watchdog_lock);
     307          69 : }
     308             : 
     309           5 : static inline void clocksource_start_watchdog(void)
     310             : {
     311           5 :         if (watchdog_running || !watchdog || list_empty(&watchdog_list))
     312             :                 return;
     313           1 :         timer_setup(&watchdog_timer, clocksource_watchdog, 0);
     314           1 :         watchdog_timer.expires = jiffies + WATCHDOG_INTERVAL;
     315           1 :         add_timer_on(&watchdog_timer, cpumask_first(cpu_online_mask));
     316           1 :         watchdog_running = 1;
     317             : }
     318             : 
     319           2 : static inline void clocksource_stop_watchdog(void)
     320             : {
     321           2 :         if (!watchdog_running || (watchdog && !list_empty(&watchdog_list)))
     322             :                 return;
     323           0 :         del_timer(&watchdog_timer);
     324           0 :         watchdog_running = 0;
     325             : }
     326             : 
     327           1 : static inline void clocksource_reset_watchdog(void)
     328             : {
     329           1 :         struct clocksource *cs;
     330             : 
     331           1 :         list_for_each_entry(cs, &watchdog_list, wd_list)
     332           0 :                 cs->flags &= ~CLOCK_SOURCE_WATCHDOG;
     333           1 : }
     334             : 
     335           0 : static void clocksource_resume_watchdog(void)
     336             : {
     337           0 :         atomic_inc(&watchdog_reset_pending);
     338           0 : }
     339             : 
     340           5 : static void clocksource_enqueue_watchdog(struct clocksource *cs)
     341             : {
     342           5 :         INIT_LIST_HEAD(&cs->wd_list);
     343             : 
     344           5 :         if (cs->flags & CLOCK_SOURCE_MUST_VERIFY) {
     345             :                 /* cs is a clocksource to be watched. */
     346           2 :                 list_add(&cs->wd_list, &watchdog_list);
     347           2 :                 cs->flags &= ~CLOCK_SOURCE_WATCHDOG;
     348             :         } else {
     349             :                 /* cs is a watchdog. */
     350           3 :                 if (cs->flags & CLOCK_SOURCE_IS_CONTINUOUS)
     351           1 :                         cs->flags |= CLOCK_SOURCE_VALID_FOR_HRES;
     352             :         }
     353           5 : }
     354             : 
     355           5 : static void clocksource_select_watchdog(bool fallback)
     356             : {
     357           5 :         struct clocksource *cs, *old_wd;
     358           5 :         unsigned long flags;
     359             : 
     360           5 :         spin_lock_irqsave(&watchdog_lock, flags);
     361             :         /* save current watchdog */
     362           5 :         old_wd = watchdog;
     363           5 :         if (fallback)
     364           0 :                 watchdog = NULL;
     365             : 
     366          20 :         list_for_each_entry(cs, &clocksource_list, list) {
     367             :                 /* cs is a clocksource to be watched. */
     368          15 :                 if (cs->flags & CLOCK_SOURCE_MUST_VERIFY)
     369           4 :                         continue;
     370             : 
     371             :                 /* Skip current if we were requested for a fallback. */
     372          11 :                 if (fallback && cs == old_wd)
     373           0 :                         continue;
     374             : 
     375             :                 /* Pick the best watchdog. */
     376          11 :                 if (!watchdog || cs->rating > watchdog->rating)
     377           1 :                         watchdog = cs;
     378             :         }
     379             :         /* If we failed to find a fallback restore the old one. */
     380           5 :         if (!watchdog)
     381           0 :                 watchdog = old_wd;
     382             : 
     383             :         /* If we changed the watchdog we need to reset cycles. */
     384           5 :         if (watchdog != old_wd)
     385           1 :                 clocksource_reset_watchdog();
     386             : 
     387             :         /* Check if the watchdog timer needs to be started. */
     388           5 :         clocksource_start_watchdog();
     389           5 :         spin_unlock_irqrestore(&watchdog_lock, flags);
     390           5 : }
     391             : 
     392           1 : static void clocksource_dequeue_watchdog(struct clocksource *cs)
     393             : {
     394           1 :         if (cs != watchdog) {
     395           1 :                 if (cs->flags & CLOCK_SOURCE_MUST_VERIFY) {
     396             :                         /* cs is a watched clocksource. */
     397           1 :                         list_del_init(&cs->wd_list);
     398             :                         /* Check if the watchdog timer needs to be stopped. */
     399           1 :                         clocksource_stop_watchdog();
     400             :                 }
     401             :         }
     402           1 : }
     403             : 
     404           1 : static int __clocksource_watchdog_kthread(void)
     405             : {
     406           1 :         struct clocksource *cs, *tmp;
     407           1 :         unsigned long flags;
     408           1 :         int select = 0;
     409             : 
     410           1 :         spin_lock_irqsave(&watchdog_lock, flags);
     411           2 :         list_for_each_entry_safe(cs, tmp, &watchdog_list, wd_list) {
     412           1 :                 if (cs->flags & CLOCK_SOURCE_UNSTABLE) {
     413           0 :                         list_del_init(&cs->wd_list);
     414           0 :                         __clocksource_change_rating(cs, 0);
     415           0 :                         select = 1;
     416             :                 }
     417           1 :                 if (cs->flags & CLOCK_SOURCE_RESELECT) {
     418           0 :                         cs->flags &= ~CLOCK_SOURCE_RESELECT;
     419           0 :                         select = 1;
     420             :                 }
     421             :         }
     422             :         /* Check if the watchdog timer needs to be stopped. */
     423           1 :         clocksource_stop_watchdog();
     424           1 :         spin_unlock_irqrestore(&watchdog_lock, flags);
     425             : 
     426           1 :         return select;
     427             : }
     428             : 
     429           0 : static int clocksource_watchdog_kthread(void *data)
     430             : {
     431           0 :         mutex_lock(&clocksource_mutex);
     432           0 :         if (__clocksource_watchdog_kthread())
     433           0 :                 clocksource_select();
     434           0 :         mutex_unlock(&clocksource_mutex);
     435           0 :         return 0;
     436             : }
     437             : 
     438           1 : static bool clocksource_is_watchdog(struct clocksource *cs)
     439             : {
     440           1 :         return cs == watchdog;
     441             : }
     442             : 
     443             : #else /* CONFIG_CLOCKSOURCE_WATCHDOG */
     444             : 
     445             : static void clocksource_enqueue_watchdog(struct clocksource *cs)
     446             : {
     447             :         if (cs->flags & CLOCK_SOURCE_IS_CONTINUOUS)
     448             :                 cs->flags |= CLOCK_SOURCE_VALID_FOR_HRES;
     449             : }
     450             : 
     451             : static void clocksource_select_watchdog(bool fallback) { }
     452             : static inline void clocksource_dequeue_watchdog(struct clocksource *cs) { }
     453             : static inline void clocksource_resume_watchdog(void) { }
     454             : static inline int __clocksource_watchdog_kthread(void) { return 0; }
     455             : static bool clocksource_is_watchdog(struct clocksource *cs) { return false; }
     456             : void clocksource_mark_unstable(struct clocksource *cs) { }
     457             : 
     458             : static inline void clocksource_watchdog_lock(unsigned long *flags) { }
     459             : static inline void clocksource_watchdog_unlock(unsigned long *flags) { }
     460             : 
     461             : #endif /* CONFIG_CLOCKSOURCE_WATCHDOG */
     462             : 
     463           1 : static bool clocksource_is_suspend(struct clocksource *cs)
     464             : {
     465           1 :         return cs == suspend_clocksource;
     466             : }
     467             : 
     468           5 : static void __clocksource_suspend_select(struct clocksource *cs)
     469             : {
     470             :         /*
     471             :          * Skip the clocksource which will be stopped in suspend state.
     472             :          */
     473           5 :         if (!(cs->flags & CLOCK_SOURCE_SUSPEND_NONSTOP))
     474             :                 return;
     475             : 
     476             :         /*
     477             :          * The nonstop clocksource can be selected as the suspend clocksource to
     478             :          * calculate the suspend time, so it should not supply suspend/resume
     479             :          * interfaces to suspend the nonstop clocksource when system suspends.
     480             :          */
     481           0 :         if (cs->suspend || cs->resume) {
     482           0 :                 pr_warn("Nonstop clocksource %s should not supply suspend/resume interfaces\n",
     483             :                         cs->name);
     484             :         }
     485             : 
     486             :         /* Pick the best rating. */
     487           0 :         if (!suspend_clocksource || cs->rating > suspend_clocksource->rating)
     488           0 :                 suspend_clocksource = cs;
     489             : }
     490             : 
     491             : /**
     492             :  * clocksource_suspend_select - Select the best clocksource for suspend timing
     493             :  * @fallback:   if select a fallback clocksource
     494             :  */
     495           0 : static void clocksource_suspend_select(bool fallback)
     496             : {
     497           0 :         struct clocksource *cs, *old_suspend;
     498             : 
     499           0 :         old_suspend = suspend_clocksource;
     500           0 :         if (fallback)
     501           0 :                 suspend_clocksource = NULL;
     502             : 
     503           0 :         list_for_each_entry(cs, &clocksource_list, list) {
     504             :                 /* Skip current if we were requested for a fallback. */
     505           0 :                 if (fallback && cs == old_suspend)
     506           0 :                         continue;
     507             : 
     508           0 :                 __clocksource_suspend_select(cs);
     509             :         }
     510           0 : }
     511             : 
     512             : /**
     513             :  * clocksource_start_suspend_timing - Start measuring the suspend timing
     514             :  * @cs:                 current clocksource from timekeeping
     515             :  * @start_cycles:       current cycles from timekeeping
     516             :  *
     517             :  * This function will save the start cycle values of suspend timer to calculate
     518             :  * the suspend time when resuming system.
     519             :  *
     520             :  * This function is called late in the suspend process from timekeeping_suspend(),
     521             :  * that means processes are freezed, non-boot cpus and interrupts are disabled
     522             :  * now. It is therefore possible to start the suspend timer without taking the
     523             :  * clocksource mutex.
     524             :  */
     525           0 : void clocksource_start_suspend_timing(struct clocksource *cs, u64 start_cycles)
     526             : {
     527           0 :         if (!suspend_clocksource)
     528             :                 return;
     529             : 
     530             :         /*
     531             :          * If current clocksource is the suspend timer, we should use the
     532             :          * tkr_mono.cycle_last value as suspend_start to avoid same reading
     533             :          * from suspend timer.
     534             :          */
     535           0 :         if (clocksource_is_suspend(cs)) {
     536           0 :                 suspend_start = start_cycles;
     537           0 :                 return;
     538             :         }
     539             : 
     540           0 :         if (suspend_clocksource->enable &&
     541           0 :             suspend_clocksource->enable(suspend_clocksource)) {
     542           0 :                 pr_warn_once("Failed to enable the non-suspend-able clocksource.\n");
     543           0 :                 return;
     544             :         }
     545             : 
     546           0 :         suspend_start = suspend_clocksource->read(suspend_clocksource);
     547             : }
     548             : 
     549             : /**
     550             :  * clocksource_stop_suspend_timing - Stop measuring the suspend timing
     551             :  * @cs:         current clocksource from timekeeping
     552             :  * @cycle_now:  current cycles from timekeeping
     553             :  *
     554             :  * This function will calculate the suspend time from suspend timer.
     555             :  *
     556             :  * Returns nanoseconds since suspend started, 0 if no usable suspend clocksource.
     557             :  *
     558             :  * This function is called early in the resume process from timekeeping_resume(),
     559             :  * that means there is only one cpu, no processes are running and the interrupts
     560             :  * are disabled. It is therefore possible to stop the suspend timer without
     561             :  * taking the clocksource mutex.
     562             :  */
     563           0 : u64 clocksource_stop_suspend_timing(struct clocksource *cs, u64 cycle_now)
     564             : {
     565           0 :         u64 now, delta, nsec = 0;
     566             : 
     567           0 :         if (!suspend_clocksource)
     568             :                 return 0;
     569             : 
     570             :         /*
     571             :          * If current clocksource is the suspend timer, we should use the
     572             :          * tkr_mono.cycle_last value from timekeeping as current cycle to
     573             :          * avoid same reading from suspend timer.
     574             :          */
     575           0 :         if (clocksource_is_suspend(cs))
     576             :                 now = cycle_now;
     577             :         else
     578           0 :                 now = suspend_clocksource->read(suspend_clocksource);
     579             : 
     580           0 :         if (now > suspend_start) {
     581           0 :                 delta = clocksource_delta(now, suspend_start,
     582           0 :                                           suspend_clocksource->mask);
     583           0 :                 nsec = mul_u64_u32_shr(delta, suspend_clocksource->mult,
     584             :                                        suspend_clocksource->shift);
     585             :         }
     586             : 
     587             :         /*
     588             :          * Disable the suspend timer to save power if current clocksource is
     589             :          * not the suspend timer.
     590             :          */
     591           0 :         if (!clocksource_is_suspend(cs) && suspend_clocksource->disable)
     592           0 :                 suspend_clocksource->disable(suspend_clocksource);
     593             : 
     594             :         return nsec;
     595             : }
     596             : 
     597             : /**
     598             :  * clocksource_suspend - suspend the clocksource(s)
     599             :  */
     600           0 : void clocksource_suspend(void)
     601             : {
     602           0 :         struct clocksource *cs;
     603             : 
     604           0 :         list_for_each_entry_reverse(cs, &clocksource_list, list)
     605           0 :                 if (cs->suspend)
     606           0 :                         cs->suspend(cs);
     607           0 : }
     608             : 
     609             : /**
     610             :  * clocksource_resume - resume the clocksource(s)
     611             :  */
     612           0 : void clocksource_resume(void)
     613             : {
     614           0 :         struct clocksource *cs;
     615             : 
     616           0 :         list_for_each_entry(cs, &clocksource_list, list)
     617           0 :                 if (cs->resume)
     618           0 :                         cs->resume(cs);
     619             : 
     620           0 :         clocksource_resume_watchdog();
     621           0 : }
     622             : 
     623             : /**
     624             :  * clocksource_touch_watchdog - Update watchdog
     625             :  *
     626             :  * Update the watchdog after exception contexts such as kgdb so as not
     627             :  * to incorrectly trip the watchdog. This might fail when the kernel
     628             :  * was stopped in code which holds watchdog_lock.
     629             :  */
     630           0 : void clocksource_touch_watchdog(void)
     631             : {
     632           0 :         clocksource_resume_watchdog();
     633           0 : }
     634             : 
     635             : /**
     636             :  * clocksource_max_adjustment- Returns max adjustment amount
     637             :  * @cs:         Pointer to clocksource
     638             :  *
     639             :  */
     640           5 : static u32 clocksource_max_adjustment(struct clocksource *cs)
     641             : {
     642           5 :         u64 ret;
     643             :         /*
     644             :          * We won't try to correct for more than 11% adjustments (110,000 ppm),
     645             :          */
     646           5 :         ret = (u64)cs->mult * 11;
     647           5 :         do_div(ret,100);
     648           5 :         return (u32)ret;
     649             : }
     650             : 
     651             : /**
     652             :  * clocks_calc_max_nsecs - Returns maximum nanoseconds that can be converted
     653             :  * @mult:       cycle to nanosecond multiplier
     654             :  * @shift:      cycle to nanosecond divisor (power of two)
     655             :  * @maxadj:     maximum adjustment value to mult (~11%)
     656             :  * @mask:       bitmask for two's complement subtraction of non 64 bit counters
     657             :  * @max_cyc:    maximum cycle value before potential overflow (does not include
     658             :  *              any safety margin)
     659             :  *
     660             :  * NOTE: This function includes a safety margin of 50%, in other words, we
     661             :  * return half the number of nanoseconds the hardware counter can technically
     662             :  * cover. This is done so that we can potentially detect problems caused by
     663             :  * delayed timers or bad hardware, which might result in time intervals that
     664             :  * are larger than what the math used can handle without overflows.
     665             :  */
     666           5 : u64 clocks_calc_max_nsecs(u32 mult, u32 shift, u32 maxadj, u64 mask, u64 *max_cyc)
     667             : {
     668           5 :         u64 max_nsecs, max_cycles;
     669             : 
     670             :         /*
     671             :          * Calculate the maximum number of cycles that we can pass to the
     672             :          * cyc2ns() function without overflowing a 64-bit result.
     673             :          */
     674           5 :         max_cycles = ULLONG_MAX;
     675           5 :         do_div(max_cycles, mult+maxadj);
     676             : 
     677             :         /*
     678             :          * The actual maximum number of cycles we can defer the clocksource is
     679             :          * determined by the minimum of max_cycles and mask.
     680             :          * Note: Here we subtract the maxadj to make sure we don't sleep for
     681             :          * too long if there's a large negative adjustment.
     682             :          */
     683           5 :         max_cycles = min(max_cycles, mask);
     684           0 :         max_nsecs = clocksource_cyc2ns(max_cycles, mult - maxadj, shift);
     685             : 
     686             :         /* return the max_cycles value as well if requested */
     687           5 :         if (max_cyc)
     688           5 :                 *max_cyc = max_cycles;
     689             : 
     690             :         /* Return 50% of the actual maximum, so we can detect bad values */
     691           5 :         max_nsecs >>= 1;
     692             : 
     693           5 :         return max_nsecs;
     694             : }
     695             : 
     696             : /**
     697             :  * clocksource_update_max_deferment - Updates the clocksource max_idle_ns & max_cycles
     698             :  * @cs:         Pointer to clocksource to be updated
     699             :  *
     700             :  */
     701           5 : static inline void clocksource_update_max_deferment(struct clocksource *cs)
     702             : {
     703           5 :         cs->max_idle_ns = clocks_calc_max_nsecs(cs->mult, cs->shift,
     704             :                                                 cs->maxadj, cs->mask,
     705             :                                                 &cs->max_cycles);
     706           5 : }
     707             : 
     708           6 : static struct clocksource *clocksource_find_best(bool oneshot, bool skipcur)
     709             : {
     710           6 :         struct clocksource *cs;
     711             : 
     712           6 :         if (!finished_booting || list_empty(&clocksource_list))
     713             :                 return NULL;
     714             : 
     715             :         /*
     716             :          * We pick the clocksource with the highest rating. If oneshot
     717             :          * mode is active, we pick the highres valid clocksource with
     718             :          * the best rating.
     719             :          */
     720           2 :         list_for_each_entry(cs, &clocksource_list, list) {
     721           2 :                 if (skipcur && cs == curr_clocksource)
     722           0 :                         continue;
     723           2 :                 if (oneshot && !(cs->flags & CLOCK_SOURCE_VALID_FOR_HRES))
     724           0 :                         continue;
     725             :                 return cs;
     726             :         }
     727             :         return NULL;
     728             : }
     729             : 
     730           6 : static void __clocksource_select(bool skipcur)
     731             : {
     732           6 :         bool oneshot = tick_oneshot_mode_active();
     733           6 :         struct clocksource *best, *cs;
     734             : 
     735             :         /* Find the best suitable clocksource */
     736           6 :         best = clocksource_find_best(oneshot, skipcur);
     737           6 :         if (!best)
     738             :                 return;
     739             : 
     740           2 :         if (!strlen(override_name))
     741           2 :                 goto found;
     742             : 
     743             :         /* Check for the override clocksource. */
     744           0 :         list_for_each_entry(cs, &clocksource_list, list) {
     745           0 :                 if (skipcur && cs == curr_clocksource)
     746           0 :                         continue;
     747           0 :                 if (strcmp(cs->name, override_name) != 0)
     748           0 :                         continue;
     749             :                 /*
     750             :                  * Check to make sure we don't switch to a non-highres
     751             :                  * capable clocksource if the tick code is in oneshot
     752             :                  * mode (highres or nohz)
     753             :                  */
     754           0 :                 if (!(cs->flags & CLOCK_SOURCE_VALID_FOR_HRES) && oneshot) {
     755             :                         /* Override clocksource cannot be used. */
     756           0 :                         if (cs->flags & CLOCK_SOURCE_UNSTABLE) {
     757           0 :                                 pr_warn("Override clocksource %s is unstable and not HRT compatible - cannot switch while in HRT/NOHZ mode\n",
     758             :                                         cs->name);
     759           0 :                                 override_name[0] = 0;
     760             :                         } else {
     761             :                                 /*
     762             :                                  * The override cannot be currently verified.
     763             :                                  * Deferring to let the watchdog check.
     764             :                                  */
     765           0 :                                 pr_info("Override clocksource %s is not currently HRT compatible - deferring\n",
     766             :                                         cs->name);
     767             :                         }
     768             :                 } else
     769             :                         /* Override clocksource can be used. */
     770             :                         best = cs;
     771             :                 break;
     772             :         }
     773             : 
     774           0 : found:
     775           2 :         if (curr_clocksource != best && !timekeeping_notify(best)) {
     776           1 :                 pr_info("Switched to clocksource %s\n", best->name);
     777           1 :                 curr_clocksource = best;
     778             :         }
     779             : }
     780             : 
     781             : /**
     782             :  * clocksource_select - Select the best clocksource available
     783             :  *
     784             :  * Private function. Must hold clocksource_mutex when called.
     785             :  *
     786             :  * Select the clocksource with the best rating, or the clocksource,
     787             :  * which is selected by userspace override.
     788             :  */
     789           6 : static void clocksource_select(void)
     790             : {
     791           0 :         __clocksource_select(false);
     792           0 : }
     793             : 
     794           0 : static void clocksource_select_fallback(void)
     795             : {
     796           0 :         __clocksource_select(true);
     797             : }
     798             : 
     799             : /*
     800             :  * clocksource_done_booting - Called near the end of core bootup
     801             :  *
     802             :  * Hack to avoid lots of clocksource churn at boot time.
     803             :  * We use fs_initcall because we want this to start before
     804             :  * device_initcall but after subsys_initcall.
     805             :  */
     806           1 : static int __init clocksource_done_booting(void)
     807             : {
     808           1 :         mutex_lock(&clocksource_mutex);
     809           1 :         curr_clocksource = clocksource_default_clock();
     810           1 :         finished_booting = 1;
     811             :         /*
     812             :          * Run the watchdog first to eliminate unstable clock sources
     813             :          */
     814           1 :         __clocksource_watchdog_kthread();
     815           1 :         clocksource_select();
     816           1 :         mutex_unlock(&clocksource_mutex);
     817           1 :         return 0;
     818             : }
     819             : fs_initcall(clocksource_done_booting);
     820             : 
     821             : /*
     822             :  * Enqueue the clocksource sorted by rating
     823             :  */
     824           5 : static void clocksource_enqueue(struct clocksource *cs)
     825             : {
     826           5 :         struct list_head *entry = &clocksource_list;
     827           5 :         struct clocksource *tmp;
     828             : 
     829          11 :         list_for_each_entry(tmp, &clocksource_list, list) {
     830             :                 /* Keep track of the place, where to insert */
     831           8 :                 if (tmp->rating < cs->rating)
     832             :                         break;
     833           6 :                 entry = &tmp->list;
     834             :         }
     835           5 :         list_add(&cs->list, entry);
     836           5 : }
     837             : 
     838             : /**
     839             :  * __clocksource_update_freq_scale - Used update clocksource with new freq
     840             :  * @cs:         clocksource to be registered
     841             :  * @scale:      Scale factor multiplied against freq to get clocksource hz
     842             :  * @freq:       clocksource frequency (cycles per second) divided by scale
     843             :  *
     844             :  * This should only be called from the clocksource->enable() method.
     845             :  *
     846             :  * This *SHOULD NOT* be called directly! Please use the
     847             :  * __clocksource_update_freq_hz() or __clocksource_update_freq_khz() helper
     848             :  * functions.
     849             :  */
     850           5 : void __clocksource_update_freq_scale(struct clocksource *cs, u32 scale, u32 freq)
     851             : {
     852           5 :         u64 sec;
     853             : 
     854             :         /*
     855             :          * Default clocksources are *special* and self-define their mult/shift.
     856             :          * But, you're not special, so you should specify a freq value.
     857             :          */
     858           5 :         if (freq) {
     859             :                 /*
     860             :                  * Calc the maximum number of seconds which we can run before
     861             :                  * wrapping around. For clocksources which have a mask > 32-bit
     862             :                  * we need to limit the max sleep time to have a good
     863             :                  * conversion precision. 10 minutes is still a reasonable
     864             :                  * amount. That results in a shift value of 24 for a
     865             :                  * clocksource with mask >= 40-bit and f >= 4GHz. That maps to
     866             :                  * ~ 0.06ppm granularity for NTP.
     867             :                  */
     868           3 :                 sec = cs->mask;
     869           3 :                 do_div(sec, freq);
     870           3 :                 do_div(sec, scale);
     871           3 :                 if (!sec)
     872             :                         sec = 1;
     873           3 :                 else if (sec > 600 && cs->mask > UINT_MAX)
     874           3 :                         sec = 600;
     875             : 
     876           3 :                 clocks_calc_mult_shift(&cs->mult, &cs->shift, freq,
     877           3 :                                        NSEC_PER_SEC / scale, sec * scale);
     878             :         }
     879             :         /*
     880             :          * Ensure clocksources that have large 'mult' values don't overflow
     881             :          * when adjusted.
     882             :          */
     883           5 :         cs->maxadj = clocksource_max_adjustment(cs);
     884           5 :         while (freq && ((cs->mult + cs->maxadj < cs->mult)
     885           3 :                 || (cs->mult - cs->maxadj > cs->mult))) {
     886           0 :                 cs->mult >>= 1;
     887           0 :                 cs->shift--;
     888           0 :                 cs->maxadj = clocksource_max_adjustment(cs);
     889             :         }
     890             : 
     891             :         /*
     892             :          * Only warn for *special* clocksources that self-define
     893             :          * their mult/shift values and don't specify a freq.
     894             :          */
     895           5 :         WARN_ONCE(cs->mult + cs->maxadj < cs->mult,
     896             :                 "timekeeping: Clocksource %s might overflow on 11%% adjustment\n",
     897             :                 cs->name);
     898             : 
     899           5 :         clocksource_update_max_deferment(cs);
     900             : 
     901           5 :         pr_info("%s: mask: 0x%llx max_cycles: 0x%llx, max_idle_ns: %lld ns\n",
     902             :                 cs->name, cs->mask, cs->max_cycles, cs->max_idle_ns);
     903           5 : }
     904             : EXPORT_SYMBOL_GPL(__clocksource_update_freq_scale);
     905             : 
     906             : /**
     907             :  * __clocksource_register_scale - Used to install new clocksources
     908             :  * @cs:         clocksource to be registered
     909             :  * @scale:      Scale factor multiplied against freq to get clocksource hz
     910             :  * @freq:       clocksource frequency (cycles per second) divided by scale
     911             :  *
     912             :  * Returns -EBUSY if registration fails, zero otherwise.
     913             :  *
     914             :  * This *SHOULD NOT* be called directly! Please use the
     915             :  * clocksource_register_hz() or clocksource_register_khz helper functions.
     916             :  */
     917           5 : int __clocksource_register_scale(struct clocksource *cs, u32 scale, u32 freq)
     918             : {
     919           5 :         unsigned long flags;
     920             : 
     921           5 :         clocksource_arch_init(cs);
     922             : 
     923           5 :         if (cs->vdso_clock_mode < 0 ||
     924           5 :             cs->vdso_clock_mode >= VDSO_CLOCKMODE_MAX) {
     925           0 :                 pr_warn("clocksource %s registered with invalid VDSO mode %d. Disabling VDSO support.\n",
     926             :                         cs->name, cs->vdso_clock_mode);
     927           0 :                 cs->vdso_clock_mode = VDSO_CLOCKMODE_NONE;
     928             :         }
     929             : 
     930             :         /* Initialize mult/shift and max_idle_ns */
     931           5 :         __clocksource_update_freq_scale(cs, scale, freq);
     932             : 
     933             :         /* Add clocksource to the clocksource list */
     934           5 :         mutex_lock(&clocksource_mutex);
     935             : 
     936           5 :         clocksource_watchdog_lock(&flags);
     937           5 :         clocksource_enqueue(cs);
     938           5 :         clocksource_enqueue_watchdog(cs);
     939           5 :         clocksource_watchdog_unlock(&flags);
     940             : 
     941           5 :         clocksource_select();
     942           5 :         clocksource_select_watchdog(false);
     943           5 :         __clocksource_suspend_select(cs);
     944           5 :         mutex_unlock(&clocksource_mutex);
     945           5 :         return 0;
     946             : }
     947             : EXPORT_SYMBOL_GPL(__clocksource_register_scale);
     948             : 
     949           0 : static void __clocksource_change_rating(struct clocksource *cs, int rating)
     950             : {
     951           0 :         list_del(&cs->list);
     952           0 :         cs->rating = rating;
     953           0 :         clocksource_enqueue(cs);
     954           0 : }
     955             : 
     956             : /**
     957             :  * clocksource_change_rating - Change the rating of a registered clocksource
     958             :  * @cs:         clocksource to be changed
     959             :  * @rating:     new rating
     960             :  */
     961           0 : void clocksource_change_rating(struct clocksource *cs, int rating)
     962             : {
     963           0 :         unsigned long flags;
     964             : 
     965           0 :         mutex_lock(&clocksource_mutex);
     966           0 :         clocksource_watchdog_lock(&flags);
     967           0 :         __clocksource_change_rating(cs, rating);
     968           0 :         clocksource_watchdog_unlock(&flags);
     969             : 
     970           0 :         clocksource_select();
     971           0 :         clocksource_select_watchdog(false);
     972           0 :         clocksource_suspend_select(false);
     973           0 :         mutex_unlock(&clocksource_mutex);
     974           0 : }
     975             : EXPORT_SYMBOL(clocksource_change_rating);
     976             : 
     977             : /*
     978             :  * Unbind clocksource @cs. Called with clocksource_mutex held
     979             :  */
     980           1 : static int clocksource_unbind(struct clocksource *cs)
     981             : {
     982           1 :         unsigned long flags;
     983             : 
     984           1 :         if (clocksource_is_watchdog(cs)) {
     985             :                 /* Select and try to install a replacement watchdog. */
     986           0 :                 clocksource_select_watchdog(true);
     987           0 :                 if (clocksource_is_watchdog(cs))
     988             :                         return -EBUSY;
     989             :         }
     990             : 
     991           1 :         if (cs == curr_clocksource) {
     992             :                 /* Select and try to install a replacement clock source */
     993           0 :                 clocksource_select_fallback();
     994           0 :                 if (curr_clocksource == cs)
     995             :                         return -EBUSY;
     996             :         }
     997             : 
     998           1 :         if (clocksource_is_suspend(cs)) {
     999             :                 /*
    1000             :                  * Select and try to install a replacement suspend clocksource.
    1001             :                  * If no replacement suspend clocksource, we will just let the
    1002             :                  * clocksource go and have no suspend clocksource.
    1003             :                  */
    1004           0 :                 clocksource_suspend_select(true);
    1005             :         }
    1006             : 
    1007           1 :         clocksource_watchdog_lock(&flags);
    1008           1 :         clocksource_dequeue_watchdog(cs);
    1009           1 :         list_del_init(&cs->list);
    1010           1 :         clocksource_watchdog_unlock(&flags);
    1011             : 
    1012           1 :         return 0;
    1013             : }
    1014             : 
    1015             : /**
    1016             :  * clocksource_unregister - remove a registered clocksource
    1017             :  * @cs: clocksource to be unregistered
    1018             :  */
    1019           1 : int clocksource_unregister(struct clocksource *cs)
    1020             : {
    1021           1 :         int ret = 0;
    1022             : 
    1023           1 :         mutex_lock(&clocksource_mutex);
    1024           1 :         if (!list_empty(&cs->list))
    1025           1 :                 ret = clocksource_unbind(cs);
    1026           1 :         mutex_unlock(&clocksource_mutex);
    1027           1 :         return ret;
    1028             : }
    1029             : EXPORT_SYMBOL(clocksource_unregister);
    1030             : 
    1031             : #ifdef CONFIG_SYSFS
    1032             : /**
    1033             :  * current_clocksource_show - sysfs interface for current clocksource
    1034             :  * @dev:        unused
    1035             :  * @attr:       unused
    1036             :  * @buf:        char buffer to be filled with clocksource list
    1037             :  *
    1038             :  * Provides sysfs interface for listing current clocksource.
    1039             :  */
    1040           0 : static ssize_t current_clocksource_show(struct device *dev,
    1041             :                                         struct device_attribute *attr,
    1042             :                                         char *buf)
    1043             : {
    1044           0 :         ssize_t count = 0;
    1045             : 
    1046           0 :         mutex_lock(&clocksource_mutex);
    1047           0 :         count = snprintf(buf, PAGE_SIZE, "%s\n", curr_clocksource->name);
    1048           0 :         mutex_unlock(&clocksource_mutex);
    1049             : 
    1050           0 :         return count;
    1051             : }
    1052             : 
    1053           0 : ssize_t sysfs_get_uname(const char *buf, char *dst, size_t cnt)
    1054             : {
    1055           0 :         size_t ret = cnt;
    1056             : 
    1057             :         /* strings from sysfs write are not 0 terminated! */
    1058           0 :         if (!cnt || cnt >= CS_NAME_LEN)
    1059             :                 return -EINVAL;
    1060             : 
    1061             :         /* strip of \n: */
    1062           0 :         if (buf[cnt-1] == '\n')
    1063           0 :                 cnt--;
    1064           0 :         if (cnt > 0)
    1065           0 :                 memcpy(dst, buf, cnt);
    1066           0 :         dst[cnt] = 0;
    1067           0 :         return ret;
    1068             : }
    1069             : 
    1070             : /**
    1071             :  * current_clocksource_store - interface for manually overriding clocksource
    1072             :  * @dev:        unused
    1073             :  * @attr:       unused
    1074             :  * @buf:        name of override clocksource
    1075             :  * @count:      length of buffer
    1076             :  *
    1077             :  * Takes input from sysfs interface for manually overriding the default
    1078             :  * clocksource selection.
    1079             :  */
    1080           0 : static ssize_t current_clocksource_store(struct device *dev,
    1081             :                                          struct device_attribute *attr,
    1082             :                                          const char *buf, size_t count)
    1083             : {
    1084           0 :         ssize_t ret;
    1085             : 
    1086           0 :         mutex_lock(&clocksource_mutex);
    1087             : 
    1088           0 :         ret = sysfs_get_uname(buf, override_name, count);
    1089           0 :         if (ret >= 0)
    1090           0 :                 clocksource_select();
    1091             : 
    1092           0 :         mutex_unlock(&clocksource_mutex);
    1093             : 
    1094           0 :         return ret;
    1095             : }
    1096             : static DEVICE_ATTR_RW(current_clocksource);
    1097             : 
    1098             : /**
    1099             :  * unbind_clocksource_store - interface for manually unbinding clocksource
    1100             :  * @dev:        unused
    1101             :  * @attr:       unused
    1102             :  * @buf:        unused
    1103             :  * @count:      length of buffer
    1104             :  *
    1105             :  * Takes input from sysfs interface for manually unbinding a clocksource.
    1106             :  */
    1107           0 : static ssize_t unbind_clocksource_store(struct device *dev,
    1108             :                                         struct device_attribute *attr,
    1109             :                                         const char *buf, size_t count)
    1110             : {
    1111           0 :         struct clocksource *cs;
    1112           0 :         char name[CS_NAME_LEN];
    1113           0 :         ssize_t ret;
    1114             : 
    1115           0 :         ret = sysfs_get_uname(buf, name, count);
    1116           0 :         if (ret < 0)
    1117             :                 return ret;
    1118             : 
    1119           0 :         ret = -ENODEV;
    1120           0 :         mutex_lock(&clocksource_mutex);
    1121           0 :         list_for_each_entry(cs, &clocksource_list, list) {
    1122           0 :                 if (strcmp(cs->name, name))
    1123           0 :                         continue;
    1124           0 :                 ret = clocksource_unbind(cs);
    1125           0 :                 break;
    1126             :         }
    1127           0 :         mutex_unlock(&clocksource_mutex);
    1128             : 
    1129           0 :         return ret ? ret : count;
    1130             : }
    1131             : static DEVICE_ATTR_WO(unbind_clocksource);
    1132             : 
    1133             : /**
    1134             :  * available_clocksource_show - sysfs interface for listing clocksource
    1135             :  * @dev:        unused
    1136             :  * @attr:       unused
    1137             :  * @buf:        char buffer to be filled with clocksource list
    1138             :  *
    1139             :  * Provides sysfs interface for listing registered clocksources
    1140             :  */
    1141           0 : static ssize_t available_clocksource_show(struct device *dev,
    1142             :                                           struct device_attribute *attr,
    1143             :                                           char *buf)
    1144             : {
    1145           0 :         struct clocksource *src;
    1146           0 :         ssize_t count = 0;
    1147             : 
    1148           0 :         mutex_lock(&clocksource_mutex);
    1149           0 :         list_for_each_entry(src, &clocksource_list, list) {
    1150             :                 /*
    1151             :                  * Don't show non-HRES clocksource if the tick code is
    1152             :                  * in one shot mode (highres=on or nohz=on)
    1153             :                  */
    1154           0 :                 if (!tick_oneshot_mode_active() ||
    1155           0 :                     (src->flags & CLOCK_SOURCE_VALID_FOR_HRES))
    1156           0 :                         count += snprintf(buf + count,
    1157           0 :                                   max((ssize_t)PAGE_SIZE - count, (ssize_t)0),
    1158             :                                   "%s ", src->name);
    1159             :         }
    1160           0 :         mutex_unlock(&clocksource_mutex);
    1161             : 
    1162           0 :         count += snprintf(buf + count,
    1163           0 :                           max((ssize_t)PAGE_SIZE - count, (ssize_t)0), "\n");
    1164             : 
    1165           0 :         return count;
    1166             : }
    1167             : static DEVICE_ATTR_RO(available_clocksource);
    1168             : 
    1169             : static struct attribute *clocksource_attrs[] = {
    1170             :         &dev_attr_current_clocksource.attr,
    1171             :         &dev_attr_unbind_clocksource.attr,
    1172             :         &dev_attr_available_clocksource.attr,
    1173             :         NULL
    1174             : };
    1175             : ATTRIBUTE_GROUPS(clocksource);
    1176             : 
    1177             : static struct bus_type clocksource_subsys = {
    1178             :         .name = "clocksource",
    1179             :         .dev_name = "clocksource",
    1180             : };
    1181             : 
    1182             : static struct device device_clocksource = {
    1183             :         .id     = 0,
    1184             :         .bus    = &clocksource_subsys,
    1185             :         .groups = clocksource_groups,
    1186             : };
    1187             : 
    1188           1 : static int __init init_clocksource_sysfs(void)
    1189             : {
    1190           1 :         int error = subsys_system_register(&clocksource_subsys, NULL);
    1191             : 
    1192           1 :         if (!error)
    1193           1 :                 error = device_register(&device_clocksource);
    1194             : 
    1195           1 :         return error;
    1196             : }
    1197             : 
    1198             : device_initcall(init_clocksource_sysfs);
    1199             : #endif /* CONFIG_SYSFS */
    1200             : 
    1201             : /**
    1202             :  * boot_override_clocksource - boot clock override
    1203             :  * @str:        override name
    1204             :  *
    1205             :  * Takes a clocksource= boot argument and uses it
    1206             :  * as the clocksource override name.
    1207             :  */
    1208           0 : static int __init boot_override_clocksource(char* str)
    1209             : {
    1210           0 :         mutex_lock(&clocksource_mutex);
    1211           0 :         if (str)
    1212           0 :                 strlcpy(override_name, str, sizeof(override_name));
    1213           0 :         mutex_unlock(&clocksource_mutex);
    1214           0 :         return 1;
    1215             : }
    1216             : 
    1217             : __setup("clocksource=", boot_override_clocksource);
    1218             : 
    1219             : /**
    1220             :  * boot_override_clock - Compatibility layer for deprecated boot option
    1221             :  * @str:        override name
    1222             :  *
    1223             :  * DEPRECATED! Takes a clock= boot argument and uses it
    1224             :  * as the clocksource override name
    1225             :  */
    1226           0 : static int __init boot_override_clock(char* str)
    1227             : {
    1228           0 :         if (!strcmp(str, "pmtmr")) {
    1229           0 :                 pr_warn("clock=pmtmr is deprecated - use clocksource=acpi_pm\n");
    1230           0 :                 return boot_override_clocksource("acpi_pm");
    1231             :         }
    1232           0 :         pr_warn("clock= boot option is deprecated - use clocksource=xyz\n");
    1233           0 :         return boot_override_clocksource(str);
    1234             : }
    1235             : 
    1236             : __setup("clock=", boot_override_clock);

Generated by: LCOV version 1.14