X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fdevices%2Fvirtio%2Fvhost_user_output.c;h=dab8fa5fb3b5a8c23b53dd48e5d9717fd496c939;hb=2f6d7bb93c157b874efb79a2d1583a4c368bf89a;hp=9c65f249b4b88294e2b56e219ea21486b1495a2a;hpb=dd8e7d0e512425ec05de652a3c71028561e0f40a;p=vpp.git diff --git a/src/vnet/devices/virtio/vhost_user_output.c b/src/vnet/devices/virtio/vhost_user_output.c index 9c65f249b4b..dab8fa5fb3b 100644 --- a/src/vnet/devices/virtio/vhost_user_output.c +++ b/src/vnet/devices/virtio/vhost_user_output.c @@ -100,14 +100,17 @@ vhost_user_name_renumber (vnet_hw_interface_t * hi, u32 new_dev_instance) { // FIXME: check if the new dev instance is already used vhost_user_main_t *vum = &vhost_user_main; + vhost_user_intf_t *vui = pool_elt_at_index (vum->vhost_user_interfaces, + hi->dev_instance); + vec_validate_init_empty (vum->show_dev_instance_by_real_dev_instance, hi->dev_instance, ~0); vum->show_dev_instance_by_real_dev_instance[hi->dev_instance] = new_dev_instance; - DBG_SOCK ("renumbered vhost-user interface dev_instance %d to %d", - hi->dev_instance, new_dev_instance); + vu_log_debug (vui, "renumbered vhost-user interface dev_instance %d to %d", + hi->dev_instance, new_dev_instance); return 0; } @@ -119,7 +122,7 @@ vhost_user_name_renumber (vnet_hw_interface_t * hi, u32 new_dev_instance) static_always_inline int vhost_user_vring_try_lock (vhost_user_intf_t * vui, u32 qid) { - return __sync_lock_test_and_set (vui->vring_locks[qid], 1); + return clib_atomic_test_and_set (vui->vring_locks[qid]); } /** @@ -138,7 +141,7 @@ vhost_user_vring_lock (vhost_user_intf_t * vui, u32 qid) static_always_inline void vhost_user_vring_unlock (vhost_user_intf_t * vui, u32 qid) { - *vui->vring_locks[qid] = 0; + clib_atomic_release (vui->vring_locks[qid]); } static_always_inline void @@ -248,7 +251,7 @@ VNET_DEVICE_CLASS_TX_FN (vhost_user_device_class) (vlib_main_t * vm, goto done3; } - if (PREDICT_FALSE (!vui->is_up)) + if (PREDICT_FALSE (!vui->is_ready)) { error = VHOST_USER_TX_FUNC_ERROR_NOT_READY; goto done3; @@ -605,8 +608,8 @@ vhost_user_interface_rx_mode_change (vnet_main_t * vnm, u32 hw_if_index, txvq->used->flags = 0; else { - clib_warning ("BUG: unhandled mode %d changed for if %d queue %d", mode, - hw_if_index, qid); + vu_log_err (vui, "unhandled mode %d changed for if %d queue %d", mode, + hw_if_index, qid); return clib_error_return (0, "unsupported"); } @@ -621,16 +624,21 @@ vhost_user_interface_admin_up_down (vnet_main_t * vnm, u32 hw_if_index, vhost_user_main_t *vum = &vhost_user_main; vhost_user_intf_t *vui = pool_elt_at_index (vum->vhost_user_interfaces, hif->dev_instance); - u32 hw_flags = 0; + u8 link_old, link_new; + + link_old = vui_is_link_up (vui); + vui->admin_up = (flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP) != 0; - hw_flags = vui->admin_up ? VNET_HW_INTERFACE_FLAG_LINK_UP : 0; - vnet_hw_interface_set_flags (vnm, vui->hw_if_index, hw_flags); + link_new = vui_is_link_up (vui); + + if (link_old != link_new) + vnet_hw_interface_set_flags (vnm, vui->hw_if_index, link_new ? + VNET_HW_INTERFACE_FLAG_LINK_UP : 0); return /* no error */ 0; } -#ifndef CLIB_MARCH_VARIANT /* *INDENT-OFF* */ VNET_DEVICE_CLASS (vhost_user_device_class) = { .name = "vhost-user", @@ -643,8 +651,6 @@ VNET_DEVICE_CLASS (vhost_user_device_class) = { .format_tx_trace = format_vhost_trace, }; -#endif - /* *INDENT-ON* */ /*