svn commit: r362021 - stable/12/sys/dev/virtio/network
Vincenzo Maffione
vmaffione at FreeBSD.org
Wed Jun 10 19:59:12 UTC 2020
Author: vmaffione
Date: Wed Jun 10 19:59:11 2020
New Revision: 362021
URL: https://svnweb.freebsd.org/changeset/base/362021
Log:
MFC r361744
netmap: vtnet: honor NM_IRQ_RESCHED
The netmap_rx_irq() function may return NM_IRQ_RESCHED to inform the
driver that more work is pending, and that netmap expects netmap_rx_irq()
to be called again as soon as possible.
This change implements this behaviour in the vtnet driver.
Modified:
stable/12/sys/dev/virtio/network/if_vtnet.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sys/dev/virtio/network/if_vtnet.c
==============================================================================
--- stable/12/sys/dev/virtio/network/if_vtnet.c Wed Jun 10 19:58:03 2020 (r362020)
+++ stable/12/sys/dev/virtio/network/if_vtnet.c Wed Jun 10 19:59:11 2020 (r362021)
@@ -1853,6 +1853,9 @@ vtnet_rx_vq_intr(void *xrxq)
struct vtnet_rxq *rxq;
struct ifnet *ifp;
int tries, more;
+#ifdef DEV_NETMAP
+ int nmirq;
+#endif /* DEV_NETMAP */
rxq = xrxq;
sc = rxq->vtnrx_sc;
@@ -1871,8 +1874,13 @@ vtnet_rx_vq_intr(void *xrxq)
}
#ifdef DEV_NETMAP
- if (netmap_rx_irq(ifp, rxq->vtnrx_id, &more) != NM_IRQ_PASS)
+ nmirq = netmap_rx_irq(ifp, rxq->vtnrx_id, &more);
+ if (nmirq != NM_IRQ_PASS) {
+ if (nmirq == NM_IRQ_RESCHED) {
+ taskqueue_enqueue(rxq->vtnrx_tq, &rxq->vtnrx_intrtask);
+ }
return;
+ }
#endif /* DEV_NETMAP */
VTNET_RXQ_LOCK(rxq);
@@ -1908,10 +1916,23 @@ vtnet_rxq_tq_intr(void *xrxq, int pending)
struct vtnet_rxq *rxq;
struct ifnet *ifp;
int more;
+#ifdef DEV_NETMAP
+ int nmirq;
+#endif /* DEV_NETMAP */
rxq = xrxq;
sc = rxq->vtnrx_sc;
ifp = sc->vtnet_ifp;
+
+#ifdef DEV_NETMAP
+ nmirq = netmap_rx_irq(ifp, rxq->vtnrx_id, &more);
+ if (nmirq != NM_IRQ_PASS) {
+ if (nmirq == NM_IRQ_RESCHED) {
+ taskqueue_enqueue(rxq->vtnrx_tq, &rxq->vtnrx_intrtask);
+ }
+ return;
+ }
+#endif /* DEV_NETMAP */
VTNET_RXQ_LOCK(rxq);
More information about the svn-src-stable-12
mailing list