aboutsummaryrefslogtreecommitdiff
path: root/datapath
diff options
context:
space:
mode:
authorJesse Gross <jesse@nicira.com>2013-06-20 17:08:09 -0700
committerJesse Gross <jesse@nicira.com>2013-06-21 16:21:07 -0700
commit944aa343cdf7838a95ff99d265ce421fa1a22dc0 (patch)
treeec1670f07f90ed7cb0b9df22d53b212928814388 /datapath
parentb5889101243ef5dc8d72235fcd6a4ba6193da71d (diff)
datapath: Use a single attribute array for parsing values and masks.
When parsing flow Netlink messages we currently have arrays to hold the attribute pointers for both values and masks. This results in a large stack, which some compilers warn about. It's not actually necessary to have both arrays at the same time, so we can collapse this to a single array. Reported-by: Pravin B Shelar <pshelar@nicira.com> Signed-off-by: Jesse Gross <jesse@nicira.com>
Diffstat (limited to 'datapath')
-rw-r--r--datapath/flow.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/datapath/flow.c b/datapath/flow.c
index 9149e436..72aa664b 100644
--- a/datapath/flow.c
+++ b/datapath/flow.c
@@ -1477,7 +1477,6 @@ int ovs_match_from_nlattrs(struct sw_flow_match *match,
const struct nlattr *mask)
{
const struct nlattr *a[OVS_KEY_ATTR_MAX + 1];
- const struct nlattr *m[OVS_KEY_ATTR_MAX + 1];
const struct nlattr *encap;
u64 key_attrs = 0;
u64 mask_attrs = 0;
@@ -1514,19 +1513,19 @@ int ovs_match_from_nlattrs(struct sw_flow_match *match,
return err;
if (mask) {
- err = parse_flow_mask_nlattrs(mask, m, &mask_attrs);
+ err = parse_flow_mask_nlattrs(mask, a, &mask_attrs);
if (err)
return err;
if ((mask_attrs & 1ULL << OVS_KEY_ATTR_ENCAP) && encap_valid) {
__be16 eth_type = 0;
- if (m[OVS_KEY_ATTR_ETHERTYPE])
- eth_type = nla_get_be16(m[OVS_KEY_ATTR_ETHERTYPE]);
+ if (a[OVS_KEY_ATTR_ETHERTYPE])
+ eth_type = nla_get_be16(a[OVS_KEY_ATTR_ETHERTYPE]);
if (eth_type == htons(0xffff)) {
mask_attrs &= ~(1ULL << OVS_KEY_ATTR_ETHERTYPE);
- encap = m[OVS_KEY_ATTR_ENCAP];
- err = parse_flow_mask_nlattrs(encap, m, &mask_attrs);
+ encap = a[OVS_KEY_ATTR_ENCAP];
+ err = parse_flow_mask_nlattrs(encap, a, &mask_attrs);
} else
err = -EINVAL;
@@ -1534,7 +1533,7 @@ int ovs_match_from_nlattrs(struct sw_flow_match *match,
return err;
}
- err = ovs_key_from_nlattrs(match, mask_attrs, m, true);
+ err = ovs_key_from_nlattrs(match, mask_attrs, a, true);
if (err)
return err;
} else {