- {
- memif_queue_t *mq = vec_elt_at_index (mif->rx_queues, i);
- int rv;
-
- mq->ring = mif->regions[mq->region].shm + mq->offset;
- if (mq->ring->cookie != MEMIF_COOKIE)
- return clib_error_return (0, "wrong cookie on tx ring %u", i);
-
- if (mq->int_fd > -1)
- {
- template.file_descriptor = mq->int_fd;
- template.private_data = (mif->dev_instance << 16) | (i & 0xFFFF);
- memif_file_add (&mq->int_clib_file_index, &template);
- }
- vnet_hw_interface_assign_rx_thread (vnm, mif->hw_if_index, i, ~0);
- rv = vnet_hw_interface_set_rx_mode (vnm, mif->hw_if_index, i,
- VNET_HW_INTERFACE_RX_MODE_DEFAULT);
- if (rv)
- clib_warning
- ("Warning: unable to set rx mode for interface %d queue %d: "
- "rc=%d", mif->hw_if_index, i, rv);
- else
- {
- vnet_hw_interface_rx_mode rxmode;
- vnet_hw_interface_get_rx_mode (vnm, mif->hw_if_index, i, &rxmode);
-
- if (rxmode == VNET_HW_INTERFACE_RX_MODE_POLLING)
- mq->ring->flags |= MEMIF_RING_FLAG_MASK_INT;
- }
- }
+ {
+ memif_queue_t *mq = vec_elt_at_index (mif->rx_queues, i);
+ int rv;
+
+ mq->ring = mif->regions[mq->region].shm + mq->offset;
+ if (mq->ring->cookie != MEMIF_COOKIE)
+ {
+ err = clib_error_return (0, "wrong cookie on tx ring %u", i);
+ goto error;
+ }
+
+ if (mq->int_fd > -1)
+ {
+ template.file_descriptor = mq->int_fd;
+ template.private_data = (mif->dev_instance << 16) | (i & 0xFFFF);
+ template.description = format (0, "%U rx %u int",
+ format_memif_device_name,
+ mif->dev_instance, i);
+ memif_file_add (&mq->int_clib_file_index, &template);
+ }
+ vnet_hw_interface_assign_rx_thread (vnm, mif->hw_if_index, i, ~0);
+ rv = vnet_hw_interface_set_rx_mode (vnm, mif->hw_if_index, i,
+ VNET_HW_INTERFACE_RX_MODE_DEFAULT);
+ if (rv)
+ memif_log_err
+ (mif, "Warning: unable to set rx mode for interface %d queue %d: "
+ "rc=%d", mif->hw_if_index, i, rv);
+ else
+ {
+ vnet_hw_interface_rx_mode rxmode;
+ vnet_hw_interface_get_rx_mode (vnm, mif->hw_if_index, i, &rxmode);
+
+ if (rxmode == VNET_HW_INTERFACE_RX_MODE_POLLING)
+ mq->ring->flags |= MEMIF_RING_FLAG_MASK_INT;
+ else
+ vnet_device_input_set_interrupt_pending (vnm, mif->hw_if_index, i);
+ }
+ }
+ /* *INDENT-ON* */