[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH v2 5/7] plat/drivers: Configure receive queue interrupt
The patch implements enable and disabling interrupt on the receive queue. Signed-off-by: Sharan Santhanam <sharan.santhanam@xxxxxxxxx> Signed-off-by: Razvan Cojocaru <razvan.cojocaru93@xxxxxxxxx> --- plat/drivers/virtio/virtio_net.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/plat/drivers/virtio/virtio_net.c b/plat/drivers/virtio/virtio_net.c index 7effe15..e1d0a09 100644 --- a/plat/drivers/virtio/virtio_net.c +++ b/plat/drivers/virtio/virtio_net.c @@ -635,19 +635,39 @@ err_negotiate_feature: } static int virtio_net_rx_intr_enable(struct uk_netdev *n, - struct uk_netdev_rx_queue *queue __unused) + struct uk_netdev_rx_queue *queue) { + struct virtio_net_device *d __unused; int rc = 0; UK_ASSERT(n); + d = to_virtionetdev(n); + /* If the interrupt is enabled */ + if (queue->intr_enabled & VTNET_INTR_EN) + return 0; + + /** + * Enable the user configuration bit. This would cause the interrupt to + * be enabled automatically, if the interrupt could not be enabled now + * due to data in the queue. + */ + queue->intr_enabled = VTNET_INTR_USR_EN; + rc = virtqueue_intr_enable(queue->vq); + if (!rc) + queue->intr_enabled |= VTNET_INTR_EN; return rc; } static int virtio_net_rx_intr_disable(struct uk_netdev *n, - struct uk_netdev_rx_queue *queue __unused) + struct uk_netdev_rx_queue *queue) { + struct virtio_net_device *vndev __unused; + UK_ASSERT(n); + vndev = to_virtionetdev(n); + virtqueue_intr_disable(queue->vq); + queue->intr_enabled &= ~(VTNET_INTR_USR_EN | VTNET_INTR_EN); return 0; } -- 2.7.4 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |