On 09.03.21 19:57, Borislav Petkov wrote:
On Tue, Mar 09, 2021 at 02:48:03PM +0100, Juergen Gross wrote:@@ -167,6 +168,17 @@ static u64 native_steal_clock(int cpu) return 0; }+DEFINE_STATIC_CALL(pv_steal_clock, native_steal_clock);+DEFINE_STATIC_CALL(pv_sched_clock, native_sched_clock); + +bool paravirt_using_native_sched_clock = true; + +void paravirt_set_sched_clock(u64 (*func)(void)) +{ + static_call_update(pv_sched_clock, func); + paravirt_using_native_sched_clock = (func == native_sched_clock); +}What's the point of this function if there's a global paravirt_using_native_sched_clock variable now?
It is combining the two needed actions: update the static call and set the paravirt_using_native_sched_clock boolean.
Looking how the bit of information whether native_sched_clock is used, is needed in tsc.c, it probably would be cleaner if you add a set_sched_clock_native(void); or so, to tsc.c instead and call that here and make that long var name a a shorter and static one in tsc.c instead.
I need to transfer a boolean value, so it would need to be set_sched_clock_native(bool state); In the end the difference is only marginal IMO. Just had another idea: I could add a function to static_call.h for querying the current function. This would avoid the double book keeping and could probably be used later when switching other pv_ops calls to static_call, too (e.g. pv_is_native_spin_unlock()). What do you think? Juergen
Attachment:
OpenPGP_0xB0DE9DD628BF132F.asc
Description: application/pgp-keys
Attachment:
OpenPGP_signature
Description: OpenPGP digital signature