Skip to content

Commit

Permalink
dpif-netdev: Retrieve dpif_class from struct dp_netdev
Browse files Browse the repository at this point in the history
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: 3011580 ("dpif-netdev: Use netdev-offload API for port lookup while offloading")
Signed-off-by: Ophir Munk <ophirmu@mellanox.com>
Signed-off-by: 0-day Robot <robot@bytheb.org>
  • Loading branch information
OphirMunk authored and ovsrobot committed Dec 8, 2019
1 parent 1644131 commit c6c435a
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions lib/dpif-netdev.c
Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit c6c435a

Please sign in to comment.