Page MenuHomeFreeBSD

D7472.id.diff
No OneTemporary

D7472.id.diff

Index: head/sys/dev/hyperv/netvsc/hv_net_vsc.c
===================================================================
--- head/sys/dev/hyperv/netvsc/hv_net_vsc.c
+++ head/sys/dev/hyperv/netvsc/hv_net_vsc.c
@@ -384,32 +384,24 @@
static int
hv_nv_destroy_rx_buffer(netvsc_dev *net_dev)
{
- nvsp_msg *revoke_pkt;
int ret = 0;
- /*
- * If we got a section count, it means we received a
- * send_rx_buf_complete msg
- * (ie sent nvsp_msg_1_type_send_rx_buf msg) therefore,
- * we need to send a revoke msg here
- */
if (net_dev->rx_section_count) {
- /* Send the revoke receive buffer */
- revoke_pkt = &net_dev->revoke_packet;
- memset(revoke_pkt, 0, sizeof(nvsp_msg));
+ struct hn_nvs_rxbuf_disconn disconn;
- revoke_pkt->hdr.msg_type = nvsp_msg_1_type_revoke_rx_buf;
- revoke_pkt->msgs.vers_1_msgs.revoke_rx_buf.id =
- NETVSC_RECEIVE_BUFFER_ID;
+ /*
+ * Disconnect RXBUF from NVS.
+ */
+ memset(&disconn, 0, sizeof(disconn));
+ disconn.nvs_type = HN_NVS_TYPE_RXBUF_DISCONN;
+ disconn.nvs_sig = HN_NVS_RXBUF_SIG;
ret = vmbus_chan_send(net_dev->sc->hn_prichan,
- VMBUS_CHANPKT_TYPE_INBAND, 0, revoke_pkt, sizeof(nvsp_msg),
+ VMBUS_CHANPKT_TYPE_INBAND, 0, &disconn, sizeof(disconn),
(uint64_t)(uintptr_t)&hn_send_ctx_none);
- /*
- * If we failed here, we might as well return and have a leak
- * rather than continue and a bugchk
- */
if (ret != 0) {
+ if_printf(net_dev->sc->hn_ifp,
+ "send rxbuf disconn failed: %d\n", ret);
return (ret);
}
net_dev->rx_section_count = 0;
Index: head/sys/dev/hyperv/netvsc/if_hnreg.h
===================================================================
--- head/sys/dev/hyperv/netvsc/if_hnreg.h
+++ head/sys/dev/hyperv/netvsc/if_hnreg.h
@@ -42,6 +42,7 @@
#define HN_NVS_TYPE_NDIS_INIT 100
#define HN_NVS_TYPE_RXBUF_CONN 101
#define HN_NVS_TYPE_RXBUF_CONNRESP 102
+#define HN_NVS_TYPE_RXBUF_DISCONN 103
#define HN_NVS_TYPE_CHIM_CONN 104
#define HN_NVS_TYPE_CHIM_CONNRESP 105
#define HN_NVS_TYPE_NDIS_CONF 125
@@ -112,6 +113,14 @@
struct hn_nvs_rxbuf_sect nvs_sect[];
} __packed;
+/* No response */
+struct hn_nvs_rxbuf_disconn {
+ uint32_t nvs_type; /* HN_NVS_TYPE_RXBUF_DISCONN */
+ uint16_t nvs_sig; /* HN_NVS_RXBUF_SIG */
+ uint8_t nvs_rsvd[26];
+} __packed;
+CTASSERT(sizeof(struct hn_nvs_rxbuf_disconn) >= HN_NVS_REQSIZE_MIN);
+
struct hn_nvs_chim_conn {
uint32_t nvs_type; /* HN_NVS_TYPE_CHIM_CONN */
uint32_t nvs_gpadl; /* chimney buf vmbus GPADL */

File Metadata

Mime Type
text/plain
Expires
Wed, Jul 1, 5:00 PM (5 h, 7 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
34570409
Default Alt Text
D7472.id.diff (2 KB)

Event Timeline