RE: [PATCH 0/7] minmax: reduce compilation time

From: David Laight
Date: Sat Jul 27 2024 - 04:09:37 EST


...
> and it will spit out
>
> Longest line is drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c:1136 (2346kB)
> ' ((((((pkt_size) + __builtin_choose_expr((sizeof(int) ==
> sizeof(*(8 ? ((void *)((long)((__builtin_...'
>
> to tell me that we have that insane 2.2 *megabyte* line due to the
> MVPP2_SKB_HEADROOM thing, and I should apply this patch:
>
> -#define MVPP2_SKB_HEADROOM min(max(XDP_PACKET_HEADROOM, NET_SKB_PAD), 224)
> +#define MVPP2_SKB_HEADROOM
> MIN_T(int,MAX_T(int,XDP_PACKET_HEADROOM, NET_SKB_PAD), 224)
>
> to fix it.

Or (if I've got is right):
#define MVPP2_SKB_HEADROOM clamp(XDP_PACKET_HEADROOM, NET_SKB_PAD, 224)

Hmmm...
I've found:
#define XDP_PACKET_HEADROOM 256
#define NET_SKB_PAD max(32, L1_CACHE_BYTES)
I'd bet that some architecture even has a non-constant L1_CACHE_BYTES.

But the 256 means the headroom is always 224 (whatever that limit is related to).

It is definitely worth freeing up MIN() and MAX() for:
#define MIN(x, y) ( \
BUILD_BUG_ON_ZERO(__is_constexpr((x) + (y)) + ((x) < (y) ? (x) : (y)))
which is then usable for static initialisers.
Just assuming that no one is silly enough to get a negative constant
compared to an unsigned value.

David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)