summaryrefslogtreecommitdiffstats
path: root/net/openvswitch
diff options
context:
space:
mode:
authorJarno Rajahalme <jarno@ovn.org>2017-02-09 20:21:55 +0100
committerDavid S. Miller <davem@davemloft.net>2017-02-10 04:59:34 +0100
commitcb80d58fae76d8ea93555149b2b16e19b89a1f4f (patch)
tree9bbc36a568cbbf89d80051d26a9e6f174d3c46e2 /net/openvswitch
parentopenvswitch: Do not trigger events for unconfirmed connections. (diff)
downloadlinux-cb80d58fae76d8ea93555149b2b16e19b89a1f4f.tar.xz
linux-cb80d58fae76d8ea93555149b2b16e19b89a1f4f.zip
openvswitch: Unionize ovs_key_ct_label with a u32 array.
Make the array of labels in struct ovs_key_ct_label an union, adding a u32 array of the same byte size as the existing u8 array. It is faster to loop through the labels 32 bits at the time, which is also the alignment of netlink attributes. Signed-off-by: Jarno Rajahalme <jarno@ovn.org> Acked-by: Joe Stringer <joe@ovn.org> Acked-by: Pravin B Shelar <pshelar@ovn.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/openvswitch')
-rw-r--r--net/openvswitch/conntrack.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c
index a6ff374d57d3..f23934ccce20 100644
--- a/net/openvswitch/conntrack.c
+++ b/net/openvswitch/conntrack.c
@@ -281,20 +281,21 @@ static int ovs_ct_set_labels(struct sk_buff *skb, struct sw_flow_key *key,
/* Triggers a change event, which makes sense only for
* confirmed connections.
*/
- int err = nf_connlabels_replace(ct, (u32 *)labels, (u32 *)mask,
- OVS_CT_LABELS_LEN / sizeof(u32));
+ int err = nf_connlabels_replace(ct, labels->ct_labels_32,
+ mask->ct_labels_32,
+ OVS_CT_LABELS_LEN_32);
if (err)
return err;
} else {
u32 *dst = (u32 *)cl->bits;
- const u32 *msk = (const u32 *)mask->ct_labels;
- const u32 *lbl = (const u32 *)labels->ct_labels;
+ const u32 *msk = mask->ct_labels_32;
+ const u32 *lbl = labels->ct_labels_32;
int i;
/* No-one else has access to the non-confirmed entry, copy
* labels over, keeping any bits we are not explicitly setting.
*/
- for (i = 0; i < OVS_CT_LABELS_LEN / sizeof(u32); i++)
+ for (i = 0; i < OVS_CT_LABELS_LEN_32; i++)
dst[i] = (dst[i] & ~msk[i]) | (lbl[i] & msk[i]);
}
@@ -866,8 +867,8 @@ static bool labels_nonzero(const struct ovs_key_ct_labels *labels)
{
size_t i;
- for (i = 0; i < sizeof(*labels); i++)
- if (labels->ct_labels[i])
+ for (i = 0; i < OVS_CT_LABELS_LEN_32; i++)
+ if (labels->ct_labels_32[i])
return true;
return false;