clocksource: add read2() callback
Subsystems (2)
PATCH 8/10 clocksource: add read2() callback
From: Magnus Damm <[email protected]>
Add a read2() callback for clocksources. This callback is passing a pointer to struct clocksource which makes it easy to share the same callback for multiple clocksource instances.
The function clocksource_read() is modified to prefer read2() over read() if initialized.
---
include/linux/clocksource.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
include/linux/clocksource.h +3 -1
@@ -43,6 +43,7 @@ struct clocksource;* The ideal clocksource. A must-use where * available. * @read: returns a cycle value +* @read2: returns a cycle value, passes clocksource as argument * @mask: bitmask for two's complement * subtraction of non 64 bit counters * @mult: cycle to nanosecond multiplier (adjusted by NTP)
@@ -62,6 +63,7 @@ struct clocksource {struct list_head list;int rating;cycle_t (*read)(void); +cycle_t (*read2)(struct clocksource *cs);cycle_t mask;u32 mult;u32 mult_orig;
@@ -170,7 +172,7 @@ static inline u32 clocksource_hz2mult(u3*/ static inline cycle_t clocksource_read (struct clocksource *cs) { -return cs->read (); +return cs->read2 ? cs->read2 (cs) : cs->read (); }/**
Quoted 10 lines · Magnus Damm
From: Magnus Damm <[email protected]>
Add a
read2()callback for clocksources. This callback is passing a pointer to struct clocksource which makes it easy to share the same callback for multiple clocksource instances.The function
clocksource_read()is modified to preferread2()overread()if initialized.Signed-off-by Magnus Damm <[email protected]>
I'm still not yet totally sold on the reasons we need this change, but I don't have any issue with this implementation. Hopefully the discussion around the timer_inc code will help resolve my concerns.
Also, if we're going to go this way, you might want to add read() to the feature-removal list and add a warning in clocksource_register() for any clocksource that doesn't implement read2, just so we don't have to keep both around forever
thanks
-john
Quoted 32 lines
---
include/linux/clocksource.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)include/linux/clocksource.h +3
-1@@ -43,6 +43,7 @@ struct clocksource;* The ideal clocksource. A must-use where * available. * @read: returns a cycle value +* @read2: returns a cycle value, passes clocksource as argument * @mask: bitmask for two's complement * subtraction of non 64 bit counters * @mult: cycle to nanosecond multiplier (adjusted by NTP) @@ -62,6 +63,7 @@ struct clocksource {struct list_head list;int rating;cycle_t (*read)(void); +cycle_t (*read2)(struct clocksource *cs);cycle_t mask;u32 mult;u32 mult_orig;@@ -170,7 +172,7 @@ static inline u32 clocksource_hz2mult(u3*/ static inline cycle_t clocksource_read (struct clocksource *cs) { -return cs->read (); +return cs->read2 ? cs->read2 (cs) : cs->read (); }/**