Merge pull request #524 from rneugeba/kern-up

linux: update kernel to 4.4.21
This commit is contained in:
Justin Cormack 2016-09-19 19:58:31 +01:00 committed by GitHub
commit 6f7568d5ed
47 changed files with 191 additions and 548 deletions

View File

@ -1,6 +1,6 @@
FROM mobylinux/debian-build-kernel:a009a11bf0ad
ARG KERNEL_VERSION=4.4.20
ARG KERNEL_VERSION=4.4.21
ENV KERNEL_SOURCE=https://www.kernel.org/pub/linux/kernel/v4.x/linux-${KERNEL_VERSION}.tar.xz
@ -8,10 +8,10 @@ RUN curl -sSL -o linux-${KERNEL_VERSION}.tar.xz ${KERNEL_SOURCE}
RUN cat linux-${KERNEL_VERSION}.tar.xz | tar --absolute-names -xJ && mv /linux-${KERNEL_VERSION} /linux
# this is aufs4.4 20160905
# this is aufs4.4 20160912
ENV AUFS_REPO https://github.com/sfjro/aufs4-standalone
ENV AUFS_BRANCH aufs4.4
ENV AUFS_COMMIT 8be74e42b108f9cbbb0d59a87468505a48ff2757
ENV AUFS_COMMIT 7d174ae40b4c9c876ee51aa50fa4ee1f3747de23
# Download AUFS
RUN git clone -b "$AUFS_BRANCH" "$AUFS_REPO" /aufs && \

View File

@ -1,7 +1,7 @@
From 0d67af6648f600656eb20cb2ca1d35cb0985e9bd Mon Sep 17 00:00:00 2001
From 622883ec571c468f756195c13726740bdd33a0ee Mon Sep 17 00:00:00 2001
From: Stefan Hajnoczi <stefanha@redhat.com>
Date: Thu, 17 Dec 2015 16:53:43 +0800
Subject: [PATCH 01/46] virtio: make find_vqs() checkpatch.pl-friendly
Subject: [PATCH 01/42] virtio: make find_vqs() checkpatch.pl-friendly
checkpatch.pl wants arrays of strings declared as follows:
@ -215,5 +215,5 @@ index e5ce8ab..6e6cb0c 100644
u64 (*get_features)(struct virtio_device *vdev);
int (*finalize_features)(struct virtio_device *vdev);
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From f1e0be6f17679e7f532989bae3290bb4ed3ba773 Mon Sep 17 00:00:00 2001
From 8dc15fd8fab55e076a640d1a5d6f34b77e196632 Mon Sep 17 00:00:00 2001
From: Julia Lawall <julia.lawall@lip6.fr>
Date: Sat, 21 Nov 2015 18:39:17 +0100
Subject: [PATCH 02/46] VSOCK: constify vmci_transport_notify_ops structures
Subject: [PATCH 02/42] VSOCK: constify vmci_transport_notify_ops structures
The vmci_transport_notify_ops structures are never modified, so declare
them as const.
@ -73,5 +73,5 @@ index dc9c792..21e591d 100644
vmci_transport_notify_pkt_socket_destruct,
vmci_transport_notify_pkt_poll_in,
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From bc63a861a8379269f4a51fdaac3d40f9161aea4d Mon Sep 17 00:00:00 2001
From 761aa629641afa804127aea0e3ce5c95dddfcb17 Mon Sep 17 00:00:00 2001
From: Claudio Imbrenda <imbrenda@linux.vnet.ibm.com>
Date: Tue, 22 Mar 2016 17:05:52 +0100
Subject: [PATCH 03/46] AF_VSOCK: Shrink the area influenced by prepare_to_wait
Subject: [PATCH 03/42] AF_VSOCK: Shrink the area influenced by prepare_to_wait
When a thread is prepared for waiting by calling prepare_to_wait, sleeping
is not allowed until either the wait has taken place or finish_wait has
@ -332,5 +332,5 @@ index 9b5bd6d..b5f1221 100644
release_sock(sk);
return err;
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From c1bc13ebe28532f99cb6b8edaa57a6aa61adbe58 Mon Sep 17 00:00:00 2001
From 8386f4e436f280cec08f95338ae5e44bc8aa5b5e Mon Sep 17 00:00:00 2001
From: Stefan Hajnoczi <stefanha@redhat.com>
Date: Thu, 23 Jun 2016 16:28:58 +0100
Subject: [PATCH 04/46] vsock: make listener child lock ordering explicit
Subject: [PATCH 04/42] vsock: make listener child lock ordering explicit
There are several places where the listener and pending or accept queue
child sockets are accessed at the same time. Lockdep is unhappy that
@ -59,5 +59,5 @@ index b5f1221..b96ac91 100644
/* If the listener socket has received an error, then we should
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From 3351d8e1a0e52529aea4b5c3ce0c2ef3ad43ee17 Mon Sep 17 00:00:00 2001
From ae6d39c3a4cd08ce37606ab36b202702a48f5440 Mon Sep 17 00:00:00 2001
From: Stefan Hajnoczi <stefanha@redhat.com>
Date: Thu, 28 Jul 2016 15:36:30 +0100
Subject: [PATCH 05/46] VSOCK: transport-specific vsock_transport functions
Subject: [PATCH 05/42] VSOCK: transport-specific vsock_transport functions
struct vsock_transport contains function pointers called by AF_VSOCK
core code. The transport may want its own transport-specific function
@ -55,5 +55,5 @@ index b96ac91..e34d96f 100644
MODULE_DESCRIPTION("VMware Virtual Socket Family");
MODULE_VERSION("1.0.1.0-k");
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From 54f528a28ab97e1306180adde7ba15c4158428db Mon Sep 17 00:00:00 2001
From 816c87fe6ecfa46981c0ca332d21f1e0d8bfd8a0 Mon Sep 17 00:00:00 2001
From: Stefan Hajnoczi <stefanha@redhat.com>
Date: Thu, 28 Jul 2016 15:36:31 +0100
Subject: [PATCH 06/46] VSOCK: defer sock removal to transports
Subject: [PATCH 06/42] VSOCK: defer sock removal to transports
The virtio transport will implement graceful shutdown and the related
SO_LINGER socket option. This requires orphaning the sock but keeping
@ -79,5 +79,5 @@ index 0a369bb..706991e 100644
vmci_datagram_destroy_handle(vmci_trans(vsk)->dg_handle);
vmci_trans(vsk)->dg_handle = VMCI_INVALID_HANDLE;
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From ec54f262b84f327f1c0ecabce6f0c9b5c75ff2df Mon Sep 17 00:00:00 2001
From fe9f8cb30a5c819adabb5b9b598f7776cbbdc4f0 Mon Sep 17 00:00:00 2001
From: Asias He <asias@redhat.com>
Date: Thu, 28 Jul 2016 15:36:32 +0100
Subject: [PATCH 07/46] VSOCK: Introduce virtio_vsock_common.ko
Subject: [PATCH 07/42] VSOCK: Introduce virtio_vsock_common.ko
This module contains the common code and header files for the following
virtio_transporto and vhost_vsock kernel modules.
@ -27,10 +27,10 @@ Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
create mode 100644 net/vmw_vsock/virtio_transport_common.c
diff --git a/MAINTAINERS b/MAINTAINERS
index 48bd523..3e60f59 100644
index ab65bbe..b93ba8b 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -11395,6 +11395,16 @@ S: Maintained
@@ -11382,6 +11382,16 @@ S: Maintained
F: drivers/media/v4l2-core/videobuf2-*
F: include/media/videobuf2-*
@ -371,10 +371,10 @@ index 0000000..b7f1d62
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/uapi/linux/Kbuild b/include/uapi/linux/Kbuild
index 32152e7..c830e9f 100644
index ebd10e6..6c51a4d 100644
--- a/include/uapi/linux/Kbuild
+++ b/include/uapi/linux/Kbuild
@@ -448,6 +448,7 @@ header-y += virtio_ring.h
@@ -447,6 +447,7 @@ header-y += virtio_ring.h
header-y += virtio_rng.h
header-y += virtio_scsi.h
header-y += virtio_types.h
@ -1492,5 +1492,5 @@ index 0000000..a53b3a1
+MODULE_AUTHOR("Asias He");
+MODULE_DESCRIPTION("common code for virtio vsock");
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From e21bdf5a9a62fbdabddca3cafc8aa2b02f2cc165 Mon Sep 17 00:00:00 2001
From c384834d9495c7b2a36b0054d08ddf3240687bdc Mon Sep 17 00:00:00 2001
From: Asias He <asias@redhat.com>
Date: Thu, 28 Jul 2016 15:36:33 +0100
Subject: [PATCH 08/46] VSOCK: Introduce virtio_transport.ko
Subject: [PATCH 08/42] VSOCK: Introduce virtio_transport.ko
VM sockets virtio transport implementation. This driver runs in the
guest.
@ -17,10 +17,10 @@ Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
create mode 100644 net/vmw_vsock/virtio_transport.c
diff --git a/MAINTAINERS b/MAINTAINERS
index 3e60f59..c7e4c9a 100644
index b93ba8b..82d1123 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -11404,6 +11404,7 @@ S: Maintained
@@ -11391,6 +11391,7 @@ S: Maintained
F: include/linux/virtio_vsock.h
F: include/uapi/linux/virtio_vsock.h
F: net/vmw_vsock/virtio_transport_common.c
@ -659,5 +659,5 @@ index 0000000..699dfab
+MODULE_DESCRIPTION("virtio transport for vsock");
+MODULE_DEVICE_TABLE(virtio, id_table);
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From 7cba4e91a9e1359345ccb7dbff243cedf5b5e6ea Mon Sep 17 00:00:00 2001
From a0af1060ea091348b94bd3780e5b92a3334e64b2 Mon Sep 17 00:00:00 2001
From: Asias He <asias@redhat.com>
Date: Thu, 28 Jul 2016 15:36:34 +0100
Subject: [PATCH 09/46] VSOCK: Introduce vhost_vsock.ko
Subject: [PATCH 09/42] VSOCK: Introduce vhost_vsock.ko
VM sockets vhost transport implementation. This driver runs on the
host.
@ -18,10 +18,10 @@ Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
create mode 100644 drivers/vhost/vsock.c
diff --git a/MAINTAINERS b/MAINTAINERS
index c7e4c9a..fa94182 100644
index 82d1123..12d49f5 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -11405,6 +11405,8 @@ F: include/linux/virtio_vsock.h
@@ -11392,6 +11392,8 @@ F: include/linux/virtio_vsock.h
F: include/uapi/linux/virtio_vsock.h
F: net/vmw_vsock/virtio_transport_common.c
F: net/vmw_vsock/virtio_transport.c
@ -773,5 +773,5 @@ index ab373191..b306476 100644
+
#endif
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From 5600cbdcb09f2a322c696e37570d031932a3baa4 Mon Sep 17 00:00:00 2001
From 30e1801c9e9683512a0cd169edf015923497dd70 Mon Sep 17 00:00:00 2001
From: Asias He <asias@redhat.com>
Date: Thu, 28 Jul 2016 15:36:35 +0100
Subject: [PATCH 10/46] VSOCK: Add Makefile and Kconfig
Subject: [PATCH 10/42] VSOCK: Add Makefile and Kconfig
Enable virtio-vsock and vhost-vsock.
@ -102,5 +102,5 @@ index 2ce52d7..bc27c70 100644
+
+vmw_vsock_virtio_transport_common-y += virtio_transport_common.o
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From d722f0d8acd78f91e079f2fe0b4e4a29b42435b7 Mon Sep 17 00:00:00 2001
From e9a09f08525c736a71d8331fd6412a0ad19ee428 Mon Sep 17 00:00:00 2001
From: Wei Yongjun <weiyj.lk@gmail.com>
Date: Tue, 2 Aug 2016 13:50:42 +0000
Subject: [PATCH 11/46] VSOCK: Use kvfree()
Subject: [PATCH 11/42] VSOCK: Use kvfree()
Use kvfree() instead of open-coding it.
@ -29,5 +29,5 @@ index 028ca16..0ddf3a2 100644
static int vhost_vsock_dev_open(struct inode *inode, struct file *file)
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From f2e2e9e439f717e454a1cf0e71e098b19ff0005d Mon Sep 17 00:00:00 2001
From f886059ea8d0ac8ed981263d91d94275b85c50d5 Mon Sep 17 00:00:00 2001
From: Stefan Hajnoczi <stefanha@redhat.com>
Date: Thu, 4 Aug 2016 14:52:53 +0100
Subject: [PATCH 12/46] vhost/vsock: fix vhost virtio_vsock_pkt use-after-free
Subject: [PATCH 12/42] vhost/vsock: fix vhost virtio_vsock_pkt use-after-free
Stash the packet length in a local variable before handing over
ownership of the packet to virtio_transport_recv_pkt() or
@ -49,5 +49,5 @@ index 0ddf3a2..e3b30ea 100644
}
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From 1a8274f5f22a79f10aae3b4cf35f9b8a65f7f423 Mon Sep 17 00:00:00 2001
From 6ded3ac18eabf23a790d6b6876119d8cd0538964 Mon Sep 17 00:00:00 2001
From: Stefan Hajnoczi <stefanha@redhat.com>
Date: Fri, 5 Aug 2016 13:52:09 +0100
Subject: [PATCH 13/46] virtio-vsock: fix include guard typo
Subject: [PATCH 13/42] virtio-vsock: fix include guard typo
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
@ -24,5 +24,5 @@ index 6b011c1..1d57ed3 100644
#include <linux/types.h>
#include <linux/virtio_ids.h>
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From 5377a4a3e61adb924efdb4ff47ca2213c63e5bc4 Mon Sep 17 00:00:00 2001
From 5fcd2673fadd46b0d2d5f896281113cd67a2efa7 Mon Sep 17 00:00:00 2001
From: Gerard Garcia <ggarcia@deic.uab.cat>
Date: Wed, 10 Aug 2016 17:24:34 +0200
Subject: [PATCH 14/46] vhost/vsock: drop space available check for TX vq
Subject: [PATCH 14/42] vhost/vsock: drop space available check for TX vq
Remove unnecessary use of enable/disable callback notifications
and the incorrect more space available check.
@ -57,5 +57,5 @@ index 699dfab..936d7ee 100644
}
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From fc2bc563ce2a5205b7504c39e8dbb0a5db2d63e9 Mon Sep 17 00:00:00 2001
From 8719b508f509c06a7821d6f8e2fc1fcad84d6fbb Mon Sep 17 00:00:00 2001
From: Ian Campbell <ian.campbell@docker.com>
Date: Mon, 4 Apr 2016 14:50:10 +0100
Subject: [PATCH 15/46] VSOCK: Only allow host network namespace to use
Subject: [PATCH 15/42] VSOCK: Only allow host network namespace to use
AF_VSOCK.
The VSOCK addressing schema does not really lend itself to simply creating an
@ -27,5 +27,5 @@ index 17dbbe6..1bb1b01 100644
return -EINVAL;
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From 7c37cbd1fd8bff6d8373cff4d7e1c33fcb2aa653 Mon Sep 17 00:00:00 2001
From 84e1e7a4981f6ef926bb01481445def66e0982b2 Mon Sep 17 00:00:00 2001
From: Jake Oshins <jakeo@microsoft.com>
Date: Mon, 14 Dec 2015 16:01:41 -0800
Subject: [PATCH 16/46] drivers:hv: Define the channel type for Hyper-V PCI
Subject: [PATCH 16/42] drivers:hv: Define the channel type for Hyper-V PCI
Express pass-through
This defines the channel type for PCI front-ends in Hyper-V VMs.
@ -16,10 +16,10 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2 files changed, 14 insertions(+)
diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
index 652afd1..a77646b 100644
index 37238df..a562318 100644
--- a/drivers/hv/channel_mgmt.c
+++ b/drivers/hv/channel_mgmt.c
@@ -358,6 +358,7 @@ enum {
@@ -359,6 +359,7 @@ enum {
SCSI,
NIC,
ND_NIC,
@ -27,7 +27,7 @@ index 652afd1..a77646b 100644
MAX_PERF_CHN,
};
@@ -375,6 +376,8 @@ static const struct hv_vmbus_device_id hp_devs[] = {
@@ -376,6 +377,8 @@ static const struct hv_vmbus_device_id hp_devs[] = {
{ HV_NIC_GUID, },
/* NetworkDirect Guest RDMA */
{ HV_ND_GUID, },
@ -59,5 +59,5 @@ index ae6a711..10dda1e 100644
*/
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From b26f3791593f6645c4e0e11fd93db7e47390fab6 Mon Sep 17 00:00:00 2001
From 12fbf6bcf859c7ce33766ae450dc291d0b857197 Mon Sep 17 00:00:00 2001
From: "K. Y. Srinivasan" <kys@microsoft.com>
Date: Mon, 14 Dec 2015 16:01:43 -0800
Subject: [PATCH 17/46] Drivers: hv: vmbus: Use uuid_le type consistently
Subject: [PATCH 17/42] Drivers: hv: vmbus: Use uuid_le type consistently
Consistently use uuid_le type in the Hyper-V driver code.
@ -17,10 +17,10 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
5 files changed, 40 insertions(+), 68 deletions(-)
diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
index a77646b..38470aa 100644
index a562318..339277b 100644
--- a/drivers/hv/channel_mgmt.c
+++ b/drivers/hv/channel_mgmt.c
@@ -408,7 +408,7 @@ static void init_vp_index(struct vmbus_channel *channel, const uuid_le *type_gui
@@ -409,7 +409,7 @@ static void init_vp_index(struct vmbus_channel *channel, const uuid_le *type_gui
struct cpumask *alloced_mask;
for (i = IDE; i < MAX_PERF_CHN; i++) {
@ -30,10 +30,10 @@ index a77646b..38470aa 100644
perf_chn = true;
break;
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 9b5440f..9aadcc2 100644
index 509ed97..6ce2bf8 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -532,7 +532,7 @@ static int vmbus_uevent(struct device *device, struct kobj_uevent_env *env)
@@ -533,7 +533,7 @@ static int vmbus_uevent(struct device *device, struct kobj_uevent_env *env)
static const uuid_le null_guid;
@ -42,7 +42,7 @@ index 9b5440f..9aadcc2 100644
{
if (memcmp(guid, &null_guid, sizeof(uuid_le)))
return false;
@@ -545,9 +545,9 @@ static inline bool is_null_guid(const __u8 *guid)
@@ -546,9 +546,9 @@ static inline bool is_null_guid(const __u8 *guid)
*/
static const struct hv_vmbus_device_id *hv_vmbus_get_id(
const struct hv_vmbus_device_id *id,
@ -54,7 +54,7 @@ index 9b5440f..9aadcc2 100644
if (!memcmp(&id->guid, guid, sizeof(uuid_le)))
return id;
@@ -564,7 +564,7 @@ static int vmbus_match(struct device *device, struct device_driver *driver)
@@ -565,7 +565,7 @@ static int vmbus_match(struct device *device, struct device_driver *driver)
struct hv_driver *drv = drv_to_hv_drv(driver);
struct hv_device *hv_dev = device_to_hv_device(device);
@ -63,7 +63,7 @@ index 9b5440f..9aadcc2 100644
return 1;
return 0;
@@ -581,7 +581,7 @@ static int vmbus_probe(struct device *child_device)
@@ -582,7 +582,7 @@ static int vmbus_probe(struct device *child_device)
struct hv_device *dev = device_to_hv_device(child_device);
const struct hv_vmbus_device_id *dev_id;
@ -293,5 +293,5 @@ index 9f5cdd4..8e8c69b 100644
strcpy(alias, "vmbus:");
strcat(alias, guid_name);
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From 9ae0af317c2a085434b46197a663165895decaf6 Mon Sep 17 00:00:00 2001
From 01a403dce6afb34dd0430e12d93b7acd5f384439 Mon Sep 17 00:00:00 2001
From: "K. Y. Srinivasan" <kys@microsoft.com>
Date: Mon, 14 Dec 2015 16:01:44 -0800
Subject: [PATCH 18/46] Drivers: hv: vmbus: Use uuid_le_cmp() for comparing
Subject: [PATCH 18/42] Drivers: hv: vmbus: Use uuid_le_cmp() for comparing
GUIDs
Use uuid_le_cmp() for comparing GUIDs.
@ -15,10 +15,10 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
index 38470aa..dc4fb0b 100644
index 339277b..9b4525c 100644
--- a/drivers/hv/channel_mgmt.c
+++ b/drivers/hv/channel_mgmt.c
@@ -408,8 +408,7 @@ static void init_vp_index(struct vmbus_channel *channel, const uuid_le *type_gui
@@ -409,8 +409,7 @@ static void init_vp_index(struct vmbus_channel *channel, const uuid_le *type_gui
struct cpumask *alloced_mask;
for (i = IDE; i < MAX_PERF_CHN; i++) {
@ -29,10 +29,10 @@ index 38470aa..dc4fb0b 100644
break;
}
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 9aadcc2..bf54455 100644
index 6ce2bf8..7973aa5 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -534,7 +534,7 @@ static const uuid_le null_guid;
@@ -535,7 +535,7 @@ static const uuid_le null_guid;
static inline bool is_null_guid(const uuid_le *guid)
{
@ -41,7 +41,7 @@ index 9aadcc2..bf54455 100644
return false;
return true;
}
@@ -548,7 +548,7 @@ static const struct hv_vmbus_device_id *hv_vmbus_get_id(
@@ -549,7 +549,7 @@ static const struct hv_vmbus_device_id *hv_vmbus_get_id(
const uuid_le *guid)
{
for (; !is_null_guid(&id->guid); id++)
@ -51,5 +51,5 @@ index 9aadcc2..bf54455 100644
return NULL;
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From 8bba0d5b705be1f1d0bdfe7fa8465042fa936c3c Mon Sep 17 00:00:00 2001
From a9c4320f47b5a2d2ef7600c5f61f3d4256de2ba5 Mon Sep 17 00:00:00 2001
From: Dexuan Cui <decui@microsoft.com>
Date: Mon, 14 Dec 2015 16:01:48 -0800
Subject: [PATCH 20/46] Drivers: hv: vmbus: do sanity check of channel state in
Subject: [PATCH 19/42] Drivers: hv: vmbus: do sanity check of channel state in
vmbus_close_internal()
This fixes an incorrect assumption of channel state in the function.
@ -15,7 +15,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 file changed, 12 insertions(+)
diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
index 6a90c69..b3c14ca 100644
index 1ef37c7..2889d97 100644
--- a/drivers/hv/channel.c
+++ b/drivers/hv/channel.c
@@ -512,6 +512,18 @@ static int vmbus_close_internal(struct vmbus_channel *channel)
@ -38,5 +38,5 @@ index 6a90c69..b3c14ca 100644
channel->sc_creation_callback = NULL;
/* Stop callback and cancel the timer asap */
--
2.9.3
2.10.0

View File

@ -1,87 +0,0 @@
From 5c3a0d077f4c0ecd17117c04b0b6fef7e8acbdea Mon Sep 17 00:00:00 2001
From: Dexuan Cui <decui@microsoft.com>
Date: Mon, 14 Dec 2015 16:01:47 -0800
Subject: [PATCH 19/46] Drivers: hv: vmbus: serialize process_chn_event() and
vmbus_close_internal()
process_chn_event(), running in the tasklet, can race with
vmbus_close_internal() in the case of SMP guest, e.g., when the former is
accessing channel->inbound.ring_buffer, the latter could be freeing the
ring_buffer pages.
To resolve the race, we can serialize them by disabling the tasklet when
the latter is running here.
Signed-off-by: Dexuan Cui <decui@microsoft.com>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 63d55b2aeb5e4faa170316fee73c3c47ea9268c7)
---
drivers/hv/channel.c | 21 +++++++++++++++++++--
1 file changed, 19 insertions(+), 2 deletions(-)
diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
index 9098f13..6a90c69 100644
--- a/drivers/hv/channel.c
+++ b/drivers/hv/channel.c
@@ -28,6 +28,7 @@
#include <linux/module.h>
#include <linux/hyperv.h>
#include <linux/uio.h>
+#include <linux/interrupt.h>
#include "hyperv_vmbus.h"
@@ -496,8 +497,21 @@ static void reset_channel_cb(void *arg)
static int vmbus_close_internal(struct vmbus_channel *channel)
{
struct vmbus_channel_close_channel *msg;
+ struct tasklet_struct *tasklet;
int ret;
+ /*
+ * process_chn_event(), running in the tasklet, can race
+ * with vmbus_close_internal() in the case of SMP guest, e.g., when
+ * the former is accessing channel->inbound.ring_buffer, the latter
+ * could be freeing the ring_buffer pages.
+ *
+ * To resolve the race, we can serialize them by disabling the
+ * tasklet when the latter is running here.
+ */
+ tasklet = hv_context.event_dpc[channel->target_cpu];
+ tasklet_disable(tasklet);
+
channel->state = CHANNEL_OPEN_STATE;
channel->sc_creation_callback = NULL;
/* Stop callback and cancel the timer asap */
@@ -525,7 +539,7 @@ static int vmbus_close_internal(struct vmbus_channel *channel)
* If we failed to post the close msg,
* it is perhaps better to leak memory.
*/
- return ret;
+ goto out;
}
/* Tear down the gpadl for the channel's ring buffer */
@@ -538,7 +552,7 @@ static int vmbus_close_internal(struct vmbus_channel *channel)
* If we failed to teardown gpadl,
* it is perhaps better to leak memory.
*/
- return ret;
+ goto out;
}
}
@@ -555,6 +569,9 @@ static int vmbus_close_internal(struct vmbus_channel *channel)
if (channel->rescind)
hv_process_channel_removal(channel,
channel->offermsg.child_relid);
+out:
+ tasklet_enable(tasklet);
+
return ret;
}
--
2.9.3

View File

@ -1,7 +1,7 @@
From 667defbc25ef5dcfa89b60c0bd534d5a27f8c116 Mon Sep 17 00:00:00 2001
From b92976804d10f78b9a50f5d8f62f3663a44f32e6 Mon Sep 17 00:00:00 2001
From: Dexuan Cui <decui@microsoft.com>
Date: Mon, 14 Dec 2015 16:01:50 -0800
Subject: [PATCH 22/46] Drivers: hv: vmbus: release relid on error in
Subject: [PATCH 20/42] Drivers: hv: vmbus: release relid on error in
vmbus_process_offer()
We want to simplify vmbus_onoffer_rescind() by not invoking
@ -16,10 +16,10 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
index 7903acc..9c9da3a 100644
index 9b4525c..8529dd2 100644
--- a/drivers/hv/channel_mgmt.c
+++ b/drivers/hv/channel_mgmt.c
@@ -177,19 +177,22 @@ static void percpu_channel_deq(void *arg)
@@ -178,19 +178,22 @@ static void percpu_channel_deq(void *arg)
}
@ -47,7 +47,7 @@ index 7903acc..9c9da3a 100644
BUG_ON(!channel->rescind);
@@ -336,6 +339,8 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel)
@@ -337,6 +340,8 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel)
return;
err_deq_chan:
@ -56,7 +56,7 @@ index 7903acc..9c9da3a 100644
spin_lock_irqsave(&vmbus_connection.channel_lock, flags);
list_del(&newchannel->listentry);
spin_unlock_irqrestore(&vmbus_connection.channel_lock, flags);
@@ -587,7 +592,11 @@ static void vmbus_onoffer_rescind(struct vmbus_channel_message_header *hdr)
@@ -640,7 +645,11 @@ static void vmbus_onoffer_rescind(struct vmbus_channel_message_header *hdr)
channel = relid2channel(rescind->child_relid);
if (channel == NULL) {
@ -70,5 +70,5 @@ index 7903acc..9c9da3a 100644
}
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From 235e2935d2d0700ac21db0cb0d6a64d6f9ff09fa Mon Sep 17 00:00:00 2001
From e34354b98924dba0128289e722bde4ca35eafa90 Mon Sep 17 00:00:00 2001
From: Dexuan Cui <decui@microsoft.com>
Date: Mon, 14 Dec 2015 16:01:51 -0800
Subject: [PATCH 23/46] Drivers: hv: vmbus: channge
Subject: [PATCH 21/42] Drivers: hv: vmbus: channge
vmbus_connection.channel_lock to mutex
spinlock is unnecessary here.
@ -18,10 +18,10 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
3 files changed, 10 insertions(+), 11 deletions(-)
diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
index 9c9da3a..d013171 100644
index 8529dd2..306c7df 100644
--- a/drivers/hv/channel_mgmt.c
+++ b/drivers/hv/channel_mgmt.c
@@ -206,9 +206,9 @@ void hv_process_channel_removal(struct vmbus_channel *channel, u32 relid)
@@ -207,9 +207,9 @@ void hv_process_channel_removal(struct vmbus_channel *channel, u32 relid)
}
if (channel->primary_channel == NULL) {
@ -33,7 +33,7 @@ index 9c9da3a..d013171 100644
primary_channel = channel;
} else {
@@ -253,7 +253,7 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel)
@@ -254,7 +254,7 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel)
unsigned long flags;
/* Make sure this is a new offer */
@ -42,7 +42,7 @@ index 9c9da3a..d013171 100644
list_for_each_entry(channel, &vmbus_connection.chn_list, listentry) {
if (!uuid_le_cmp(channel->offermsg.offer.if_type,
@@ -269,7 +269,7 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel)
@@ -270,7 +270,7 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel)
list_add_tail(&newchannel->listentry,
&vmbus_connection.chn_list);
@ -51,7 +51,7 @@ index 9c9da3a..d013171 100644
if (!fnew) {
/*
@@ -341,9 +341,9 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel)
@@ -342,9 +342,9 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel)
err_deq_chan:
vmbus_release_relid(newchannel->offermsg.child_relid);
@ -99,10 +99,10 @@ index 4fc2e88..521f48e 100644
return found_channel;
}
diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h
index 3782636..d9937be 100644
index 12156db..50b1de7 100644
--- a/drivers/hv/hyperv_vmbus.h
+++ b/drivers/hv/hyperv_vmbus.h
@@ -678,7 +678,7 @@ struct vmbus_connection {
@@ -683,7 +683,7 @@ struct vmbus_connection {
/* List of channels */
struct list_head chn_list;
@ -112,5 +112,5 @@ index 3782636..d9937be 100644
struct workqueue_struct *work_queue;
};
--
2.9.3
2.10.0

View File

@ -1,122 +0,0 @@
From 4185d167c4c6db493a3e96e59689e32562761563 Mon Sep 17 00:00:00 2001
From: Dexuan Cui <decui@microsoft.com>
Date: Mon, 14 Dec 2015 16:01:49 -0800
Subject: [PATCH 21/46] Drivers: hv: vmbus: fix rescind-offer handling for
device without a driver
In the path vmbus_onoffer_rescind() -> vmbus_device_unregister() ->
device_unregister() -> ... -> __device_release_driver(), we can see for a
device without a driver loaded: dev->driver is NULL, so
dev->bus->remove(dev), namely vmbus_remove(), isn't invoked.
As a result, vmbus_remove() -> hv_process_channel_removal() isn't invoked
and some cleanups(like sending a CHANNELMSG_RELID_RELEASED message to the
host) aren't done.
We can demo the issue this way:
1. rmmod hv_utils;
2. disable the Heartbeat Integration Service in Hyper-V Manager and lsvmbus
shows the device disappears.
3. re-enable the Heartbeat in Hyper-V Manager and modprobe hv_utils, but
lsvmbus shows the device can't appear again.
This is because, the host thinks the VM hasn't released the relid, so can't
re-offer the device to the VM.
We can fix the issue by moving hv_process_channel_removal()
from vmbus_close_internal() to vmbus_device_release(), since the latter is
always invoked on device_unregister(), whether or not the dev has a driver
loaded.
Signed-off-by: Dexuan Cui <decui@microsoft.com>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 34c6801e3310ad286c7bb42bc88d42926b8f99bf)
---
drivers/hv/channel.c | 6 ------
drivers/hv/channel_mgmt.c | 6 +++---
drivers/hv/vmbus_drv.c | 15 +++------------
3 files changed, 6 insertions(+), 21 deletions(-)
diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
index b3c14ca..2889d97 100644
--- a/drivers/hv/channel.c
+++ b/drivers/hv/channel.c
@@ -575,12 +575,6 @@ static int vmbus_close_internal(struct vmbus_channel *channel)
free_pages((unsigned long)channel->ringbuffer_pages,
get_order(channel->ringbuffer_pagecount * PAGE_SIZE));
- /*
- * If the channel has been rescinded; process device removal.
- */
- if (channel->rescind)
- hv_process_channel_removal(channel,
- channel->offermsg.child_relid);
out:
tasklet_enable(tasklet);
diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
index dc4fb0b..7903acc 100644
--- a/drivers/hv/channel_mgmt.c
+++ b/drivers/hv/channel_mgmt.c
@@ -191,6 +191,8 @@ void hv_process_channel_removal(struct vmbus_channel *channel, u32 relid)
if (channel == NULL)
return;
+ BUG_ON(!channel->rescind);
+
if (channel->target_cpu != get_cpu()) {
put_cpu();
smp_call_function_single(channel->target_cpu,
@@ -230,9 +232,7 @@ void vmbus_free_channels(void)
list_for_each_entry_safe(channel, tmp, &vmbus_connection.chn_list,
listentry) {
- /* if we don't set rescind to true, vmbus_close_internal()
- * won't invoke hv_process_channel_removal().
- */
+ /* hv_process_channel_removal() needs this */
channel->rescind = true;
vmbus_device_unregister(channel->device_obj);
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index bf54455..8bf1f31 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -603,23 +603,11 @@ static int vmbus_remove(struct device *child_device)
{
struct hv_driver *drv;
struct hv_device *dev = device_to_hv_device(child_device);
- u32 relid = dev->channel->offermsg.child_relid;
if (child_device->driver) {
drv = drv_to_hv_drv(child_device->driver);
if (drv->remove)
drv->remove(dev);
- else {
- hv_process_channel_removal(dev->channel, relid);
- pr_err("remove not set for driver %s\n",
- dev_name(child_device));
- }
- } else {
- /*
- * We don't have a driver for this device; deal with the
- * rescind message by removing the channel.
- */
- hv_process_channel_removal(dev->channel, relid);
}
return 0;
@@ -654,7 +642,10 @@ static void vmbus_shutdown(struct device *child_device)
static void vmbus_device_release(struct device *device)
{
struct hv_device *hv_dev = device_to_hv_device(device);
+ struct vmbus_channel *channel = hv_dev->channel;
+ hv_process_channel_removal(channel,
+ channel->offermsg.child_relid);
kfree(hv_dev);
}
--
2.9.3

View File

@ -1,7 +1,7 @@
From d6cc8615d22926bb1e2d8ba85fd391df9f1cf089 Mon Sep 17 00:00:00 2001
From 91a65c691fc22cc6bfb884dea29cc7c5c3e5f9a9 Mon Sep 17 00:00:00 2001
From: Vitaly Kuznetsov <vkuznets@redhat.com>
Date: Mon, 14 Dec 2015 19:02:00 -0800
Subject: [PATCH 24/46] Drivers: hv: remove code duplication between
Subject: [PATCH 22/42] Drivers: hv: remove code duplication between
vmbus_recvpacket()/vmbus_recvpacket_raw()
vmbus_recvpacket() and vmbus_recvpacket_raw() are almost identical but
@ -122,5 +122,5 @@ index 2889d97..dd6de7f 100644
}
EXPORT_SYMBOL_GPL(vmbus_recvpacket_raw);
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From 64c112c50e6a404431f5adc7685915cd9b5e8d42 Mon Sep 17 00:00:00 2001
From 4c754b011766c2d8a99424637656ea8096d55890 Mon Sep 17 00:00:00 2001
From: Dexuan Cui <decui@microsoft.com>
Date: Mon, 21 Dec 2015 12:21:22 -0800
Subject: [PATCH 25/46] Drivers: hv: vmbus: fix the building warning with
Subject: [PATCH 23/42] Drivers: hv: vmbus: fix the building warning with
hyperv-keyboard
With the recent change af3ff643ea91ba64dd8d0b1cbed54d44512f96cd
@ -68,5 +68,5 @@ index 4712d7d..9e2de6a 100644
*/
#define HV_VSS_GUID \
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From 6ee99ea70b9975b03c436c05a55c154bed392a94 Mon Sep 17 00:00:00 2001
From 6cb1a2f24c7b049f8a0c259afa4f5de37ac84084 Mon Sep 17 00:00:00 2001
From: "K. Y. Srinivasan" <kys@microsoft.com>
Date: Tue, 15 Dec 2015 16:27:27 -0800
Subject: [PATCH 26/46] Drivers: hv: vmbus: Treat Fibre Channel devices as
Subject: [PATCH 24/42] Drivers: hv: vmbus: Treat Fibre Channel devices as
performance critical
For performance critical devices, we distribute the incoming
@ -17,10 +17,10 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 file changed, 3 insertions(+)
diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
index d013171..1c1ad47 100644
index 306c7df..763d0c1 100644
--- a/drivers/hv/channel_mgmt.c
+++ b/drivers/hv/channel_mgmt.c
@@ -361,6 +361,7 @@ err_free_chan:
@@ -362,6 +362,7 @@ err_free_chan:
enum {
IDE = 0,
SCSI,
@ -28,7 +28,7 @@ index d013171..1c1ad47 100644
NIC,
ND_NIC,
PCIE,
@@ -377,6 +378,8 @@ static const struct hv_vmbus_device_id hp_devs[] = {
@@ -378,6 +379,8 @@ static const struct hv_vmbus_device_id hp_devs[] = {
{ HV_IDE_GUID, },
/* Storage - SCSI */
{ HV_SCSI_GUID, },
@ -38,5 +38,5 @@ index d013171..1c1ad47 100644
{ HV_NIC_GUID, },
/* NetworkDirect Guest RDMA */
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From 5131dc31aecd376785b71bb3bb16bf70573682b3 Mon Sep 17 00:00:00 2001
From 69933a7f325a93afbb5ed819388b8b063d602066 Mon Sep 17 00:00:00 2001
From: "K. Y. Srinivasan" <kys@microsoft.com>
Date: Fri, 25 Dec 2015 20:00:30 -0800
Subject: [PATCH 27/46] Drivers: hv: vmbus: Add vendor and device atttributes
Subject: [PATCH 25/42] Drivers: hv: vmbus: Add vendor and device atttributes
Add vendor and device attributes to VMBUS devices. These will be used
by Hyper-V tools as well user-level RDMA libraries that will use the
@ -40,10 +40,10 @@ index 636e938..5d0125f 100644
+Description: The 16 bit vendor ID of the device
+Users: tools/hv/lsvmbus and user level RDMA libraries
diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
index 1c1ad47..107d72f 100644
index 763d0c1..d6c6114 100644
--- a/drivers/hv/channel_mgmt.c
+++ b/drivers/hv/channel_mgmt.c
@@ -32,8 +32,122 @@
@@ -33,8 +33,122 @@
#include "hyperv_vmbus.h"
@ -168,7 +168,7 @@ index 1c1ad47..107d72f 100644
/**
* vmbus_prep_negotiate_resp() - Create default response for Hyper-V Negotiate message
@@ -251,6 +365,7 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel)
@@ -252,6 +366,7 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel)
struct vmbus_channel *channel;
bool fnew = true;
unsigned long flags;
@ -176,7 +176,7 @@ index 1c1ad47..107d72f 100644
/* Make sure this is a new offer */
mutex_lock(&vmbus_connection.channel_mutex);
@@ -288,7 +403,9 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel)
@@ -289,7 +404,9 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel)
goto err_free_chan;
}
@ -187,7 +187,7 @@ index 1c1ad47..107d72f 100644
if (newchannel->target_cpu != get_cpu()) {
put_cpu();
@@ -325,6 +442,7 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel)
@@ -326,6 +443,7 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel)
if (!newchannel->device_obj)
goto err_deq_chan;
@ -195,7 +195,7 @@ index 1c1ad47..107d72f 100644
/*
* Add the new device to the bus. This will kick off device-driver
* binding which eventually invokes the device driver's AddDevice()
@@ -358,37 +476,6 @@ err_free_chan:
@@ -359,37 +477,6 @@ err_free_chan:
free_channel(newchannel);
}
@ -233,7 +233,7 @@ index 1c1ad47..107d72f 100644
/*
* We use this state to statically distribute the channel interrupt load.
*/
@@ -405,22 +492,15 @@ static int next_numa_node_id;
@@ -406,22 +493,15 @@ static int next_numa_node_id;
* For pre-win8 hosts or non-performance critical channels we assign the
* first CPU in the first NUMA node.
*/
@ -259,10 +259,10 @@ index 1c1ad47..107d72f 100644
(vmbus_proto_version == VERSION_WIN7) || (!perf_chn)) {
/*
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 8bf1f31..959b656 100644
index 7973aa5..de7130c 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -479,6 +479,24 @@ static ssize_t channel_vp_mapping_show(struct device *dev,
@@ -480,6 +480,24 @@ static ssize_t channel_vp_mapping_show(struct device *dev,
}
static DEVICE_ATTR_RO(channel_vp_mapping);
@ -287,7 +287,7 @@ index 8bf1f31..959b656 100644
/* Set up per device attributes in /sys/bus/vmbus/devices/<bus device> */
static struct attribute *vmbus_attrs[] = {
&dev_attr_id.attr,
@@ -504,6 +522,8 @@ static struct attribute *vmbus_attrs[] = {
@@ -505,6 +523,8 @@ static struct attribute *vmbus_attrs[] = {
&dev_attr_in_read_bytes_avail.attr,
&dev_attr_in_write_bytes_avail.attr,
&dev_attr_channel_vp_mapping.attr,
@ -296,7 +296,7 @@ index 8bf1f31..959b656 100644
NULL,
};
ATTRIBUTE_GROUPS(vmbus);
@@ -960,6 +980,7 @@ struct hv_device *vmbus_device_create(const uuid_le *type,
@@ -963,6 +983,7 @@ struct hv_device *vmbus_device_create(const uuid_le *type,
memcpy(&child_device_obj->dev_type, type, sizeof(uuid_le));
memcpy(&child_device_obj->dev_instance, instance,
sizeof(uuid_le));
@ -351,5 +351,5 @@ index 9e2de6a..51c98fd 100644
struct device device;
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From 1686f700609459bc6cf9d4597a8a39bf5f133409 Mon Sep 17 00:00:00 2001
From 64f93cfc49018e7ffa772506cfe3631b3db530b9 Mon Sep 17 00:00:00 2001
From: Dexuan Cui <decui@microsoft.com>
Date: Wed, 27 Jan 2016 22:29:37 -0800
Subject: [PATCH 30/46] Drivers: hv: vmbus: add a helper function to set a
Subject: [PATCH 26/42] Drivers: hv: vmbus: add a helper function to set a
channel's pending send size
This will be used by the coming net/hvsock driver.
@ -32,5 +32,5 @@ index 51c98fd..934542a 100644
int vmbus_request_offers(void);
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From f22a67d17cb1f357da61258ee181729bcf0af3b1 Mon Sep 17 00:00:00 2001
From 8658862991789c9dca080be3d35a7e72479b91e9 Mon Sep 17 00:00:00 2001
From: Dexuan Cui <decui@microsoft.com>
Date: Wed, 27 Jan 2016 22:29:38 -0800
Subject: [PATCH 31/46] Drivers: hv: vmbus: define the new offer type for
Subject: [PATCH 27/42] Drivers: hv: vmbus: define the new offer type for
Hyper-V socket (hvsock)
A helper function is also added.
@ -40,5 +40,5 @@ index 934542a..a4f105d 100644
enum hv_signal_policy policy)
{
--
2.9.3
2.10.0

View File

@ -1,49 +0,0 @@
From 2dd3d37c7e1a4ce1adeb2a4af3df878907d44ebe Mon Sep 17 00:00:00 2001
From: Vitaly Kuznetsov <vkuznets@redhat.com>
Date: Wed, 27 Jan 2016 22:29:34 -0800
Subject: [PATCH 28/46] Drivers: hv: vmbus: avoid infinite loop in
init_vp_index()
When we pick a CPU to use for a new subchannel we try find a non-used one
on the appropriate NUMA node, we keep track of them with the
primary->alloced_cpus_in_node mask. Under normal circumstances we don't run
out of available CPUs but it is possible when we we don't initialize some
cpus in Linux, e.g. when we boot with 'nr_cpus=' limitation.
Avoid the infinite loop in init_vp_index() by checking that we still have
non-used CPUs in the alloced_cpus_in_node mask and resetting it in case
we don't.
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 79fd8e706637a5c7c41f9498fe0fbfb437abfdc8)
---
drivers/hv/channel_mgmt.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
index 107d72f..af1d82e 100644
--- a/drivers/hv/channel_mgmt.c
+++ b/drivers/hv/channel_mgmt.c
@@ -549,6 +549,17 @@ static void init_vp_index(struct vmbus_channel *channel, u16 dev_type)
cpumask_of_node(primary->numa_node));
cur_cpu = -1;
+
+ /*
+ * Normally Hyper-V host doesn't create more subchannels than there
+ * are VCPUs on the node but it is possible when not all present VCPUs
+ * on the node are initialized by guest. Clear the alloced_cpus_in_node
+ * to start over.
+ */
+ if (cpumask_equal(&primary->alloced_cpus_in_node,
+ cpumask_of_node(primary->numa_node)))
+ cpumask_clear(&primary->alloced_cpus_in_node);
+
while (true) {
cur_cpu = cpumask_next(cur_cpu, &available_mask);
if (cur_cpu >= nr_cpu_ids) {
--
2.9.3

View File

@ -1,7 +1,7 @@
From 6d465cc94028d9c3b7e36996b09e7c9d95b269f3 Mon Sep 17 00:00:00 2001
From 60af2c3c5565e40ee66123edb9386ccaa1355dff Mon Sep 17 00:00:00 2001
From: Dexuan Cui <decui@microsoft.com>
Date: Wed, 27 Jan 2016 22:29:39 -0800
Subject: [PATCH 32/46] Drivers: hv: vmbus: vmbus_sendpacket_ctl: hvsock: avoid
Subject: [PATCH 28/42] Drivers: hv: vmbus: vmbus_sendpacket_ctl: hvsock: avoid
unnecessary signaling
When the hvsock channel's outbound ringbuffer is full (i.e.,
@ -41,5 +41,5 @@ index dd6de7f..128dcf2 100644
return ret;
--
2.9.3
2.10.0

View File

@ -1,99 +0,0 @@
From f478bef9bcd76c17c338c7c96422f22dad0d02e3 Mon Sep 17 00:00:00 2001
From: Vitaly Kuznetsov <vkuznets@redhat.com>
Date: Wed, 27 Jan 2016 22:29:35 -0800
Subject: [PATCH 29/46] Drivers: hv: vmbus: avoid scheduling in interrupt
context in vmbus_initiate_unload()
We have to call vmbus_initiate_unload() on crash to make kdump work but
the crash can also be happening in interrupt (e.g. Sysrq + c results in
such) where we can't schedule or the following will happen:
[ 314.905786] bad: scheduling from the idle thread!
Just skipping the wait (and even adding some random wait here) won't help:
to make host-side magic working we're supposed to receive CHANNELMSG_UNLOAD
(and actually confirm the fact that we received it) but we can't use
interrupt-base path (vmbus_isr()-> vmbus_on_msg_dpc()). Implement a simple
busy wait ignoring all the other messages and use it if we're in an
interrupt context.
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 415719160de3fae3bb9cbc617664649919cd00d0)
---
drivers/hv/channel_mgmt.c | 44 +++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 43 insertions(+), 1 deletion(-)
diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
index af1d82e..d6c6114 100644
--- a/drivers/hv/channel_mgmt.c
+++ b/drivers/hv/channel_mgmt.c
@@ -28,6 +28,7 @@
#include <linux/list.h>
#include <linux/module.h>
#include <linux/completion.h>
+#include <linux/delay.h>
#include <linux/hyperv.h>
#include "hyperv_vmbus.h"
@@ -589,6 +590,40 @@ static void init_vp_index(struct vmbus_channel *channel, u16 dev_type)
channel->target_vp = hv_context.vp_index[cur_cpu];
}
+static void vmbus_wait_for_unload(void)
+{
+ int cpu = smp_processor_id();
+ void *page_addr = hv_context.synic_message_page[cpu];
+ struct hv_message *msg = (struct hv_message *)page_addr +
+ VMBUS_MESSAGE_SINT;
+ struct vmbus_channel_message_header *hdr;
+ bool unloaded = false;
+
+ while (1) {
+ if (msg->header.message_type == HVMSG_NONE) {
+ mdelay(10);
+ continue;
+ }
+
+ hdr = (struct vmbus_channel_message_header *)msg->u.payload;
+ if (hdr->msgtype == CHANNELMSG_UNLOAD_RESPONSE)
+ unloaded = true;
+
+ msg->header.message_type = HVMSG_NONE;
+ /*
+ * header.message_type needs to be written before we do
+ * wrmsrl() below.
+ */
+ mb();
+
+ if (msg->header.message_flags.msg_pending)
+ wrmsrl(HV_X64_MSR_EOM, 0);
+
+ if (unloaded)
+ break;
+ }
+}
+
/*
* vmbus_unload_response - Handler for the unload response.
*/
@@ -614,7 +649,14 @@ void vmbus_initiate_unload(void)
hdr.msgtype = CHANNELMSG_UNLOAD;
vmbus_post_msg(&hdr, sizeof(struct vmbus_channel_message_header));
- wait_for_completion(&vmbus_connection.unload_event);
+ /*
+ * vmbus_initiate_unload() is also called on crash and the crash can be
+ * happening in an interrupt context, where scheduling is impossible.
+ */
+ if (!in_interrupt())
+ wait_for_completion(&vmbus_connection.unload_event);
+ else
+ vmbus_wait_for_unload();
}
/*
--
2.9.3

View File

@ -1,7 +1,7 @@
From 7a337a1dcbdcb4c5ab22822f5cbf5b5fbe45551c Mon Sep 17 00:00:00 2001
From 2c5183043209906ad0a41fb1a5b4d0c4c8a8e735 Mon Sep 17 00:00:00 2001
From: Dexuan Cui <decui@microsoft.com>
Date: Wed, 27 Jan 2016 22:29:40 -0800
Subject: [PATCH 33/46] Drivers: hv: vmbus: define a new VMBus message type for
Subject: [PATCH 29/42] Drivers: hv: vmbus: define a new VMBus message type for
hvsock
A function to send the type of message is also added.
@ -97,5 +97,5 @@ index a4f105d..191bc5d 100644
+ const uuid_le *shv_host_servie_id);
#endif /* _HYPERV_H */
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From 6a067b8e07452ec14629bea5bfe0951877c27451 Mon Sep 17 00:00:00 2001
From 58a10705d630bdcb5ea08c894d28851c73e9bd4f Mon Sep 17 00:00:00 2001
From: Dexuan Cui <decui@microsoft.com>
Date: Wed, 27 Jan 2016 22:29:41 -0800
Subject: [PATCH 34/46] Drivers: hv: vmbus: add a hvsock flag in struct
Subject: [PATCH 30/42] Drivers: hv: vmbus: add a hvsock flag in struct
hv_driver
Only the coming hv_sock driver has a "true" value for this flag.
@ -20,10 +20,10 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2 files changed, 18 insertions(+)
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 959b656..d46b4ff 100644
index de7130c..03fc5d3 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -584,6 +584,10 @@ static int vmbus_match(struct device *device, struct device_driver *driver)
@@ -585,6 +585,10 @@ static int vmbus_match(struct device *device, struct device_driver *driver)
struct hv_driver *drv = drv_to_hv_drv(driver);
struct hv_device *hv_dev = device_to_hv_device(device);
@ -60,5 +60,5 @@ index 191bc5d..05966e2 100644
uuid_le dev_type;
const struct hv_vmbus_device_id *id_table;
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From e8bf64d13b450b3a224bd12779c38931e4a5691d Mon Sep 17 00:00:00 2001
From 6dd9db116b0985dfc56b3028205549f4c52d8be0 Mon Sep 17 00:00:00 2001
From: Dexuan Cui <decui@microsoft.com>
Date: Wed, 27 Jan 2016 22:29:42 -0800
Subject: [PATCH 35/46] Drivers: hv: vmbus: add a per-channel rescind callback
Subject: [PATCH 31/42] Drivers: hv: vmbus: add a per-channel rescind callback
This will be used by the coming hv_sock driver.
@ -68,5 +68,5 @@ index 05966e2..ad04017 100644
* Retrieve the (sub) channel on which to send an outgoing request.
* When a primary channel has multiple sub-channels, we choose a
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From b27d9192ab78946005526ee9574bc971b69205a2 Mon Sep 17 00:00:00 2001
From 5e89daa5e8c0b5950b46ba77dd6248c5e61bc405 Mon Sep 17 00:00:00 2001
From: Dexuan Cui <decui@microsoft.com>
Date: Wed, 27 Jan 2016 22:29:43 -0800
Subject: [PATCH 36/46] Drivers: hv: vmbus: add an API
Subject: [PATCH 32/42] Drivers: hv: vmbus: add an API
vmbus_hvsock_device_unregister()
The hvsock driver needs this API to release all the resources related
@ -149,5 +149,5 @@ index ad04017..993318a 100644
resource_size_t min, resource_size_t max,
resource_size_t size, resource_size_t align,
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From d5f89659d3c0c5e05c3a76c3cc1b84aa505bc06e Mon Sep 17 00:00:00 2001
From b7e3c4ad47b7fd47a79a723ac0c1823b6782d1ff Mon Sep 17 00:00:00 2001
From: "K. Y. Srinivasan" <kys@microsoft.com>
Date: Wed, 27 Jan 2016 22:29:45 -0800
Subject: [PATCH 37/46] Drivers: hv: vmbus: Give control over how the ring
Subject: [PATCH 33/42] Drivers: hv: vmbus: Give control over how the ring
access is serialized
On the channel send side, many of the VMBUS
@ -111,10 +111,10 @@ index cf311be..b40f429 100644
spin_lock_init(&channel->lock);
diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h
index d9937be..b925fa3 100644
index 50b1de7..89bb559 100644
--- a/drivers/hv/hyperv_vmbus.h
+++ b/drivers/hv/hyperv_vmbus.h
@@ -612,7 +612,7 @@ void hv_ringbuffer_cleanup(struct hv_ring_buffer_info *ring_info);
@@ -617,7 +617,7 @@ void hv_ringbuffer_cleanup(struct hv_ring_buffer_info *ring_info);
int hv_ringbuffer_write(struct hv_ring_buffer_info *ring_info,
struct kvec *kv_list,
@ -204,5 +204,5 @@ index 993318a..6c9695e 100644
{
return !!(c->offermsg.offer.chn_flags &
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From f565fcc8decc0d57427b8506ea4b430de70440b1 Mon Sep 17 00:00:00 2001
From af2dd29e3cf40c789045199893c232d57f0b7057 Mon Sep 17 00:00:00 2001
From: Vitaly Kuznetsov <vkuznets@redhat.com>
Date: Fri, 26 Feb 2016 15:13:16 -0800
Subject: [PATCH 38/46] Drivers: hv: vmbus: avoid wait_for_completion() on
Subject: [PATCH 34/42] Drivers: hv: vmbus: avoid wait_for_completion() on
crash
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
@ -61,10 +61,10 @@ index 09c08b5..78b8be8 100644
if (vmbus_connection.work_queue) {
drain_workqueue(vmbus_connection.work_queue);
diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h
index b925fa3..10efab0 100644
index 89bb559..f424c2d 100644
--- a/drivers/hv/hyperv_vmbus.h
+++ b/drivers/hv/hyperv_vmbus.h
@@ -751,7 +751,7 @@ void hv_vss_onchannelcallback(void *);
@@ -756,7 +756,7 @@ void hv_vss_onchannelcallback(void *);
int hv_fcopy_init(struct hv_util_service *);
void hv_fcopy_deinit(void);
void hv_fcopy_onchannelcallback(void *);
@ -74,10 +74,10 @@ index b925fa3..10efab0 100644
static inline void hv_poll_channel(struct vmbus_channel *channel,
void (*cb)(void *))
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index d46b4ff..f5f57ee 100644
index 03fc5d3..b0cc6fd 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -1266,7 +1266,7 @@ static void hv_kexec_handler(void)
@@ -1276,7 +1276,7 @@ static void hv_kexec_handler(void)
int cpu;
hv_synic_clockevents_cleanup();
@ -86,7 +86,7 @@ index d46b4ff..f5f57ee 100644
for_each_online_cpu(cpu)
smp_call_function_single(cpu, hv_synic_cleanup, NULL, 1);
hv_cleanup();
@@ -1274,7 +1274,7 @@ static void hv_kexec_handler(void)
@@ -1284,7 +1284,7 @@ static void hv_kexec_handler(void)
static void hv_crash_handler(struct pt_regs *regs)
{
@ -96,5 +96,5 @@ index d46b4ff..f5f57ee 100644
* In crash handler we can't schedule synic cleanup for all CPUs,
* doing the cleanup for current CPU only. This should be sufficient
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From 0b4365983ef397e8b43f9f77e591c4c9f83fca26 Mon Sep 17 00:00:00 2001
From fa3647ae889af3cccaaee37ac0723fc1b74689e3 Mon Sep 17 00:00:00 2001
From: Vitaly Kuznetsov <vkuznets@redhat.com>
Date: Fri, 26 Feb 2016 15:13:18 -0800
Subject: [PATCH 39/46] Drivers: hv: vmbus: avoid unneeded compiler
Subject: [PATCH 35/42] Drivers: hv: vmbus: avoid unneeded compiler
optimizations in vmbus_wait_for_unload()
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
@ -35,5 +35,5 @@ index f70e352..c892db5 100644
continue;
}
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From f3d84d9ee57ed72603ea8334302c2ed2971882b9 Mon Sep 17 00:00:00 2001
From afde92b79d7bbdf25d3f583898cbee4773b07d41 Mon Sep 17 00:00:00 2001
From: Tom Herbert <tom@herbertland.com>
Date: Mon, 7 Mar 2016 14:11:06 -0800
Subject: [PATCH 40/46] kcm: Kernel Connection Multiplexor module
Subject: [PATCH 36/42] kcm: Kernel Connection Multiplexor module
This module implements the Kernel Connection Multiplexor.
@ -2308,5 +2308,5 @@ index 0000000..649d246
+MODULE_LICENSE("GPL");
+MODULE_ALIAS_NETPROTO(PF_KCM);
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From d436f250cb94cdc0f8ceb18c73e641f8285f2c87 Mon Sep 17 00:00:00 2001
From 2f2e6e31ed1b82f1658139e0abe7155ee3755da1 Mon Sep 17 00:00:00 2001
From: Dexuan Cui <decui@microsoft.com>
Date: Mon, 21 Mar 2016 02:51:09 -0700
Subject: [PATCH 41/46] net: add the AF_KCM entries to family name tables
Subject: [PATCH 37/42] net: add the AF_KCM entries to family name tables
This is for the recent kcm driver, which introduces AF_KCM(41) in
b7ac4eb(kcm: Kernel Connection Multiplexor module).
@ -48,5 +48,5 @@ index 0d91f7d..925def4 100644
/*
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From 550437ba0f633b470b719d981110cbd38a4a83c4 Mon Sep 17 00:00:00 2001
From 9e184cb0991a4cc08cd7688f2d4e23740c60e382 Mon Sep 17 00:00:00 2001
From: Courtney Cavin <courtney.cavin@sonymobile.com>
Date: Wed, 27 Apr 2016 12:13:03 -0700
Subject: [PATCH 42/46] net: Add Qualcomm IPC router
Subject: [PATCH 38/42] net: Add Qualcomm IPC router
Add an implementation of Qualcomm's IPC router protocol, used to
communicate with service providing remote processors.
@ -1303,5 +1303,5 @@ index 0000000..84ebce7
+MODULE_DESCRIPTION("Qualcomm IPC-Router SMD interface driver");
+MODULE_LICENSE("GPL v2");
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From 87e2463282f0dc46f866cce2efd5cb36eb964bdb Mon Sep 17 00:00:00 2001
From 51293adacd73d7bc6baee18e87b0d17ad52a61d4 Mon Sep 17 00:00:00 2001
From: Dexuan Cui <decui@microsoft.com>
Date: Sun, 15 May 2016 09:53:11 -0700
Subject: [PATCH 43/46] hv_sock: introduce Hyper-V Sockets
Subject: [PATCH 39/42] hv_sock: introduce Hyper-V Sockets
Hyper-V Sockets (hv_sock) supplies a byte-stream based communication
mechanism between the host and the guest. It's somewhat like TCP over
@ -41,10 +41,10 @@ Origin: https://patchwork.ozlabs.org/patch/622404/
create mode 100644 net/hv_sock/af_hvsock.c
diff --git a/MAINTAINERS b/MAINTAINERS
index fa94182..ff17e76 100644
index 12d49f5..fa87bdd 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -5136,7 +5136,9 @@ F: drivers/input/serio/hyperv-keyboard.c
@@ -5123,7 +5123,9 @@ F: drivers/input/serio/hyperv-keyboard.c
F: drivers/net/hyperv/
F: drivers/scsi/storvsc_drv.c
F: drivers/video/fbdev/hyperv_fb.c
@ -185,7 +185,7 @@ index 0000000..7c8c41e
+
+#endif /* __AF_HVSOCK_H__ */
diff --git a/include/uapi/linux/hyperv.h b/include/uapi/linux/hyperv.h
index e4c0a35..9a698c1 100644
index e347b24..408b832 100644
--- a/include/uapi/linux/hyperv.h
+++ b/include/uapi/linux/hyperv.h
@@ -26,6 +26,7 @@
@ -196,7 +196,7 @@ index e4c0a35..9a698c1 100644
/*
* Framework version for util services.
@@ -395,4 +396,28 @@ struct hv_kvp_ip_msg {
@@ -396,4 +397,28 @@ struct hv_kvp_ip_msg {
struct hv_kvp_ipaddr_value kvp_ip_val;
} __attribute__((packed));
@ -1801,5 +1801,5 @@ index 0000000..b91bd60
+MODULE_DESCRIPTION("Hyper-V Sockets");
+MODULE_LICENSE("Dual BSD/GPL");
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From d3aac2768b413cea5e281290dfe236d7531638ad Mon Sep 17 00:00:00 2001
From b7da2c01ddbb00ed9ccdd3d646f6129f07016cf8 Mon Sep 17 00:00:00 2001
From: Dexuan Cui <decui@microsoft.com>
Date: Mon, 21 Mar 2016 02:53:08 -0700
Subject: [PATCH 44/46] net: add the AF_HYPERV entries to family name tables
Subject: [PATCH 40/42] net: add the AF_HYPERV entries to family name tables
This is for the hv_sock driver, which introduces AF_HYPERV(42).
@ -45,5 +45,5 @@ index 925def4..323f7a3 100644
/*
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From 56e767526878b2fc79b0dfaa2860ed2ae836a52e Mon Sep 17 00:00:00 2001
From cd11346c60451032d97062e25ed025bf692dff91 Mon Sep 17 00:00:00 2001
From: Dexuan Cui <decui@microsoft.com>
Date: Sat, 21 May 2016 16:55:50 +0800
Subject: [PATCH 45/46] Drivers: hv: vmbus: fix the race when querying &
Subject: [PATCH 41/42] Drivers: hv: vmbus: fix the race when querying &
updating the percpu list
There is a rare race when we remove an entry from the global list
@ -129,5 +129,5 @@ index c892db5..0a54317 100644
err_free_chan:
free_channel(newchannel);
--
2.9.3
2.10.0

View File

@ -1,7 +1,7 @@
From 44694d7a14f502c9222ea100ab62fa7030acf548 Mon Sep 17 00:00:00 2001
From 7abd92fd5987e1ad79f2272cbe544be0cfe84165 Mon Sep 17 00:00:00 2001
From: Rolf Neugebauer <rolf.neugebauer@gmail.com>
Date: Mon, 23 May 2016 18:55:45 +0100
Subject: [PATCH 46/46] vmbus: Don't spam the logs with unknown GUIDs
Subject: [PATCH 42/42] vmbus: Don't spam the logs with unknown GUIDs
With Hyper-V sockets device types are introduced on the fly. The pr_info()
then prints a message on every connection, which is way too verbose. Since
@ -26,5 +26,5 @@ index 0a54317..120ee22 100644
}
--
2.9.3
2.10.0