aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Tuexen <tuexen@FreeBSD.org>2021-08-26 17:27:04 +0000
committerMichael Tuexen <tuexen@FreeBSD.org>2021-12-10 10:50:01 +0000
commit42cb69e147e30000bd35c97d4212da4540b862dd (patch)
treeeae9b20d39d7466a4438f37978292f57dba4f5f2
parent30cc6218953989191839e04fb86203482b438f74 (diff)
downloadsrc-42cb69e147e30000bd35c97d4212da4540b862dd.tar.gz
src-42cb69e147e30000bd35c97d4212da4540b862dd.zip
Hyper-V: hn: Enter network epoch when required
PR: 254695 (cherry picked from commit 26d79d40a74fc804c76acd88a1f8f10f9827a2b3)
-rw-r--r--sys/dev/hyperv/netvsc/if_hn.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/dev/hyperv/netvsc/if_hn.c b/sys/dev/hyperv/netvsc/if_hn.c
index 725e3d7a7553..d562a937ecad 100644
--- a/sys/dev/hyperv/netvsc/if_hn.c
+++ b/sys/dev/hyperv/netvsc/if_hn.c
@@ -83,6 +83,7 @@ __FBSDID("$FreeBSD$");
#include <sys/taskqueue.h>
#include <sys/buf_ring.h>
#include <sys/eventhandler.h>
+#include <sys/epoch.h>
#include <machine/atomic.h>
#include <machine/in_cksum.h>
@@ -2883,7 +2884,11 @@ static void
hn_chan_rollup(struct hn_rx_ring *rxr, struct hn_tx_ring *txr)
{
#if defined(INET) || defined(INET6)
+ struct epoch_tracker et;
+
+ NET_EPOCH_ENTER(et);
tcp_lro_flush_all(&rxr->hn_lro);
+ NET_EPOCH_EXIT(et);
#endif
/*
@@ -7459,6 +7464,7 @@ static void
hn_nvs_handle_rxbuf(struct hn_rx_ring *rxr, struct vmbus_channel *chan,
const struct vmbus_chanpkt_hdr *pkthdr)
{
+ struct epoch_tracker et;
const struct vmbus_chanpkt_rxbuf *pkt;
const struct hn_nvs_hdr *nvs_hdr;
int count, i, hlen;
@@ -7496,6 +7502,7 @@ hn_nvs_handle_rxbuf(struct hn_rx_ring *rxr, struct vmbus_channel *chan,
return;
}
+ NET_EPOCH_ENTER(et);
/* Each range represents 1 RNDIS pkt that contains 1 Ethernet frame */
for (i = 0; i < count; ++i) {
int ofs, len;
@@ -7511,6 +7518,7 @@ hn_nvs_handle_rxbuf(struct hn_rx_ring *rxr, struct vmbus_channel *chan,
rxr->rsc.is_last = (i == (count - 1));
hn_rndis_rxpkt(rxr, rxr->hn_rxbuf + ofs, len);
}
+ NET_EPOCH_EXIT(et);
/*
* Ack the consumed RXBUF associated w/ this channel packet,