aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/interface
diff options
context:
space:
mode:
Diffstat (limited to 'src/vnet/interface')
-rw-r--r--src/vnet/interface/runtime.c1
-rw-r--r--src/vnet/interface/tx_queue.c16
2 files changed, 12 insertions, 5 deletions
diff --git a/src/vnet/interface/runtime.c b/src/vnet/interface/runtime.c
index e899d7ab9c8..462f7bbfba7 100644
--- a/src/vnet/interface/runtime.c
+++ b/src/vnet/interface/runtime.c
@@ -196,7 +196,6 @@ vnet_hw_if_update_runtime_data (vnet_main_t *vnm, u32 hw_if_index)
something_changed_on_tx = 1;
rt->frame.queue_id = txq->queue_id;
rt->frame.shared_queue = txq->shared_queue;
- rt->frame.shared_queue = n_threads > 1 ? 1 : 0;
rt->n_threads = n_threads;
}
}
diff --git a/src/vnet/interface/tx_queue.c b/src/vnet/interface/tx_queue.c
index 3041a58414d..8a6cd9da304 100644
--- a/src/vnet/interface/tx_queue.c
+++ b/src/vnet/interface/tx_queue.c
@@ -112,8 +112,12 @@ vnet_hw_if_tx_queue_assign_thread (vnet_main_t *vnm, u32 queue_index,
vnet_hw_if_tx_queue_t *txq = vnet_hw_if_get_tx_queue (vnm, queue_index);
vnet_hw_interface_t *hi = vnet_get_hw_interface (vnm, txq->hw_if_index);
txq->threads = clib_bitmap_set (txq->threads, thread_index, 1);
- log_debug ("assign_thread: interface %v queue-id %u thread %u", hi->name,
- txq->queue_id, thread_index);
+ if (clib_bitmap_count_set_bits (txq->threads) > 1)
+ txq->shared_queue = 1;
+ log_debug (
+ "assign_thread: interface %v queue-id %u thread %u queue-shared %s",
+ hi->name, txq->queue_id, thread_index,
+ (txq->shared_queue == 1 ? "yes" : "no"));
}
void
@@ -123,6 +127,10 @@ vnet_hw_if_tx_queue_unassign_thread (vnet_main_t *vnm, u32 queue_index,
vnet_hw_if_tx_queue_t *txq = vnet_hw_if_get_tx_queue (vnm, queue_index);
vnet_hw_interface_t *hi = vnet_get_hw_interface (vnm, txq->hw_if_index);
txq->threads = clib_bitmap_set (txq->threads, thread_index, 0);
- log_debug ("unassign_thread: interface %v queue-id %u thread %u", hi->name,
- txq->queue_id, thread_index);
+ if (clib_bitmap_count_set_bits (txq->threads) < 2)
+ txq->shared_queue = 0;
+ log_debug (
+ "unassign_thread: interface %v queue-id %u thread %u queue-shared %s",
+ hi->name, txq->queue_id, thread_index,
+ (txq->shared_queue == 1 ? "yes" : "no"));
}