diff --git a/drivers/virtio-vring.cc b/drivers/virtio-vring.cc
index 1c9a1716686937e150a9528115141fb099535d93..16d0321da703d1bcff7501f6dda53a62103442a3 100644
--- a/drivers/virtio-vring.cc
+++ b/drivers/virtio-vring.cc
@@ -46,9 +46,14 @@ namespace virtio {
         msix_isr_list* isrs = new msix_isr_list;
         void* stk1 = malloc(10000);
         thread* isr = new thread([this] { this->interrupt(); } , {stk1, 10000});
-        isrs->insert(std::make_pair(0, isr));
+
+        isrs->insert(std::make_pair(_q_index, isr));
         interrupt_manager::instance()->easy_register(_dev, *isrs);
 
+        // Setup queue_id:entry_id 1:1 correlation...
+        _dev->virtio_conf_writel(VIRTIO_PCI_QUEUE_SEL, _q_index);
+        _dev->virtio_conf_writel(VIRTIO_MSI_QUEUE_VECTOR, _q_index);
+
         enable_callback();
         _callback = nullptr;
     }
diff --git a/drivers/virtio.cc b/drivers/virtio.cc
index 9273dd0955076a320fee3658b29e7aad929d755c..2be3eaa721521e43c246ac08be682bfefae863c3 100644
--- a/drivers/virtio.cc
+++ b/drivers/virtio.cc
@@ -34,6 +34,8 @@ namespace virtio {
     {
         _dev->set_bus_master(true);
 
+        _dev->msix_enable();
+
         //make sure the queue is reset
         _dev->reset_host_side();