From 5b3bd19f310f8389eef1bb0d4107bce4aab26cb1 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sun, 29 Mar 2015 19:46:14 +0200 Subject: [PATCH] kernel: fix hyperv net driver for legacy hyperv 2008. --- lfs/linux | 3 ++ .../linux-3.14.x-hyperv-2008-fix.patch | 50 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 src/patches/linux-3.14.x-hyperv-2008-fix.patch diff --git a/lfs/linux b/lfs/linux index 17a1297b76..7ac13d6b41 100644 --- a/lfs/linux +++ b/lfs/linux @@ -164,6 +164,9 @@ endif # r8169 L23 patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.32-r8169_disable_L23.patch + # HyperV 2008 patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.x-hyperv-2008-fix.patch + ifeq "$(KCFG)" "-kirkwood" cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.10-mv_cesa_disable_failing_hmac_sha1.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.22-kirkwood_legacy_boot.patch diff --git a/src/patches/linux-3.14.x-hyperv-2008-fix.patch b/src/patches/linux-3.14.x-hyperv-2008-fix.patch new file mode 100644 index 0000000000..e538e08e5c --- /dev/null +++ b/src/patches/linux-3.14.x-hyperv-2008-fix.patch @@ -0,0 +1,50 @@ +From 99d3016de4f2a29635f5382b0e9bd0e5f2151487 Mon Sep 17 00:00:00 2001 +From: Haiyang Zhang +Date: Sun, 9 Mar 2014 16:10:59 -0700 +Subject: hyperv: Change the receive buffer size for legacy hosts + +Due to a bug in the Hyper-V host verion 2008R2, we need to use a slightly smaller +receive buffer size, otherwise the buffer will not be accepted by the legacy hosts. + +Signed-off-by: Haiyang Zhang +Signed-off-by: David S. Miller + +diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h +index 7d06b49..13010b4 100644 +--- a/drivers/net/hyperv/hyperv_net.h ++++ b/drivers/net/hyperv/hyperv_net.h +@@ -513,6 +513,7 @@ struct nvsp_message { + #define NETVSC_MTU 65536 + + #define NETVSC_RECEIVE_BUFFER_SIZE (1024*1024*16) /* 16MB */ ++#define NETVSC_RECEIVE_BUFFER_SIZE_LEGACY (1024*1024*15) /* 15MB */ + + #define NETVSC_RECEIVE_BUFFER_ID 0xcafe + +diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c +index 1a0280d..daddea2 100644 +--- a/drivers/net/hyperv/netvsc.c ++++ b/drivers/net/hyperv/netvsc.c +@@ -365,6 +365,11 @@ static int netvsc_connect_vsp(struct hv_device *device) + goto cleanup; + + /* Post the big receive buffer to NetVSP */ ++ if (net_device->nvsp_version <= NVSP_PROTOCOL_VERSION_2) ++ net_device->recv_buf_size = NETVSC_RECEIVE_BUFFER_SIZE_LEGACY; ++ else ++ net_device->recv_buf_size = NETVSC_RECEIVE_BUFFER_SIZE; ++ + ret = netvsc_init_recv_buf(device); + + cleanup: +@@ -898,7 +903,6 @@ int netvsc_device_add(struct hv_device *device, void *additional_info) + ndev = net_device->ndev; + + /* Initialize the NetVSC channel extension */ +- net_device->recv_buf_size = NETVSC_RECEIVE_BUFFER_SIZE; + spin_lock_init(&net_device->recv_pkt_list_lock); + + INIT_LIST_HEAD(&net_device->recv_pkt_list); +-- +cgit v0.10.2 + -- 2.39.5