Linux 内核时钟架构之时钟源描述

include/linux/clocksource.h

/**  * struct clocksource - hardware abstraction for a free running counter  * Provides mostly state-free accessors to the underlying hardware.  * This is the structure used for system time.  *  * @name:  ptr to clocksource name  * @list:  list head for registration  * @rating:  rating value for selection (higher is better)  *   To avoid rating inflation the following  *   list should give you a guide as to how  *   to assign your clocksource a rating  *   1-99: Unfit for real use  *    Only available for bootup and testing purposes.  *   100-199: Base level usability.  *    Functional for real use, but not desired.  *   200-299: Good.  *    A correct and usable clocksource.  *   300-399: Desired.  *    A reasonably fast and accurate clocksource.  *   400-499: Perfect  *    The ideal clocksource. A must-use where  *    available.  * @read:  returns a cycle value, passes clocksource as argument  * @enable:  optional function to enable the clocksource  * @disable:  optional function to disable the clocksource  * @mask:  bitmask for two's complement  *   subtraction of non 64 bit counters  * @mult:  cycle to nanosecond multiplier  * @shift:  cycle to nanosecond divisor (power of two)  * @max_idle_ns: max idle time permitted by the clocksource (nsecs)  * @maxadj:  maximum adjustment value to mult (~11%)  * @max_cycles:  maximum safe cycle value which won't overflow on multiplication  * @flags:  flags describing special properties  * @archdata:  arch-specific data  * @suspend:  suspend function for the clocksource, if necessary  * @resume:  resume function for the clocksource, if necessary  * @owner:  module reference, must be set by clocksource in modules  *  * Note: This struct is not used in hotpathes of the timekeeping code  * because the timekeeper caches the hot path fields in its own data  * structure, so no line cache alignment is required,  *  * The pointer to the clocksource itself is handed to the read  * callback. If you need extra information there you can wrap struct  * clocksource into your own struct. Depending on the amount of  * information you need you should consider to cache line align that  * structure.  */ struct clocksource {  cycle_t (*read)(struct clocksource *cs);  cycle_t mask;  u32 mult;  u32 shift;  u64 max_idle_ns;  u32 maxadj; #ifdef CONFIG_ARCH_CLOCKSOURCE_DATA  struct arch_clocksource_data archdata; #endif  u64 max_cycles;  const char *name;  struct list_head list;  int rating;  int (*enable)(struct clocksource *cs);  void (*disable)(struct clocksource *cs);  unsigned long flags;  void (*suspend)(struct clocksource *cs);  void (*resume)(struct clocksource *cs);

 /* private: */ #ifdef CONFIG_CLOCKSOURCE_WATCHDOG  /* Watchdog related data, used by the framework */  struct list_head wd_list;  cycle_t cs_last;  cycle_t wd_last; #endif  struct module *owner; };

时钟源模块相关的内部对象:

/*[Clocksource internal variables]---------  * curr_clocksource:  * currently selected clocksource.  * clocksource_list:  * linked list with the registered clocksources  * clocksource_mutex:  * protects manipulations to curr_clocksource and the clocksource_list  * override_name:  * Name of the user-specified clocksource.  */ static struct clocksource *curr_clocksource; static LIST_HEAD(clocksource_list); static DEFINE_MUTEX(clocksource_mutex); static char override_name[CS_NAME_LEN]; static int finished_booting;

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值