Re: xfrm4_state_afinfo size increase (was: Re: xfrm: Add a xfrm type offload.)

From: Steffen Klassert
Date: Thu May 04 2017 - 05:19:45 EST


On Thu, May 04, 2017 at 10:08:07AM +0200, Geert Uytterhoeven wrote:
> > @@ -314,12 +316,14 @@ void km_state_expired(struct xfrm_state *x, int hard, u32 portid);
> > int __xfrm_state_delete(struct xfrm_state *x);
> >
> > struct xfrm_state_afinfo {
> > - unsigned int family;
> > - unsigned int proto;
> > - __be16 eth_proto;
> > - struct module *owner;
> > - const struct xfrm_type *type_map[IPPROTO_MAX];
> > - struct xfrm_mode *mode_map[XFRM_MODE_MAX];
> > + unsigned int family;
> > + unsigned int proto;
> > + __be16 eth_proto;
> > + struct module *owner;
> > + const struct xfrm_type *type_map[IPPROTO_MAX];
> > + const struct xfrm_type_offload *type_offload_map[IPPROTO_MAX];
> > + struct xfrm_mode *mode_map[XFRM_MODE_MAX];
>
> Bloat-o-meter reports the addition of xfrm_state_afinfo.type_offload_map[]
> increases the static kernel size by 1 KiB on 32-bit platforms (double on 64-bit
> platforms):
>
> function old new delta
> xfrm4_state_afinfo 1102 2126 +1024
>
> While IPPROTO_MAX = 256, the defined list of IP protocols is spread
> sparsely over the number space, but I assume all values may occur?

Actually no, I think we could boil this down to less than ten
really used protocols by mapping the IPPROTO numbers to some
XFRMPROTO numbers.

I'll look into this.

Thanks!