diff options
author | KY Srinivasan <kys@microsoft.com> | 2014-04-30 13:14:31 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-04-30 13:48:46 -0400 |
commit | c25aaf814a63f9d9c4e45416f13d70ef0aa0be2e (patch) | |
tree | be6bb2c8784382684365e47b202f02bd5a95babe /drivers/net/hyperv/hyperv_net.h | |
parent | cc80ee13609dc5926ad563d1a793991c80675e65 (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.h | 14 |
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; |