On 10/25/24 6:21 AM, Brendan Jackman wrote:
Hey Boris,
On Fri, 25 Oct 2024 at 13:41, Borislav Petkov <bp@xxxxxxxxx> wrote:
On Fri, Jul 12, 2024 at 05:00:19PM +0000, Brendan Jackman wrote:
+/*
+ * Can be used for functions which themselves are not strictly noinstr, but
+ * may be called from noinstr code.
+ */
+#define inline_or_noinstr \
Hmm, this is confusing. So is it noinstr or is it getting inlined?
We don't care if it's getting inlined, which is kinda the point. This
annotation means "you may call this function from noinstr code". My
current understanding is that the normal noinstr annotation means
"this function fundamentally mustn't be instrumented".
So with inline_or_noinstr you get:
1. "Documentation" that the function itself doesn't have any problem
with getting traced etc.
2. Freedom for the compiler to inline or not.
I'd expect you either always inline the small functions - as you do for some
aleady - or mark the others noinstr. But not something in between.
Why this?
Overall it's pretty likely I'm wrong about the subtlety of noinstr's
meaning. And the benefits I listed above are pretty minor. I should
have looked into this as it would have been an opportunity to reduce
the patch count of this RFC!
Maybe I'm also forgetting something more important, perhaps Junaid
will weigh in...
Yes, IIRC the idea was that there is no need to prohibit inlining for this class
of functions.