mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
xfrm: store xfrm_mode directly, not its address
This structure is now only 4 bytes, so its more efficient to cache a copy rather than its address. No significant size difference in allmodconfig vmlinux. With non-modular kernel that has all XFRM options enabled, this series reduces vmlinux image size by ~11kb. All xfrm_mode indirections are gone and all modes are built-in. before (ipsec-next master): text data bss dec filename 21071494 7233140 11104324 39408958 vmlinux.master after this series: 21066448 7226772 11104324 39397544 vmlinux.patched With allmodconfig kernel, the size increase is only 362 bytes, even all the xfrm config options removed in this series are modular. before: text data bss dec filename 15731286 6936912 4046908 26715106 vmlinux.master after this series: 15731492 6937068 4046908 26715468 vmlinux Signed-off-by: Florian Westphal <fw@strlen.de> Reviewed-by: Sabrina Dubroca <sd@queasysnail.net> Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
This commit is contained in:
parent
4c145dce26
commit
c9500d7b7d
13 changed files with 55 additions and 55 deletions
|
@ -334,7 +334,7 @@ static int xfrm4_prepare_output(struct xfrm_state *x, struct sk_buff *skb)
|
|||
IPCB(skb)->flags |= IPSKB_XFRM_TUNNEL_SIZE;
|
||||
skb->protocol = htons(ETH_P_IP);
|
||||
|
||||
switch (x->outer_mode->encap) {
|
||||
switch (x->outer_mode.encap) {
|
||||
case XFRM_MODE_BEET:
|
||||
return xfrm4_beet_encap_add(x, skb);
|
||||
case XFRM_MODE_TUNNEL:
|
||||
|
@ -357,7 +357,7 @@ static int xfrm6_prepare_output(struct xfrm_state *x, struct sk_buff *skb)
|
|||
skb->ignore_df = 1;
|
||||
skb->protocol = htons(ETH_P_IPV6);
|
||||
|
||||
switch (x->outer_mode->encap) {
|
||||
switch (x->outer_mode.encap) {
|
||||
case XFRM_MODE_BEET:
|
||||
return xfrm6_beet_encap_add(x, skb);
|
||||
case XFRM_MODE_TUNNEL:
|
||||
|
@ -373,22 +373,22 @@ static int xfrm6_prepare_output(struct xfrm_state *x, struct sk_buff *skb)
|
|||
|
||||
static int xfrm_outer_mode_output(struct xfrm_state *x, struct sk_buff *skb)
|
||||
{
|
||||
switch (x->outer_mode->encap) {
|
||||
switch (x->outer_mode.encap) {
|
||||
case XFRM_MODE_BEET:
|
||||
case XFRM_MODE_TUNNEL:
|
||||
if (x->outer_mode->family == AF_INET)
|
||||
if (x->outer_mode.family == AF_INET)
|
||||
return xfrm4_prepare_output(x, skb);
|
||||
if (x->outer_mode->family == AF_INET6)
|
||||
if (x->outer_mode.family == AF_INET6)
|
||||
return xfrm6_prepare_output(x, skb);
|
||||
break;
|
||||
case XFRM_MODE_TRANSPORT:
|
||||
if (x->outer_mode->family == AF_INET)
|
||||
if (x->outer_mode.family == AF_INET)
|
||||
return xfrm4_transport_output(x, skb);
|
||||
if (x->outer_mode->family == AF_INET6)
|
||||
if (x->outer_mode.family == AF_INET6)
|
||||
return xfrm6_transport_output(x, skb);
|
||||
break;
|
||||
case XFRM_MODE_ROUTEOPTIMIZATION:
|
||||
if (x->outer_mode->family == AF_INET6)
|
||||
if (x->outer_mode.family == AF_INET6)
|
||||
return xfrm6_ro_output(x, skb);
|
||||
WARN_ON_ONCE(1);
|
||||
break;
|
||||
|
@ -489,7 +489,7 @@ resume:
|
|||
}
|
||||
skb_dst_set(skb, dst);
|
||||
x = dst->xfrm;
|
||||
} while (x && !(x->outer_mode->flags & XFRM_MODE_FLAG_TUNNEL));
|
||||
} while (x && !(x->outer_mode.flags & XFRM_MODE_FLAG_TUNNEL));
|
||||
|
||||
return 0;
|
||||
|
||||
|
@ -626,7 +626,7 @@ static int xfrm_inner_extract_output(struct xfrm_state *x, struct sk_buff *skb)
|
|||
inner_mode = xfrm_ip2inner_mode(x,
|
||||
xfrm_af2proto(skb_dst(skb)->ops->family));
|
||||
else
|
||||
inner_mode = x->inner_mode;
|
||||
inner_mode = &x->inner_mode;
|
||||
|
||||
if (inner_mode == NULL)
|
||||
return -EAFNOSUPPORT;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue