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();