2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-31 06:15:47 +00:00

netdev-dpdk: Put cuse thread into quiescent state.

ovsrcu_synchronize() is used when setting virtio_dev to NULL.
This results in an ovsrcu_quiesce_end() call which means the
cuse thread may not go into quiescent state again for an
indefinite time. Add an ovsrcu_quiesce_start() call to prevent
this.

Signed-off-by: Kevin Traynor <kevin.traynor@intel.com>
Acked-by: Pravin B Shelar <pshelar@nicira.com>
This commit is contained in:
Kevin Traynor
2015-03-27 11:06:57 -07:00
committed by Pravin B Shelar
parent a19083996c
commit 618f44f7a4

View File

@@ -1586,6 +1586,11 @@ destroy_device(volatile struct virtio_net *dev)
* setting the virtio_dev to NULL.
*/
ovsrcu_synchronize();
/*
* As call to ovsrcu_synchronize() will end the quiescent state,
* put thread back into quiescent state before returning.
*/
ovsrcu_quiesce_start();
}
}
ovs_mutex_unlock(&dpdk_mutex);
@@ -1614,6 +1619,8 @@ static void *
start_cuse_session_loop(void *dummy OVS_UNUSED)
{
pthread_detach(pthread_self());
/* Put the cuse thread into quiescent state. */
ovsrcu_quiesce_start();
rte_vhost_driver_session_start();
return NULL;
}
@@ -1621,7 +1628,6 @@ start_cuse_session_loop(void *dummy OVS_UNUSED)
static int
dpdk_vhost_class_init(void)
{
pthread_t thread;
int err = -1;
rte_vhost_driver_callback_register(&virtio_net_device_ops);
@@ -1637,9 +1643,8 @@ dpdk_vhost_class_init(void)
return -1;
}
/* start_cuse_session_loop blocks OVS RCU quiescent state, so directly use
* pthread API. */
return pthread_create(&thread, NULL, start_cuse_session_loop, NULL);
ovs_thread_create("cuse_thread", start_cuse_session_loop, NULL);
return 0;
}
static void