From: Jesse Gross Date: Fri, 21 Jun 2013 00:08:09 +0000 (-0700) Subject: datapath: Use a single attribute array for parsing values and masks. X-Git-Tag: sliver-openvswitch-1.10.90-3~6^2~74 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=1a02b7689b01db7fff2cda87ac311389ff524283;p=sliver-openvswitch.git 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 Signed-off-by: Jesse Gross --- diff --git a/datapath/flow.c b/datapath/flow.c index 79d5d495a..3a7bc9b47 100644 --- a/datapath/flow.c +++ b/datapath/flow.c @@ -1479,7 +1479,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; @@ -1516,19 +1515,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; @@ -1536,7 +1535,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 {