RE: [PATCH 08/10] clocksource/drivers/hyper-v: Handle sched_clock differences inline
From: Michael Kelley <hidden>
Date: 2021-02-04 16:31:15
Also in:
linux-hyperv, lkml
From: Wei Liu <wei.liu@kernel.org> Sent: Monday, February 1, 2021 10:55 AM
On Wed, Jan 27, 2021 at 12:23:43PM -0800, Michael Kelley wrote: [...]quoted
+/* + * Reference to pv_ops must be inline so objtool + * detection of noinstr violations can work correctly. + */ +static __always_inline void hv_setup_sched_clock(void *sched_clock)sched_clock_register is not trivial. Having __always_inline here is going to make the compiled object bloated. Given this is a static function, I don't think we need to specify any inline keyword. The compiler should be able to determine whether this function should be inlined all by itself. Wei.
There was an explicit request from Peter Zijlstra and Thomas Gleixner to force it inline. See https://lore.kernel.org/patchwork/patch/1283635/ and https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/arch/x86/include/asm/mshyperv.h?id=b9d8cf2eb3ceecdee3434b87763492aee9e28845 Michael
quoted
+{ +#ifdef CONFIG_GENERIC_SCHED_CLOCK + /* + * We're on an architecture with generic sched clock (not x86/x64). + * The Hyper-V sched clock read function returns nanoseconds, not + * the normal 100ns units of the Hyper-V synthetic clock. + */ + sched_clock_register(sched_clock, 64, NSEC_PER_SEC); +#else +#ifdef CONFIG_PARAVIRT + /* We're on x86/x64 *and* using PV ops */ + pv_ops.time.sched_clock = sched_clock; +#endif +#endif +} + static bool __init hv_init_tsc_clocksource(void) { u64 tsc_msr; -- 1.8.3.1