Hi Steffen, On Wed, May 3, 2017 at 3:05 AM, Linux Kernel Mailing List <linux-ker...@vger.kernel.org> wrote: > Web: > https://git.kernel.org/torvalds/c/9d389d7f84bbb3a294eb05f7dfe2076e291fc150 > Commit: 9d389d7f84bbb3a294eb05f7dfe2076e291fc150 > Parent: c7ef8f0c020ac43c8a692bf989017c06ab1fdf0f > Refname: refs/heads/master > Author: Steffen Klassert <steffen.klass...@secunet.com> > AuthorDate: Fri Apr 14 10:05:44 2017 +0200 > Committer: Steffen Klassert <steffen.klass...@secunet.com> > CommitDate: Fri Apr 14 10:05:44 2017 +0200 > > xfrm: Add a xfrm type offload. > > We add a struct xfrm_type_offload so that we have the offloaded > codepath separated to the non offloaded codepath. With this the > non offloade and the offloaded codepath can coexist. > > Signed-off-by: Steffen Klassert <steffen.klass...@secunet.com> > --- > include/net/xfrm.h | 28 +++++++++++++++----- > net/xfrm/xfrm_state.c | 73 > +++++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 95 insertions(+), 6 deletions(-) > > diff --git a/include/net/xfrm.h b/include/net/xfrm.h > index 9e3dc7b81a4d..159342f3e72b 100644 > --- a/include/net/xfrm.h > +++ b/include/net/xfrm.h
> @@ -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? Perhaps type_offload_map[] (and type_map[] while at it) can be allocated at runtime instead, when the feature is used? Thanks! Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds