On 24/02/2022 11:25, Jan Beulich wrote: > On 13.01.2022 14:17, Jan Beulich wrote: >> Except in the "clocksource=tsc" case we can replace the indirect calls >> involved in accessing the platform timers by direct ones, as they get >> established once and never changed. To also cover the "tsc" case, invoke >> what read_tsc() resolves to directly. In turn read_tsc() then becomes >> unreachable and hence can move to .init.*. >> >> Signed-off-by: Jan Beulich <jbeul...@suse.com> > As this actually amends the IBT work, I would have hoped for it to be > viewed as useful.
Sorry - it fell through the cracks. Definitely useful. > Of course if accepted in general, it would now want > to have __initconst_cf_clobber annotation addition included. Albeit > there's a slight complication: Some of the structures are written to, > so those couldn't really be "const". The .init.cf_clobber section needs to container a pointer to every target function. For the current ops structures, we just put the whole ops structure in. For individual functions, the best plan I could come up with was a macro which emits: .pushsection .init.cf_clobber, a, @progbits .quad fn .popsection wrapped up in #define cf_clobber(fn), so the end code result ought to look like: static void foo(param *bar) { ... } cf_clobber(foo); similar to command line parameters. That said, in this case, can't we cf_clobber each platform_timesource ? It would require altcall()ing the resume hook too. (the init hook won't matter either way.) ~Andrew