Subject: Re: [PATCH] net: export pkt_type_offset() helper

From: Daniel Borkmann <[email-masked]>
Date: Wed, 03 Sep 2014 08:19:50 +0200

On 09/03/2014 12:59 AM, Alexei Starovoitov wrote:
> On Wed, Sep 03, 2014 at 12:03:58AM +0400, Denis Kirjanov wrote:
>> Currently we have 2 pkt_type_offset functions doing
>> the same thing and spread across the architecture files.
>> Let's use the generic helper routine.
>
> that would be good cleanup.
> Please tag your subject as '[PATCH net-next]...'
>
>> Signed-off-by: Denis Kirjanov <[email-masked]>
>> Cc: Markos Chandras <[email-masked]>
>> Cc: Martin Schwidefsky <[email-masked]>
>> Cc: Daniel Borkmann <[email-masked]>
>> ---
>>   arch/mips/net/bpf_jit.c      | 21 ---------------------
>>   arch/s390/net/bpf_jit_comp.c | 38 ++++----------------------------------
>>   include/linux/filter.h       |  7 +++++++
>>   net/core/filter.c            |  7 +------
>>   4 files changed, 12 insertions(+), 61 deletions(-)
>>
>> diff --git a/arch/mips/net/bpf_jit.c b/arch/mips/net/bpf_jit.c
>> -#define PKT_TYPE_MAX 0xe0
>> -static int pkt_type_offset;
> ...
>> -}
>> -device_initcall(bpf_pkt_type_offset_init);
>
> may be make sense to optimize common case via initcall() as well
> instead of dropping it for s390?

I think that probably might not be a bad idea. pkt_type_offset
should be a __read_mostly candidate then. As we have things like
PTP classifier that is being loaded in core_initcall(), we might
need to initialize pkt_type_offset then via pure_initcall(),
for example. I think that should be doable, as it doesn't have
any dependencies elsewhere.

>> diff --git a/include/linux/filter.h b/include/linux/filter.h
>> index a5227ab..97e0549 100644
>> --- a/include/linux/filter.h
>> +++ b/include/linux/filter.h
>> @@ -424,6 +424,13 @@ static inline void *bpf_load_pointer(const struct sk_buff *skb, int k,
>>   	return bpf_internal_load_pointer_neg_helper(skb, k, size);
>>   }
>>
>> +#ifdef __BIG_ENDIAN_BITFIELD
>> +#define PKT_TYPE_MAX	(7 << 5)
>> +#else
>> +#define PKT_TYPE_MAX    7
>> +#endif
>
> these defines don't need to move. keep them in filter.c
>