From patchwork Fri Oct 25 18:46:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Pfaff X-Patchwork-Id: 1184396 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=ovn.org Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 470Ckf4gqqz9s4Y for ; Sat, 26 Oct 2019 05:46:34 +1100 (AEDT) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 582A4E1A; Fri, 25 Oct 2019 18:46:32 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id E4430B8A for ; Fri, 25 Oct 2019 18:46:31 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from relay9-d.mail.gandi.net (relay9-d.mail.gandi.net [217.70.183.199]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 1949389D for ; Fri, 25 Oct 2019 18:46:30 +0000 (UTC) X-Originating-IP: 75.54.222.30 Received: from sigfpe.attlocal.net (75-54-222-30.lightspeed.rdcyca.sbcglobal.net [75.54.222.30]) (Authenticated sender: blp@ovn.org) by relay9-d.mail.gandi.net (Postfix) with ESMTPSA id C1639FF806; Fri, 25 Oct 2019 18:46:27 +0000 (UTC) From: Ben Pfaff To: dev@openvswitch.org Date: Fri, 25 Oct 2019 11:46:24 -0700 Message-Id: <20191025184624.26278-1-blp@ovn.org> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: Ben Pfaff Subject: [ovs-dev] [PATCH] Avoid indeterminate statistics in offload implementations. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org A lot of the offload implementations didn't bother to initialize the statistics they were supposed to return. I don't know whether any of the callers actually use them, but it looked wrong. Found by inspection. Signed-off-by: Ben Pfaff Acked-by: Ilya Maximets --- lib/netdev-dummy.c | 10 ++++++++-- lib/netdev-offload-dpdk.c | 10 ++++++++-- lib/netdev-offload-tc.c | 5 ++++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c index 95e1a329a908..71df29184d9b 100644 --- a/lib/netdev-dummy.c +++ b/lib/netdev-dummy.c @@ -1434,7 +1434,7 @@ netdev_dummy_flow_put(struct netdev *netdev, struct match *match, struct nlattr *actions OVS_UNUSED, size_t actions_len OVS_UNUSED, const ovs_u128 *ufid, struct offload_info *info, - struct dpif_flow_stats *stats OVS_UNUSED) + struct dpif_flow_stats *stats) { struct netdev_dummy *dev = netdev_dummy_cast(netdev); struct offloaded_flow *off_flow; @@ -1476,12 +1476,15 @@ netdev_dummy_flow_put(struct netdev *netdev, struct match *match, ds_destroy(&ds); } + if (stats) { + memset(stats, 0, sizeof *stats); + } return 0; } static int netdev_dummy_flow_del(struct netdev *netdev, const ovs_u128 *ufid, - struct dpif_flow_stats *stats OVS_UNUSED) + struct dpif_flow_stats *stats) { struct netdev_dummy *dev = netdev_dummy_cast(netdev); struct offloaded_flow *off_flow; @@ -1521,6 +1524,9 @@ exit: ds_destroy(&ds); } + if (stats) { + memset(stats, 0, sizeof *stats); + } return error ? -1 : 0; } diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c index 01e900461adf..96794dc4dc8b 100644 --- a/lib/netdev-offload-dpdk.c +++ b/lib/netdev-offload-dpdk.c @@ -710,7 +710,7 @@ static int netdev_offload_dpdk_flow_put(struct netdev *netdev, struct match *match, struct nlattr *actions, size_t actions_len, const ovs_u128 *ufid, struct offload_info *info, - struct dpif_flow_stats *stats OVS_UNUSED) + struct dpif_flow_stats *stats) { struct rte_flow *rte_flow; int ret; @@ -732,13 +732,16 @@ netdev_offload_dpdk_flow_put(struct netdev *netdev, struct match *match, return ret; } + if (stats) { + memset(stats, 0, sizeof *stats); + } return netdev_offload_dpdk_add_flow(netdev, match, actions, actions_len, ufid, info); } static int netdev_offload_dpdk_flow_del(struct netdev *netdev, const ovs_u128 *ufid, - struct dpif_flow_stats *stats OVS_UNUSED) + struct dpif_flow_stats *stats) { struct rte_flow *rte_flow = ufid_to_rte_flow_find(ufid); @@ -746,6 +749,9 @@ netdev_offload_dpdk_flow_del(struct netdev *netdev, const ovs_u128 *ufid, return -1; } + if (stats) { + memset(stats, 0, sizeof *stats); + } return netdev_offload_dpdk_destroy_flow(netdev, ufid, rte_flow); } diff --git a/lib/netdev-offload-tc.c b/lib/netdev-offload-tc.c index f6d1abb2e695..c5b9cbdb2bfe 100644 --- a/lib/netdev-offload-tc.c +++ b/lib/netdev-offload-tc.c @@ -1143,7 +1143,7 @@ static int netdev_tc_flow_put(struct netdev *netdev, struct match *match, struct nlattr *actions, size_t actions_len, const ovs_u128 *ufid, struct offload_info *info, - struct dpif_flow_stats *stats OVS_UNUSED) + struct dpif_flow_stats *stats) { static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20); enum tc_qdisc_hook hook = get_tc_qdisc_hook(netdev); @@ -1448,6 +1448,9 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match, err = tc_replace_flower(ifindex, prio, handle, &flower, block_id, hook); if (!err) { + if (stats) { + memset(stats, 0, sizeof *stats); + } add_ufid_tc_mapping(ufid, flower.prio, flower.handle, netdev, ifindex); }