On 12 Sep 2019, at 10:39, Ilya Maximets wrote:

On 11.09.2019 16:20, Eelco Chaudron wrote:
Currently, OVS does not register and therefore not handle the
interface reset event from the DPDK framework. This would cause a
problem in cases where a VF is used as an interface, and its
configuration changes.

As an example in the following scenario the MAC change is not
detected/acted upon until OVS is restarted without the patch applied:

  $ echo 1 > /sys/bus/pci/devices/0000:05:00.1/sriov_numvfs
  $ ovs-vsctl add-port ovs_pvp_br0 dpdk0 -- \
            set Interface dpdk0 type=dpdk -- \
            set Interface dpdk0 options:dpdk-devargs=0000:05:0a.0

  $ ip link set p5p2 vf 0 mac 52:54:00:92:d3:33

Signed-off-by: Eelco Chaudron <echau...@redhat.com>
---

<snip>

@@ -4180,13 +4223,19 @@ netdev_dpdk_reconfigure(struct netdev *netdev)
         && dev->rxq_size == dev->requested_rxq_size
         && dev->txq_size == dev->requested_txq_size
         && dev->socket_id == dev->requested_socket_id
-        && dev->started) {
+        && dev->started && !dev->reset_needed) {
         /* Reconfiguration is unnecessary */

         goto out;
     }

-    rte_eth_dev_stop(dev->port_id);
+    if (dev->reset_needed) {
+        rte_eth_dev_reset(dev->port_id);

Thinking more about the change and looking at flow control configuration,
it seems that on reset we'll lost configurations done in set_config().
Device reset should return it to initial state, i.e. all the default settings,
but set_config() will not be called after that.
I know, that VFs commonly doesn't support flow control, but if we'll add like
real configuration of MAC address, it will be lost too.

What do you think?

Doesn’t the full bridge run sequence take care of this?

So in callback we do netdev_request_reconfigure() which triggers the following sequence…

bridge_run__()
 ...
   dpif_netdev_run()
     ...
       reconfigure_datapath()
         ...
           netdev_dpdk_reconfigure()

But than also it will call in the next run

bridge_run()
 ...
   bridge_delete_or_reconfigure_ports()
     ...
        netdev_set_config()
          netdev_dpdk_set_config()


Or do I miss something?


BTW, there is a discussion about flow control configuration:
https://patchwork.ozlabs.org/patch/1159689/

+        dev->reset_needed = false;
+    } else {
+        rte_eth_dev_stop(dev->port_id);
+    }
+
     dev->started = false;

     err = netdev_dpdk_mempool_configure(dev);
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to