From cf751ec70df21affb19c77b2c51e3c231b8202ad Mon Sep 17 00:00:00 2001 From: Mohsin KAZMI Date: Wed, 18 Jan 2017 11:59:45 +0100 Subject: af_packet: multithreading support This patch adds multithreading support for af_packet interfaces. Change-Id: Ief5d1117e7ffeaa59dbc2831e583d5d8e8d4fa7a Signed-off-by: Mohsin KAZMI --- src/vnet/devices/af_packet/device.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/vnet/devices/af_packet/device.c') diff --git a/src/vnet/devices/af_packet/device.c b/src/vnet/devices/af_packet/device.c index 1fb4000f..e3bf9bbc 100644 --- a/src/vnet/devices/af_packet/device.c +++ b/src/vnet/devices/af_packet/device.c @@ -92,6 +92,12 @@ af_packet_interface_tx (vlib_main_t * vm, struct tpacket2_hdr *tph; u32 frame_not_ready = 0; + if (PREDICT_FALSE (apif->lockp != 0)) + { + while (__sync_lock_test_and_set (apif->lockp, 1)) + ; + } + while (n_left > 0) { u32 len; @@ -152,6 +158,9 @@ af_packet_interface_tx (vlib_main_t * vm, } } + if (PREDICT_FALSE (apif->lockp != 0)) + *apif->lockp = 0; + if (PREDICT_FALSE (frame_not_ready)) vlib_error_count (vm, node->node_index, AF_PACKET_TX_ERROR_FRAME_NOT_READY, frame_not_ready); -- cgit 1.2.3-korg