Home | History | Annotate | Download | only in hyperv

Lines Matching defs:rxr

1790 	struct hvn_rx_ring *rxr;
1805 sc->sc_rxr = kmem_zalloc(sizeof(*rxr) * ring_cnt, KM_SLEEP);
1809 rxr = &sc->sc_rxr[i];
1810 rxr->rxr_softc = sc;
1812 rxr->rxr_txr = &sc->sc_txr[i];
1813 rxr->rxr_txr->txr_rxr = rxr;
1816 mutex_init(&rxr->rxr_lock, MUTEX_DEFAULT, IPL_NET);
1817 mutex_init(&rxr->rxr_onwork_lock, MUTEX_DEFAULT, IPL_NET);
1818 cv_init(&rxr->rxr_onwork_cv, "waitonwk");
1820 snprintf(rxr->rxr_name, sizeof(rxr->rxr_name),
1822 evcnt_attach_dynamic(&rxr->rxr_evpkts, EVCNT_TYPE_MISC,
1823 NULL, rxr->rxr_name, "packets received");
1824 evcnt_attach_dynamic(&rxr->rxr_evcsum_ip, EVCNT_TYPE_MISC,
1825 NULL, rxr->rxr_name, "IP checksum");
1826 evcnt_attach_dynamic(&rxr->rxr_evcsum_tcp, EVCNT_TYPE_MISC,
1827 NULL, rxr->rxr_name, "TCP checksum");
1828 evcnt_attach_dynamic(&rxr->rxr_evcsum_udp, EVCNT_TYPE_MISC,
1829 NULL, rxr->rxr_name, "UDP checksum");
1830 evcnt_attach_dynamic(&rxr->rxr_evvlanhwtagging, EVCNT_TYPE_MISC,
1831 NULL, rxr->rxr_name, "VLAN H/W tagging");
1832 evcnt_attach_dynamic(&rxr->rxr_evintr, EVCNT_TYPE_INTR,
1833 NULL, rxr
1834 evcnt_attach_dynamic(&rxr->rxr_evdefer, EVCNT_TYPE_MISC,
1835 NULL, rxr->rxr_name, "handled queue in workqueue");
1836 evcnt_attach_dynamic(&rxr->rxr_evdeferreq, EVCNT_TYPE_MISC,
1837 NULL, rxr->rxr_name, "requested defer on ring");
1838 evcnt_attach_dynamic(&rxr->rxr_evredeferreq, EVCNT_TYPE_MISC,
1839 NULL, rxr->rxr_name, "requested defer in workqueue");
1841 rxr->rxr_nvsbuf = kmem_zalloc(HVN_NVS_BUFSIZE, KM_SLEEP);
1842 if (rxr->rxr_nvsbuf == NULL) {
1848 rxr->rxr_si = softint_establish(SOFTINT_NET | SOFTINT_MPSAFE,
1849 hvn_nvs_softintr, rxr);
1850 if (rxr->rxr_si == NULL) {
1867 struct hvn_rx_ring *rxr;
1872 rxr = &sc->sc_rxr[i];
1874 if (rxr->rxr_si != NULL) {
1875 softint_disestablish(rxr->rxr_si);
1876 rxr->rxr_si = NULL;
1879 if (rxr->rxr_nvsbuf != NULL) {
1880 kmem_free(rxr->rxr_nvsbuf, HVN_NVS_BUFSIZE);
1881 rxr->rxr_nvsbuf = NULL;
1884 evcnt_detach(&rxr->rxr_evpkts);
1885 evcnt_detach(&rxr->rxr_evcsum_ip);
1886 evcnt_detach(&rxr->rxr_evcsum_tcp);
1887 evcnt_detach(&rxr->rxr_evcsum_udp);
1888 evcnt_detach(&rxr->rxr_evvlanhwtagging);
1889 evcnt_detach(&rxr->rxr_evintr);
1890 evcnt_detach(&rxr->rxr_evdefer);
1891 evcnt_detach(&rxr->rxr_evdeferreq);
1892 evcnt_detach(&rxr->rxr_evredeferreq);
1894 cv_destroy(&rxr->rxr_onwork_cv);
1895 mutex_destroy(&rxr->rxr_onwork_lock);
1896 mutex_destroy(&rxr->rxr_lock);
1898 kmem_free(sc->sc_rxr, sizeof(*rxr) * sc->sc_nrxr);
1913 struct hvn_rx_ring *rxr;
1918 rxr = &sc->sc_rxr[i];
1919 rxr->rxr_flags |= HVN_RXR_FLAG_UDP_HASH;
2401 struct hvn_rx_ring *rxr;
2412 rxr = &sc->sc_rxr[idx];
2413 rxr->rxr_chan = chan;
2428 hvn_nvs_intr, rxr)) {
2556 const struct hvn_rx_ring *rxr;
2560 rxr = &sc->sc_rxr[i];
2561 if (rxr->rxr_flags)
2874 struct hvn_rx_ring *rxr;
2877 for (rxr = NULL, i = 0; i < sc->sc_nrxr_inuse; i++) {
2878 rxr = &sc->sc_rxr[i];
2879 if (rxr->rxr_chan == chan)
2894 hvn_nvs_intr1(rxr, sc->sc_tx_process_limit,
2899 mutex_enter(&rxr->rxr_onwork_lock);
2900 while (rxr->rxr_onlist || rxr->rxr_onproc)
2901 cv_wait(&rxr->rxr_onwork_cv, &rxr->rxr_onwork_lock);
2902 mutex_exit(&rxr->rxr_onwork_lock);
3529 hvn_handle_ring(struct hvn_rx_ring *rxr, int txlimit, int rxlimit)
3531 struct hvn_softc *sc = rxr->rxr_softc;
3540 mutex_enter(&rxr->rxr_lock);
3542 rv = vmbus_channel_recv(rxr->rxr_chan, rxr->rxr_nvsbuf,
3550 cph = (struct vmbus_chanpkt_hdr *)rxr->rxr_nvsbuf;
3567 if (rxr->rxr_txr == NULL)
3571 mutex_enter(&rxr->rxr_txr->txr_lock);
3572 hvn_txeof(rxr->rxr_txr, cph->cph_tid);
3573 mutex_exit(&rxr->rxr_txr->txr_lock);
3586 n = hvn_rndis_input(rxr, cph->cph_tid, cph);
3616 mutex_exit(&rxr->rxr_lock);
3622 hvn_nvs_intr1(struct hvn_rx_ring *rxr, int txlimit, int rxlimit)
3624 struct hvn_softc *sc = rxr->rxr_softc;
3626 struct hvn_tx_ring *txr = rxr->rxr_txr;
3629 rxr->rxr_workqueue = sc->sc_txrx_workqueue;
3631 result = hvn_handle_ring(rxr, txlimit, rxlimit);
3645 hvn_schedule_handle_ring(struct hvn_softc *sc, struct hvn_rx_ring *rxr,
3649 KASSERT(mutex_owned(&rxr->rxr_onwork_lock));
3651 if (rxr->rxr_workqueue) {
3652 if (!rxr->rxr_onlist) {
3653 rxr->rxr_onlist = true;
3655 rxr->rxr_evdeferreq.ev_count++;
3657 rxr->rxr_evredeferreq.ev_count++;
3658 workqueue_enqueue(sc->sc_wq, &rxr->rxr_wk, NULL);
3661 rxr->rxr_onlist = true;
3663 rxr->rxr_evdeferreq.ev_count++;
3665 rxr->rxr_evredeferreq.ev_count++;
3666 softint_schedule(rxr->rxr_si);
3671 hvn_handle_ring_common(struct hvn_rx_ring *rxr)
3673 struct hvn_softc *sc = rxr->rxr_softc;
3677 rxr->rxr_evdefer.ev_count++;
3679 mutex_enter(&rxr->rxr_onwork_lock);
3680 rxr->rxr_onproc = true;
3681 rxr->rxr_onlist = false;
3682 mutex_exit(&rxr->rxr_onwork_lock);
3684 hvn_nvs_intr1(rxr, txlimit, rxlimit);
3686 mutex_enter(&rxr->rxr_onwork_lock);
3687 if (vmbus_channel_unpause(rxr->rxr_chan)) {
3688 vmbus_channel_pause(rxr->rxr_chan);
3689 hvn_schedule_handle_ring(sc, rxr, false);
3691 rxr->rxr_onproc = false;
3692 cv_broadcast(&rxr->rxr_onwork_cv);
3693 mutex_exit(&rxr->rxr_onwork_lock);
3699 struct hvn_rx_ring *rxr = container_of(wk, struct hvn_rx_ring, rxr_wk);
3701 hvn_handle_ring_common(rxr);
3707 struct hvn_rx_ring *rxr = arg;
3709 hvn_handle_ring_common(rxr);
3715 struct hvn_rx_ring *rxr = arg;
3716 struct hvn_softc *sc = rxr->rxr_softc;
3720 rxr->rxr_evintr.ev_count++;
3722 KASSERT(!rxr->rxr_onproc);
3723 KASSERT(!rxr->rxr_onlist);
3725 vmbus_channel_pause(rxr->rxr_chan);
3727 hvn_nvs_intr1(rxr, txlimit, rxlimit);
3729 if (vmbus_channel_unpause(rxr->rxr_chan) && !cold) {
3730 vmbus_channel_pause(rxr->rxr_chan);
3731 mutex_enter(&rxr->rxr_onwork_lock);
3732 hvn_schedule_handle_ring(sc, rxr, true);
3733 mutex_exit(&rxr->rxr_onwork_lock);
3741 struct hvn_rx_ring *rxr = &sc->sc_rxr[0]; /* primary channel */
3751 rv = vmbus_channel_send(rxr->rxr_chan, cmd, cmdsize,
3777 hvn_nvs_intr1(rxr, 0, 0);
3786 hvn_nvs_ack(struct hvn_rx_ring *rxr, uint64_t tid)
3788 struct hvn_softc *sc __unused = rxr->rxr_softc;
3796 rv = vmbus_channel_send(rxr->rxr_chan, &cmd, sizeof(cmd),
4536 struct hvn_rx_ring *rxr = &sc->sc_rxr[0]; /* primary channel */
4558 rv = vmbus_channel_send_sgl(rxr->rxr_chan, sgl, 1, &rc->rc_msg,
4578 if (vmbus_channel_is_revoked(rxr->rxr_chan) ||
4594 hvn_nvs_intr1(rxr, 0, 0);
4617 hvn_rndis_input(struct hvn_rx_ring *rxr, uint64_t tid, void *arg)
4619 struct hvn_softc *sc = rxr->rxr_softc;
4641 rv = hvn_rxeof(rxr, sc->sc_rx_ring + off, len);
4666 hvn_nvs_ack(rxr, tid);
4712 hvn_rxeof(struct hvn_rx_ring *rxr, uint8_t *buf, uint32_t len)
4714 struct hvn_softc *sc = rxr->rxr_softc;
4806 rxr->rxr_evcsum_ip.ev_count++;
4811 rxr->rxr_evcsum_tcp.ev_count++;
4816 rxr->rxr_evcsum_udp.ev_count++;
4827 rxr->rxr_evvlanhwtagging.ev_count++;
4848 rxr->rxr_evpkts.ev_count++;