Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/hyperv/netvsc/if_hn.c
Show First 20 Lines • Show All 1,518 Lines • ▼ Show 20 Lines | hn_txpkt_done(struct hn_nvs_sendctx *sndc, struct hn_softc *sc, | ||||
struct vmbus_channel *chan, const void *data __unused, int dlen __unused) | struct vmbus_channel *chan, const void *data __unused, int dlen __unused) | ||||
{ | { | ||||
struct hn_txdesc *txd = sndc->hn_cbarg; | struct hn_txdesc *txd = sndc->hn_cbarg; | ||||
struct hn_tx_ring *txr; | struct hn_tx_ring *txr; | ||||
txr = txd->txr; | txr = txd->txr; | ||||
KASSERT(txr->hn_chan == chan, | KASSERT(txr->hn_chan == chan, | ||||
("channel mismatch, on chan%u, should be chan%u", | ("channel mismatch, on chan%u, should be chan%u", | ||||
vmbus_chan_subidx(chan), vmbus_chan_subidx(txr->hn_chan))); | vmbus_chan_id(chan), vmbus_chan_id(txr->hn_chan))); | ||||
txr->hn_has_txeof = 1; | txr->hn_has_txeof = 1; | ||||
hn_txdesc_put(txr, txd); | hn_txdesc_put(txr, txd); | ||||
++txr->hn_txdone_cnt; | ++txr->hn_txdone_cnt; | ||||
if (txr->hn_txdone_cnt >= HN_EARLY_TXEOF_THRESH) { | if (txr->hn_txdone_cnt >= HN_EARLY_TXEOF_THRESH) { | ||||
txr->hn_txdone_cnt = 0; | txr->hn_txdone_cnt = 0; | ||||
if (txr->hn_oactive) | if (txr->hn_oactive) | ||||
▲ Show 20 Lines • Show All 2,721 Lines • ▼ Show 20 Lines | hn_chan_detach(struct hn_softc *sc, struct vmbus_channel *chan) | ||||
/* | /* | ||||
* Close this channel. | * Close this channel. | ||||
* | * | ||||
* NOTE: | * NOTE: | ||||
* Channel closing does _not_ destroy the target channel. | * Channel closing does _not_ destroy the target channel. | ||||
*/ | */ | ||||
error = vmbus_chan_close_direct(chan); | error = vmbus_chan_close_direct(chan); | ||||
if (error == EISCONN) { | if (error == EISCONN) { | ||||
if_printf(sc->hn_ifp, "chan%u subidx%u " | if_printf(sc->hn_ifp, "chan%u bufring is connected " | ||||
"bufring is connected after being closed\n", | "after being closed\n", vmbus_chan_id(chan)); | ||||
vmbus_chan_id(chan), vmbus_chan_subidx(chan)); | |||||
rxr->hn_rx_flags |= HN_RX_FLAG_BR_REF; | rxr->hn_rx_flags |= HN_RX_FLAG_BR_REF; | ||||
} else if (error) { | } else if (error) { | ||||
if_printf(sc->hn_ifp, "chan%u subidx%u close failed: %d\n", | if_printf(sc->hn_ifp, "chan%u close failed: %d\n", | ||||
vmbus_chan_id(chan), vmbus_chan_subidx(chan), error); | vmbus_chan_id(chan), error); | ||||
} | } | ||||
} | } | ||||
static int | static int | ||||
hn_attach_subchans(struct hn_softc *sc) | hn_attach_subchans(struct hn_softc *sc) | ||||
{ | { | ||||
struct vmbus_channel **subchans; | struct vmbus_channel **subchans; | ||||
int subchan_cnt = sc->hn_rx_ring_inuse - 1; | int subchan_cnt = sc->hn_rx_ring_inuse - 1; | ||||
▲ Show 20 Lines • Show All 1,104 Lines • Show Last 20 Lines |