Use per-thread vlib_main 95/195/2
authorShesha Sreenivasamurthy <shesha@cisco.com>
Tue, 2 Feb 2016 18:06:07 +0000 (10:06 -0800)
committerGerrit Code Review <gerrit@fd.io>
Tue, 2 Feb 2016 18:24:42 +0000 (18:24 +0000)
Change-Id: I8bee9f6661878a74a0375944ac01c9cb3a0acfbf
Signed-off-by: Shesha Sreenivasamurthy <shesha@cisco.com>
vnet/vnet/devices/dpdk/device.c
vnet/vnet/devices/dpdk/dpdk_priv.h

index 72df02a..92f8dcb 100644 (file)
@@ -273,8 +273,10 @@ u32 tx_burst_vector_internal (vlib_main_t * vm,
                     dpdk_vu_vring *vring = &(xd->vu_intf->vrings[VIRTIO_RXQ]);
                     vring->n_since_last_int += rv;
 
-                    if (vring->n_since_last_int > dm->vhost_coalesce_frames)
-                      dpdk_vhost_user_send_interrupt(dm->vlib_main, xd, VIRTIO_RXQ);
+                    f64 now = vlib_time_now (vm);
+                    if (vring->int_deadline < now ||
+                        vring->n_since_last_int > dm->vhost_coalesce_frames)
+                      dpdk_vhost_user_send_interrupt(vm, xd, VIRTIO_RXQ);
                   }
 
                   int c = rv;
@@ -299,8 +301,10 @@ u32 tx_burst_vector_internal (vlib_main_t * vm,
                     dpdk_vu_vring *vring = &(xd->vu_intf->vrings[VIRTIO_RXQ]);
                     vring->n_since_last_int += rv;
 
-                    if (vring->n_since_last_int > dm->vhost_coalesce_frames)
-                      dpdk_vhost_user_send_interrupt(dm->vlib_main, xd, VIRTIO_RXQ);
+                    f64 now = vlib_time_now (vm);
+                    if (vring->int_deadline < now ||
+                        vring->n_since_last_int > dm->vhost_coalesce_frames)
+                      dpdk_vhost_user_send_interrupt(vm, xd, VIRTIO_RXQ);
                   }
 
                   int c = rv;
index 314e280..e499e2a 100644 (file)
@@ -350,7 +350,7 @@ dpdk_rx_burst ( dpdk_main_t * dm, dpdk_device_t * xd, u16 queue_id)
                                           bm->pktmbuf_pools[socket_id],
                                           xd->rx_vectors[queue_id], VLIB_FRAME_SIZE);
 
-      f64 now = vlib_time_now (dm->vlib_main);
+      f64 now = vlib_time_now (vm);
 
       /* send pending interrupts if needed */
       if (dpdk_vhost_user_want_interrupt(xd, VIRTIO_TXQ)) {
@@ -359,13 +359,13 @@ dpdk_rx_burst ( dpdk_main_t * dm, dpdk_device_t * xd, u16 queue_id)
 
           if ((vring->n_since_last_int && (vring->int_deadline < now))
               || (vring->n_since_last_int > dm->vhost_coalesce_frames))
-            dpdk_vhost_user_send_interrupt(dm->vlib_main, xd, VIRTIO_TXQ);
+            dpdk_vhost_user_send_interrupt(vm, xd, VIRTIO_TXQ);
       }
 
       if (dpdk_vhost_user_want_interrupt(xd, VIRTIO_RXQ)) {
           dpdk_vu_vring *vring = &(xd->vu_intf->vrings[VIRTIO_RXQ]);
           if (vring->n_since_last_int && (vring->int_deadline < now))
-            dpdk_vhost_user_send_interrupt(dm->vlib_main, xd, VIRTIO_RXQ);
+            dpdk_vhost_user_send_interrupt(vm, xd, VIRTIO_RXQ);
       }
 
     }