diff --git a/common/clock.c b/common/clock.c index 2c5dd91..1090b60 100644 --- a/common/clock.c +++ b/common/clock.c @@ -213,6 +213,17 @@ int init_clock(struct clocksource *cs) { + if (current_clock && cs->priority <= current_clock->priority) + return 0; + + if (cs->init) { + int ret; + + ret = cs->init(cs); + if (ret) + return ret; + } + current_clock = cs; time_beginning = get_time_ns(); diff --git a/include/clock.h b/include/clock.h index d65e404..5f2f53a 100644 --- a/include/clock.h +++ b/include/clock.h @@ -12,7 +12,8 @@ uint64_t (*read)(void); uint64_t cycle_last; uint64_t mask; - + int priority; + int (*init)(struct clocksource*); }; static inline uint32_t cyc2ns(struct clocksource *cs, uint64_t cycles)