aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/hyperv/hyperv_net.h
diff options
context:
space:
mode:
authorKY Srinivasan <kys@microsoft.com>2014-04-30 13:14:31 -0400
committerDavid S. Miller <davem@davemloft.net>2014-04-30 13:48:46 -0400
commitc25aaf814a63f9d9c4e45416f13d70ef0aa0be2e (patch)
treebe6bb2c8784382684365e47b202f02bd5a95babe /drivers/net/hyperv/hyperv_net.h
parentcc80ee13609dc5926ad563d1a793991c80675e65 (diff)
hyperv: Enable sendbuf mechanism on the send path
We send packets using a copy-free mechanism (this is the Guest to Host transport via VMBUS). While this is obviously optimal for large packets, it may not be optimal for small packets. Hyper-V host supports a second mechanism for sending packets that is "copy based". We implement that mechanism in this patch. In this version of the patch I have addressed a comment from David Miller. With this patch (and all of the other offload and VRSS patches), we are now able to almost saturate a 10G interface between Linux VMs on Hyper-V on different hosts - close to 9 Gbps as measured via iperf. Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/hyperv/hyperv_net.h')
-rw-r--r--drivers/net/hyperv/hyperv_net.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
index d1f7826aa75f..4b7df5a5c966 100644
--- a/drivers/net/hyperv/hyperv_net.h
+++ b/drivers/net/hyperv/hyperv_net.h
@@ -140,6 +140,8 @@ struct hv_netvsc_packet {
140 void *send_completion_ctx; 140 void *send_completion_ctx;
141 void (*send_completion)(void *context); 141 void (*send_completion)(void *context);
142 142
143 u32 send_buf_index;
144
143 /* This points to the memory after page_buf */ 145 /* This points to the memory after page_buf */
144 struct rndis_message *rndis_msg; 146 struct rndis_message *rndis_msg;
145 147
@@ -582,6 +584,9 @@ struct nvsp_message {
582 584
583#define NETVSC_RECEIVE_BUFFER_SIZE (1024*1024*16) /* 16MB */ 585#define NETVSC_RECEIVE_BUFFER_SIZE (1024*1024*16) /* 16MB */
584#define NETVSC_RECEIVE_BUFFER_SIZE_LEGACY (1024*1024*15) /* 15MB */ 586#define NETVSC_RECEIVE_BUFFER_SIZE_LEGACY (1024*1024*15) /* 15MB */
587#define NETVSC_SEND_BUFFER_SIZE (1024 * 1024) /* 1MB */
588#define NETVSC_INVALID_INDEX -1
589
585 590
586#define NETVSC_RECEIVE_BUFFER_ID 0xcafe 591#define NETVSC_RECEIVE_BUFFER_ID 0xcafe
587 592
@@ -607,6 +612,15 @@ struct netvsc_device {
607 u32 recv_section_cnt; 612 u32 recv_section_cnt;
608 struct nvsp_1_receive_buffer_section *recv_section; 613 struct nvsp_1_receive_buffer_section *recv_section;
609 614
615 /* Send buffer allocated by us */
616 void *send_buf;
617 u32 send_buf_size;
618 u32 send_buf_gpadl_handle;
619 u32 send_section_cnt;
620 u32 send_section_size;
621 unsigned long *send_section_map;
622 int map_words;
623
610 /* Used for NetVSP initialization protocol */ 624 /* Used for NetVSP initialization protocol */
611 struct completion channel_init_wait; 625 struct completion channel_init_wait;
612 struct nvsp_message channel_init_pkt; 626 struct nvsp_message channel_init_pkt;