Re: [PATCH v3 bpf-next 01/10] treewide: remove struct-pass-by-value from tracepoints arguments

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 3/22/18 11:11 AM, Steven Rostedt wrote:
On Thu, 22 Mar 2018 11:01:48 -0700
Alexei Starovoitov <ast@xxxxxx> wrote:

From: Alexei Starovoitov <ast@xxxxxxxxxx>

Fix all tracepoint arguments to pass structures (large and small) by reference
instead of by value.
Avoiding passing large structs by value is a good coding style.
Passing small structs sometimes is beneficial, but in all cases
it makes no difference vs readability of the code.
The subsequent patch enforces that all tracepoints args are either integers
or pointers and fit into 64-bit.

But some of these structures are used to force type checking, and are
just the same size as a number. That's why they don't have "struct" in
front of them. Like pmd_t. Will the subsequent patches really break if
the structure itself has one element that is of size long? Just seems
to add extra code to pass in an address to something that fits into a
single register.

yeah. C doesn't allow casting of 'struct s { u64 var };' into u64
without massive hacks and aliasing warnings by compiler.
CAST_TO_U64 macro in patch 7 will prevent tracepoint arguments to be
things like pmd_t. It's not perfect, but doing & of pmd_t variable
is imo clean enough as you can see in this patch.
The macro can be tweaked to do the cast like
*(sizeof(typeof(arg))*)&arg,
but there is no way to get rid of compiler warning.

--
To unsubscribe from this list: send the line "unsubscribe linux-api" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux