Index: /branches/rel_apv_10_7/usr/click/lib/libintel_dpdk/lib/librte_eal/linuxapp/eal/eal_interrupts.c
===================================================================
--- /branches/rel_apv_10_7/usr/click/lib/libintel_dpdk/lib/librte_eal/linuxapp/eal/eal_interrupts.c	(revision 38379)
+++ /branches/rel_apv_10_7/usr/click/lib/libintel_dpdk/lib/librte_eal/linuxapp/eal/eal_interrupts.c	(working copy)
@@ -334,8 +334,11 @@
 	len = sizeof(irq_set_buf);
 
 	irq_set = (struct vfio_irq_set *) irq_set_buf;
-	irq_set->argsz = len;
 
+        memset(irq_set, 0, len);
+ 
+	irq_set->argsz = len;
+        /* 0 < irq_set->count < RTE_MAX_RXTX_INTR_VEC_ID + 1 */
 	ret = get_max_intr(intr_handle);
 	if (ret < 0) {
 		RTE_LOG(ERR, EAL, "Invalid number of MSI-X irqs for fd %d\n",
@@ -353,12 +356,23 @@
 	memcpy(&fd_ptr[RTE_INTR_VEC_RXTX_OFFSET], intr_handle->efds,
 		sizeof(*intr_handle->efds) * intr_handle->nb_efd);
 
-	ret = ioctl(intr_handle->vfio_dev_fd, VFIO_DEVICE_SET_IRQS, irq_set);
+       ret = ioctl(intr_handle->vfio_dev_fd, VFIO_DEVICE_SET_IRQS, irq_set);
 
 	if (ret) {
 		RTE_LOG(ERR, EAL, "Error enabling MSI-X interrupts for fd %d\n",
 						intr_handle->fd);
-		return -1;
+
+                /* manually trigger interrupt to enable it */
+                RTE_LOG(ERR, EAL, "Manually enabling MSI-X interrupts for fd %d\n",
+                                                intr_handle->fd);
+                irq_set->flags = VFIO_IRQ_SET_DATA_NONE | VFIO_IRQ_SET_ACTION_TRIGGER;
+                ret = ioctl(intr_handle->vfio_dev_fd, VFIO_DEVICE_SET_IRQS, irq_set);
+
+            if (ret) {
+               RTE_LOG(ERR, EAL, "Error Manually triggering MSI-X interrupts for fd %d\n",
+                                               intr_handle->fd);
+               return -1;
+            }
 	}
 
 	return 0;
