ASSERT (vui->virtio_net_hdr_sz < VLIB_BUFFER_PRE_DATA_SIZE);
vnet_hw_interface_set_flags (vnm, vui->hw_if_index, 0);
vui->is_ready = 0;
+ vhost_user_update_iface_state (vui);
break;
case VHOST_USER_SET_MEM_TABLE:
vui->nregions++;
}
+
+ /*
+ * Re-compute desc, used, and avail descriptor table if vring address
+ * is set.
+ */
+ for (q = 0; q < VHOST_VRING_MAX_N; q++)
+ {
+ if (vui->vrings[q].desc_user_addr &&
+ vui->vrings[q].used_user_addr && vui->vrings[q].avail_user_addr)
+ {
+ vui->vrings[q].desc =
+ map_user_mem (vui, vui->vrings[q].desc_user_addr);
+ vui->vrings[q].used =
+ map_user_mem (vui, vui->vrings[q].used_user_addr);
+ vui->vrings[q].avail =
+ map_user_mem (vui, vui->vrings[q].avail_user_addr);
+ }
+ }
vlib_worker_thread_barrier_release (vm);
break;
goto close_socket;
}
+ vui->vrings[msg.state.index].desc_user_addr = msg.addr.desc_user_addr;
+ vui->vrings[msg.state.index].used_user_addr = msg.addr.used_user_addr;
+ vui->vrings[msg.state.index].avail_user_addr = msg.addr.avail_user_addr;
+
vlib_worker_thread_barrier_sync (vm);
vui->vrings[msg.state.index].desc = desc;
vui->vrings[msg.state.index].used = used;
vnet_hw_interface_t *hwif;
u16 qid;
- if (!(hwif = vnet_get_sup_hw_interface (vnm, sw_if_index)) ||
- hwif->dev_class_index != vhost_user_device_class.index)
+ if (!
+ (hwif =
+ vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index))
+ || hwif->dev_class_index != vhost_user_device_class.index)
return VNET_API_ERROR_INVALID_SW_IF_INDEX;
vui = pool_elt_at_index (vum->vhost_user_interfaces, hwif->dev_instance);
vnet_hw_interface_t *hwif;
uword *if_index;
- if (!(hwif = vnet_get_sup_hw_interface (vnm, sw_if_index)) ||
- hwif->dev_class_index != vhost_user_device_class.index)
+ if (!
+ (hwif =
+ vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index))
+ || hwif->dev_class_index != vhost_user_device_class.index)
return VNET_API_ERROR_INVALID_SW_IF_INDEX;
if (sock_filename == NULL || !(strlen (sock_filename) > 0))
&sw_if_index))
{
vnet_hw_interface_t *hwif =
- vnet_get_sup_hw_interface (vnm, sw_if_index);
+ vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index);
if (hwif == NULL ||
vhost_user_device_class.index != hwif->dev_class_index)
{