Re: [RESEND][PATCH v3 06/17] static_call: Add basic static call infrastructure

From: Nadav Amit
Date: Thu Mar 26 2020 - 14:09:24 EST


> On Mar 26, 2020, at 10:01 AM, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:
>
> On Thu, Mar 26, 2020 at 04:42:07PM +0000, Nadav Amit wrote:
>>> On Mar 24, 2020, at 6:56 AM, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:
>
>>> + * API overview:
>>> + *
>>> + * DECLARE_STATIC_CALL(name, func);
>>> + * DEFINE_STATIC_CALL(name, func);
>>> + * static_call(name)(args...);
>>> + * static_call_update(name, func);
>>> + *
>>> + * Usage example:
>>> + *
>>> + * # Start with the following functions (with identical prototypes):
>>> + * int func_a(int arg1, int arg2);
>>> + * int func_b(int arg1, int arg2);
>>> + *
>>> + * # Define a 'my_name' reference, associated with func_a() by default
>>> + * DEFINE_STATIC_CALL(my_name, func_a);
>>
>> Do you want to support optional function attributes, such as âpureâ and
>> âconstâ?
>
> Do you see a need for that? And what is the syntax for a pointer to a
> pure function?

I think that the kernel underutilizes the pure attribute in general.
Building it with "-Wsuggest-attribute=pureâ results in many warnings.
Function pointers such kvm_x86_ops.get_XXX() could have been candidates to
use the âpureâ attribute.

The syntax is what you would expect:

static void __attribute__((pure))(*ptr)(void);

However, you have a point, gcc does not appear to respect âpureâ for
function pointers and emits a warning it is ignored. GCC apparently only
respects âconstâ. In contrast clang appears to respect the pure attribute
for function pointers.