关于这段注释的说明
/* We can’t allow the packet batching in the next loop to execute *
the actions. Otherwise, if there are any slow path actions, * we’ll
send the packet up twice. */
handle_packet_upcall()->dp_netdev_execute_actions()
如果在 handle_packet_upcall()
里不调用 dp_netdev_execute_actions()
的话, 那么 add flow 之后, 一旦 flow 里有 slow path action 的话, 后面这个 pkt 就又会 被 upcall 一次.
在这里调用的时候, 已经持有了 dp->upcall_rwlock
锁, 所以走到 dp_execute_cb()
case OVS_ACTION_ATTR_USERSPACE
的时候, 因为拿不到 dp->upcall_rwlock
就避免了重复的 upcall 了