summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOphir Munk <ophirmu@mellanox.com>2019-12-08 14:29:14 +0000
committerIlya Maximets <i.maximets@ovn.org>2019-12-08 15:48:23 +0100
commit1061dc7c85e780269697f7f8980f3b25cd3b1278 (patch)
treefbdd1cf1202a8dec8dda4890cf68e838ee1e3998
parent164413156cf94d0f4dd1971cf0cc820f8b86055b (diff)
downloadopenvswitch-1061dc7c85e780269697f7f8980f3b25cd3b1278.tar.gz
dpif-netdev: Retrieve dpif_class from struct dp_netdev.
In case a pmd pointer (struct dp_netdev_pmd_thread *) needs to retrieve the dpif_class it points at - it can access it as: pmd->dp->class. A second option is to access it as: pmd->dp->dpif->dpif_class. The first option is safe since there is one dp netdev with a constant pointer to the dpif class. The second option is not safe since the pointer pmd->dp->dpif may be changed under the hood, for example, in case there is a call to dpif_open(). One such scenario is when a netdev bridge is running while dumping flows statistics with dpctl in parallel: ovs-appctl dpctl/dump-flows. This commit makes usage of the first safe option instead of the second option. Fixes: 30115809da2e ("dpif-netdev: Use netdev-offload API for port lookup while offloading") Signed-off-by: Ophir Munk <ophirmu@mellanox.com> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
-rw-r--r--lib/dpif-netdev.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 1e5493615..7ebf4ef87 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -2269,7 +2269,7 @@ mark_to_flow_disassociate(struct dp_netdev_pmd_thread *pmd,
struct netdev *port;
odp_port_t in_port = flow->flow.in_port.odp_port;
- port = netdev_ports_get(in_port, pmd->dp->dpif->dpif_class);
+ port = netdev_ports_get(in_port, pmd->dp->class);
if (port) {
ret = netdev_flow_del(port, &flow->mega_ufid, NULL);
netdev_close(port);
@@ -2410,7 +2410,7 @@ dp_netdev_flow_offload_put(struct dp_flow_offload_item *offload)
}
info.flow_mark = mark;
- port = netdev_ports_get(in_port, pmd->dp->dpif->dpif_class);
+ port = netdev_ports_get(in_port, pmd->dp->class);
if (!port || netdev_vport_is_vport_class(port->netdev_class)) {
netdev_close(port);
goto err_free;