summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBaowen Zheng <baowen.zheng@corigine.com>2021-06-29 10:22:11 +0300
committerDavid S. Miller <davem@davemloft.net>2021-07-01 21:13:10 +0300
commitb18114476a1432ad1db5d5605bc8cd131814d264 (patch)
tree39e5b58bd822e1f4b0cc1838456bc7852f9e54bb
parenta3609ac24c18947737f5bc1746b8735814c521d1 (diff)
downloadlinux-b18114476a1432ad1db5d5605bc8cd131814d264.tar.xz
openvswitch: Optimize operation for key comparison
In the current implement when comparing two flow keys, we will return result after comparing the whole key from start to end. In our optimization, we will return result in the first none-zero comparison, then we will improve the flow table looking up efficiency. Signed-off-by: Baowen Zheng <baowen.zheng@corigine.com> Signed-off-by: Louis Peens <louis.peens@corigine.com> Signed-off-by: Simon Horman <simon.horman@corigine.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/openvswitch/flow_table.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/net/openvswitch/flow_table.c b/net/openvswitch/flow_table.c
index c89c8da99f1a..d4a2db0b2299 100644
--- a/net/openvswitch/flow_table.c
+++ b/net/openvswitch/flow_table.c
@@ -670,13 +670,13 @@ static bool cmp_key(const struct sw_flow_key *key1,
{
const long *cp1 = (const long *)((const u8 *)key1 + key_start);
const long *cp2 = (const long *)((const u8 *)key2 + key_start);
- long diffs = 0;
int i;
for (i = key_start; i < key_end; i += sizeof(long))
- diffs |= *cp1++ ^ *cp2++;
+ if (*cp1++ ^ *cp2++)
+ return false;
- return diffs == 0;
+ return true;
}
static bool flow_cmp_masked_key(const struct sw_flow *flow,