Re: [PATCH net-next v3 8/9] net: filter: rework/optimize internal BPF interpreter's instruction set
From: Alexei Starovoitov <hidden>
Date: 2014-03-27 20:30:49
Also in:
lkml
From: Alexei Starovoitov <hidden>
Date: 2014-03-27 20:30:49
Also in:
lkml
On Thu, Mar 27, 2014 at 12:23 PM, David Miller [off-list ref] wrote:
From: Daniel Borkmann <redacted> Date: Wed, 26 Mar 2014 22:06:09 +0100quoted
- Adds swab insns for 32/64-bitI don't like this. You don't want a swab instruction, you want "endian X to endian Y". Just like we have "cpu_to_le32()", "le32_to_cpu()" et al. in the kernel. That way the user can be completely oblivious as to the endianness of the cpu it's running on.
Agreed. If we want to expose ebpf instruction set to the userspace as-is then it completely makes sense. The reason we picked swab style is two fold: 1. swab32/64 maps as-is to native cpu instructions during jit. 2. assumption was that new_socket_filters/tracing_filters/ovs_filters will be written in C and will use standard macro ntohl() that will be expanded to __builtin_swap or nop by gcc/llvm, so users don't need to worry about underlying endianness while writing filters in C.
So if you ask for a "to little endian" swab, if the chip is little-endian then no code needs to be emitted at all, it's a nop. There is zero reason for the BPF program emitted by userspace to be dependant upon the cpu endianness.
Agree. with cpu_to_le and cpu_to_be instructions the programs written in C and written directly in ebpf won't need to worry about endianness. Best of both. We'll fix and resend. Thanks Alexei