From 8c015fd22c5a34e2f3aea1431f2935dbdee34150 Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Thu, 11 Aug 2016 13:14:16 +0100 Subject: [PATCH 1/2] kernel: Update vsock patches to RFC v6 Series is at <1469716595-13591-1-git-send-email-stefanha@redhat.com>. This corresponds to v7 of the spec, posted in <1470324277-19300-1-git-send-email-stefanha@redhat.com> Also add a "cherry-picked from" to the "vsock: make listener child lock ordering explicit" patch and move it to the head of the series with the other vsock backports. Finally backport three new upstream fixes: 3fda5d6e5801 vhost/vsock: fix vhost virtio_vsock_pkt use-after-free 28ad55578b8a virtio-vsock: fix include guard typo 21bc54fc0cdc vhost/vsock: drop space available check for TX vq These were made on top of the version of the vsock patches which were added to Linux master in v4.8-rc1. This commit is based on the email posting, will replace with with proper cherry-pick separately. Requires corresponding backend changes in Hyperkit Signed-off-by: Ian Campbell --- ...make-find_vqs-checkpatch.pl-friendly.patch | 10 +- ...vmci_transport_notify_ops-structures.patch | 6 +- ...the-area-influenced-by-prepare_to_wa.patch | 6 +- ...stener-child-lock-ordering-explicit.patch} | 10 +- ...-specific-vsock_transport-functions.patch} | 14 +- ...OCK-defer-sock-removal-to-transports.patch | 82 ++++ ...CK-Introduce-virtio_vsock_common.ko.patch} | 402 +++++++++++++----- ...VSOCK-Introduce-virtio_transport.ko.patch} | 277 +++++++----- ...0009-VSOCK-Introduce-vhost_vsock.ko.patch} | 341 ++++++++------- ...0010-VSOCK-Add-Makefile-and-Kconfig.patch} | 46 +- ...vhost-virtio_vsock_pkt-use-after-fre.patch | 53 +++ ...-virtio-vsock-fix-include-guard-typo.patch | 28 ++ ...drop-space-available-check-for-TX-vq.patch | 61 +++ ...host-network-namespace-to-use-AF_VS.patch} | 10 +- ...-the-channel-type-for-Hyper-V-PCI-E.patch} | 6 +- ...vmbus-Use-uuid_le-type-consistently.patch} | 18 +- ...Use-uuid_le_cmp-for-comparing-GUIDs.patch} | 12 +- ...serialize-process_chn_event-and-vmb.patch} | 6 +- ...do-sanity-check-of-channel-state-in.patch} | 6 +- ...fix-rescind-offer-handling-for-devi.patch} | 12 +- ...release-relid-on-error-in-vmbus_pro.patch} | 6 +- ...channge-vmbus_connection.channel_lo.patch} | 6 +- ...-code-duplication-between-vmbus_rec.patch} | 6 +- ...fix-the-building-warning-with-hyper.patch} | 6 +- ...Treat-Fibre-Channel-devices-as-perf.patch} | 6 +- ...s-Add-vendor-and-device-atttributes.patch} | 14 +- ...avoid-infinite-loop-in-init_vp_inde.patch} | 6 +- ...avoid-scheduling-in-interrupt-conte.patch} | 6 +- ...add-a-helper-function-to-set-a-chan.patch} | 6 +- ...define-the-new-offer-type-for-Hyper.patch} | 6 +- ...vmbus_sendpacket_ctl-hvsock-avoid-u.patch} | 6 +- ...define-a-new-VMBus-message-type-for.patch} | 6 +- ...add-a-hvsock-flag-in-struct-hv_driv.patch} | 10 +- ...-add-a-per-channel-rescind-callback.patch} | 6 +- ...add-an-API-vmbus_hvsock_device_unre.patch} | 6 +- ...Give-control-over-how-the-ring-acce.patch} | 6 +- ...-avoid-wait_for_completion-on-crash.patch} | 12 +- ...avoid-unneeded-compiler-optimizatio.patch} | 6 +- ...ernel-Connection-Multiplexor-module.patch} | 6 +- ...F_KCM-entries-to-family-name-tables.patch} | 6 +- ...=> 0041-net-Add-Qualcomm-IPC-router.patch} | 6 +- ...2-hv_sock-introduce-Hyper-V-Sockets.patch} | 10 +- ...YPERV-entries-to-family-name-tables.patch} | 6 +- ...fix-the-race-when-querying-updating.patch} | 6 +- ...-t-spam-the-logs-with-unknown-GUIDs.patch} | 6 +- 45 files changed, 1028 insertions(+), 550 deletions(-) rename alpine/kernel/patches/{0041-VSOCK-make-listener-child-lock-ordering-explicit.patch => 0004-vsock-make-listener-child-lock-ordering-explicit.patch} (89%) rename alpine/kernel/patches/{0004-VSOCK-transport-specific-vsock_transport-functions.patch => 0005-VSOCK-transport-specific-vsock_transport-functions.patch} (83%) create mode 100644 alpine/kernel/patches/0006-VSOCK-defer-sock-removal-to-transports.patch rename alpine/kernel/patches/{0005-VSOCK-Introduce-virtio_vsock_common.ko.patch => 0007-VSOCK-Introduce-virtio_vsock_common.ko.patch} (80%) rename alpine/kernel/patches/{0006-VSOCK-Introduce-virtio_transport.ko.patch => 0008-VSOCK-Introduce-virtio_transport.ko.patch} (74%) rename alpine/kernel/patches/{0007-VSOCK-Introduce-vhost_vsock.ko.patch => 0009-VSOCK-Introduce-vhost_vsock.ko.patch} (73%) rename alpine/kernel/patches/{0008-VSOCK-Add-Makefile-and-Kconfig.patch => 0010-VSOCK-Add-Makefile-and-Kconfig.patch} (68%) create mode 100644 alpine/kernel/patches/0011-vhost-vsock-fix-vhost-virtio_vsock_pkt-use-after-fre.patch create mode 100644 alpine/kernel/patches/0012-virtio-vsock-fix-include-guard-typo.patch create mode 100644 alpine/kernel/patches/0013-vhost-vsock-drop-space-available-check-for-TX-vq.patch rename alpine/kernel/patches/{0009-VSOCK-Only-allow-host-network-namespace-to-use-AF_VS.patch => 0014-VSOCK-Only-allow-host-network-namespace-to-use-AF_VS.patch} (75%) rename alpine/kernel/patches/{0010-drivers-hv-Define-the-channel-type-for-Hyper-V-PCI-E.patch => 0015-drivers-hv-Define-the-channel-type-for-Hyper-V-PCI-E.patch} (91%) rename alpine/kernel/patches/{0011-Drivers-hv-vmbus-Use-uuid_le-type-consistently.patch => 0016-Drivers-hv-vmbus-Use-uuid_le-type-consistently.patch} (95%) rename alpine/kernel/patches/{0012-Drivers-hv-vmbus-Use-uuid_le_cmp-for-comparing-GUIDs.patch => 0017-Drivers-hv-vmbus-Use-uuid_le_cmp-for-comparing-GUIDs.patch} (83%) rename alpine/kernel/patches/{0013-Drivers-hv-vmbus-serialize-process_chn_event-and-vmb.patch => 0018-Drivers-hv-vmbus-serialize-process_chn_event-and-vmb.patch} (95%) rename alpine/kernel/patches/{0014-Drivers-hv-vmbus-do-sanity-check-of-channel-state-in.patch => 0019-Drivers-hv-vmbus-do-sanity-check-of-channel-state-in.patch} (91%) rename alpine/kernel/patches/{0015-Drivers-hv-vmbus-fix-rescind-offer-handling-for-devi.patch => 0020-Drivers-hv-vmbus-fix-rescind-offer-handling-for-devi.patch} (93%) rename alpine/kernel/patches/{0016-Drivers-hv-vmbus-release-relid-on-error-in-vmbus_pro.patch => 0021-Drivers-hv-vmbus-release-relid-on-error-in-vmbus_pro.patch} (94%) rename alpine/kernel/patches/{0017-Drivers-hv-vmbus-channge-vmbus_connection.channel_lo.patch => 0022-Drivers-hv-vmbus-channge-vmbus_connection.channel_lo.patch} (96%) rename alpine/kernel/patches/{0018-Drivers-hv-remove-code-duplication-between-vmbus_rec.patch => 0023-Drivers-hv-remove-code-duplication-between-vmbus_rec.patch} (96%) rename alpine/kernel/patches/{0019-Drivers-hv-vmbus-fix-the-building-warning-with-hyper.patch => 0024-Drivers-hv-vmbus-fix-the-building-warning-with-hyper.patch} (94%) rename alpine/kernel/patches/{0020-Drivers-hv-vmbus-Treat-Fibre-Channel-devices-as-perf.patch => 0025-Drivers-hv-vmbus-Treat-Fibre-Channel-devices-as-perf.patch} (89%) rename alpine/kernel/patches/{0021-Drivers-hv-vmbus-Add-vendor-and-device-atttributes.patch => 0026-Drivers-hv-vmbus-Add-vendor-and-device-atttributes.patch} (96%) rename alpine/kernel/patches/{0022-Drivers-hv-vmbus-avoid-infinite-loop-in-init_vp_inde.patch => 0027-Drivers-hv-vmbus-avoid-infinite-loop-in-init_vp_inde.patch} (92%) rename alpine/kernel/patches/{0023-Drivers-hv-vmbus-avoid-scheduling-in-interrupt-conte.patch => 0028-Drivers-hv-vmbus-avoid-scheduling-in-interrupt-conte.patch} (95%) rename alpine/kernel/patches/{0024-Drivers-hv-vmbus-add-a-helper-function-to-set-a-chan.patch => 0029-Drivers-hv-vmbus-add-a-helper-function-to-set-a-chan.patch} (88%) rename alpine/kernel/patches/{0025-Drivers-hv-vmbus-define-the-new-offer-type-for-Hyper.patch => 0030-Drivers-hv-vmbus-define-the-new-offer-type-for-Hyper.patch} (90%) rename alpine/kernel/patches/{0026-Drivers-hv-vmbus-vmbus_sendpacket_ctl-hvsock-avoid-u.patch => 0031-Drivers-hv-vmbus-vmbus_sendpacket_ctl-hvsock-avoid-u.patch} (91%) rename alpine/kernel/patches/{0027-Drivers-hv-vmbus-define-a-new-VMBus-message-type-for.patch => 0032-Drivers-hv-vmbus-define-a-new-VMBus-message-type-for.patch} (96%) rename alpine/kernel/patches/{0028-Drivers-hv-vmbus-add-a-hvsock-flag-in-struct-hv_driv.patch => 0033-Drivers-hv-vmbus-add-a-hvsock-flag-in-struct-hv_driv.patch} (90%) rename alpine/kernel/patches/{0029-Drivers-hv-vmbus-add-a-per-channel-rescind-callback.patch => 0034-Drivers-hv-vmbus-add-a-per-channel-rescind-callback.patch} (94%) rename alpine/kernel/patches/{0030-Drivers-hv-vmbus-add-an-API-vmbus_hvsock_device_unre.patch => 0035-Drivers-hv-vmbus-add-an-API-vmbus_hvsock_device_unre.patch} (97%) rename alpine/kernel/patches/{0031-Drivers-hv-vmbus-Give-control-over-how-the-ring-acce.patch => 0036-Drivers-hv-vmbus-Give-control-over-how-the-ring-acce.patch} (98%) rename alpine/kernel/patches/{0032-Drivers-hv-vmbus-avoid-wait_for_completion-on-crash.patch => 0037-Drivers-hv-vmbus-avoid-wait_for_completion-on-crash.patch} (92%) rename alpine/kernel/patches/{0033-Drivers-hv-vmbus-avoid-unneeded-compiler-optimizatio.patch => 0038-Drivers-hv-vmbus-avoid-unneeded-compiler-optimizatio.patch} (90%) rename alpine/kernel/patches/{0034-kcm-Kernel-Connection-Multiplexor-module.patch => 0039-kcm-Kernel-Connection-Multiplexor-module.patch} (99%) rename alpine/kernel/patches/{0035-net-add-the-AF_KCM-entries-to-family-name-tables.patch => 0040-net-add-the-AF_KCM-entries-to-family-name-tables.patch} (94%) rename alpine/kernel/patches/{0036-net-Add-Qualcomm-IPC-router.patch => 0041-net-Add-Qualcomm-IPC-router.patch} (99%) rename alpine/kernel/patches/{0037-hv_sock-introduce-Hyper-V-Sockets.patch => 0042-hv_sock-introduce-Hyper-V-Sockets.patch} (99%) rename alpine/kernel/patches/{0038-net-add-the-AF_HYPERV-entries-to-family-name-tables.patch => 0043-net-add-the-AF_HYPERV-entries-to-family-name-tables.patch} (93%) rename alpine/kernel/patches/{0039-Drivers-hv-vmbus-fix-the-race-when-querying-updating.patch => 0044-Drivers-hv-vmbus-fix-the-race-when-querying-updating.patch} (96%) rename alpine/kernel/patches/{0040-vmbus-Don-t-spam-the-logs-with-unknown-GUIDs.patch => 0045-vmbus-Don-t-spam-the-logs-with-unknown-GUIDs.patch} (86%) diff --git a/alpine/kernel/patches/0001-virtio-make-find_vqs-checkpatch.pl-friendly.patch b/alpine/kernel/patches/0001-virtio-make-find_vqs-checkpatch.pl-friendly.patch index 4d64fbd8c..4716a371d 100644 --- a/alpine/kernel/patches/0001-virtio-make-find_vqs-checkpatch.pl-friendly.patch +++ b/alpine/kernel/patches/0001-virtio-make-find_vqs-checkpatch.pl-friendly.patch @@ -1,7 +1,7 @@ -From 4c251c111a65c8eef8e4dcf0b7326ef7761f6ab9 Mon Sep 17 00:00:00 2001 +From 0d67af6648f600656eb20cb2ca1d35cb0985e9bd Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Thu, 17 Dec 2015 16:53:43 +0800 -Subject: [PATCH 01/40] virtio: make find_vqs() checkpatch.pl-friendly +Subject: [PATCH 01/45] virtio: make find_vqs() checkpatch.pl-friendly checkpatch.pl wants arrays of strings declared as follows: @@ -115,10 +115,10 @@ index 1b83159..bf2d130 100644 struct virtio_ccw_device *vcdev = to_vc_device(vdev); unsigned long *indicatorp = NULL; diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c -index 7d3e5d0..0c3691f 100644 +index 56f7e25..66082c9 100644 --- a/drivers/virtio/virtio_balloon.c +++ b/drivers/virtio/virtio_balloon.c -@@ -388,7 +388,7 @@ static int init_vqs(struct virtio_balloon *vb) +@@ -394,7 +394,7 @@ static int init_vqs(struct virtio_balloon *vb) { struct virtqueue *vqs[3]; vq_callback_t *callbacks[] = { balloon_ack, balloon_ack, stats_request }; @@ -215,5 +215,5 @@ index e5ce8ab..6e6cb0c 100644 u64 (*get_features)(struct virtio_device *vdev); int (*finalize_features)(struct virtio_device *vdev); -- -2.9.0 +2.9.3 diff --git a/alpine/kernel/patches/0002-VSOCK-constify-vmci_transport_notify_ops-structures.patch b/alpine/kernel/patches/0002-VSOCK-constify-vmci_transport_notify_ops-structures.patch index a853c3b3d..9f378dd76 100644 --- a/alpine/kernel/patches/0002-VSOCK-constify-vmci_transport_notify_ops-structures.patch +++ b/alpine/kernel/patches/0002-VSOCK-constify-vmci_transport_notify_ops-structures.patch @@ -1,7 +1,7 @@ -From 514c41f6df542ae7b259f5d6aefea4af508fac94 Mon Sep 17 00:00:00 2001 +From f1e0be6f17679e7f532989bae3290bb4ed3ba773 Mon Sep 17 00:00:00 2001 From: Julia Lawall Date: Sat, 21 Nov 2015 18:39:17 +0100 -Subject: [PATCH 02/40] VSOCK: constify vmci_transport_notify_ops structures +Subject: [PATCH 02/45] 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.0 +2.9.3 diff --git a/alpine/kernel/patches/0003-AF_VSOCK-Shrink-the-area-influenced-by-prepare_to_wa.patch b/alpine/kernel/patches/0003-AF_VSOCK-Shrink-the-area-influenced-by-prepare_to_wa.patch index c69a8e09b..8beee3d5f 100644 --- a/alpine/kernel/patches/0003-AF_VSOCK-Shrink-the-area-influenced-by-prepare_to_wa.patch +++ b/alpine/kernel/patches/0003-AF_VSOCK-Shrink-the-area-influenced-by-prepare_to_wa.patch @@ -1,7 +1,7 @@ -From e91f4552f7a858fa44418e1996e21b3098683de4 Mon Sep 17 00:00:00 2001 +From bc63a861a8379269f4a51fdaac3d40f9161aea4d Mon Sep 17 00:00:00 2001 From: Claudio Imbrenda Date: Tue, 22 Mar 2016 17:05:52 +0100 -Subject: [PATCH 03/40] AF_VSOCK: Shrink the area influenced by prepare_to_wait +Subject: [PATCH 03/45] 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.0 +2.9.3 diff --git a/alpine/kernel/patches/0041-VSOCK-make-listener-child-lock-ordering-explicit.patch b/alpine/kernel/patches/0004-vsock-make-listener-child-lock-ordering-explicit.patch similarity index 89% rename from alpine/kernel/patches/0041-VSOCK-make-listener-child-lock-ordering-explicit.patch rename to alpine/kernel/patches/0004-vsock-make-listener-child-lock-ordering-explicit.patch index b8e9bc33a..0d6f30dd7 100644 --- a/alpine/kernel/patches/0041-VSOCK-make-listener-child-lock-ordering-explicit.patch +++ b/alpine/kernel/patches/0004-vsock-make-listener-child-lock-ordering-explicit.patch @@ -1,7 +1,7 @@ -From 4192f672fae559f32d82de72a677701853cc98a7 Mon Sep 17 00:00:00 2001 +From c1bc13ebe28532f99cb6b8edaa57a6aa61adbe58 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Thu, 23 Jun 2016 16:28:58 +0100 -Subject: [PATCH] vsock: make listener child lock ordering explicit +Subject: [PATCH 04/45] 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 @@ -16,12 +16,13 @@ covered the vsock_pending_work() function. Suggested-by: Claudio Imbrenda Signed-off-by: Stefan Hajnoczi Signed-off-by: David S. Miller +(cherry picked from commit 4192f672fae559f32d82de72a677701853cc98a7) --- net/vmw_vsock/af_vsock.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c -index b5f1221..b96ac918 100644 +index b5f1221..b96ac91 100644 --- a/net/vmw_vsock/af_vsock.c +++ b/net/vmw_vsock/af_vsock.c @@ -61,6 +61,14 @@ @@ -57,3 +58,6 @@ index b5f1221..b96ac918 100644 vconnected = vsock_sk(connected); /* If the listener socket has received an error, then we should +-- +2.9.3 + diff --git a/alpine/kernel/patches/0004-VSOCK-transport-specific-vsock_transport-functions.patch b/alpine/kernel/patches/0005-VSOCK-transport-specific-vsock_transport-functions.patch similarity index 83% rename from alpine/kernel/patches/0004-VSOCK-transport-specific-vsock_transport-functions.patch rename to alpine/kernel/patches/0005-VSOCK-transport-specific-vsock_transport-functions.patch index 7a90d01c4..8b4c2c2e1 100644 --- a/alpine/kernel/patches/0004-VSOCK-transport-specific-vsock_transport-functions.patch +++ b/alpine/kernel/patches/0005-VSOCK-transport-specific-vsock_transport-functions.patch @@ -1,7 +1,7 @@ -From c2ec5f1e2aa8784acadbaf9f625d8ca516c81c6b Mon Sep 17 00:00:00 2001 +From fdce29497e948f4a9f9417b4a908ec54feb1c9fa Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi -Date: Thu, 17 Dec 2015 11:10:21 +0800 -Subject: [PATCH 04/40] VSOCK: transport-specific vsock_transport functions +Date: Thu, 28 Jul 2016 15:36:30 +0100 +Subject: [PATCH 05/45] 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 @@ -13,7 +13,7 @@ access transport-specific function pointers. The virtio transport will use this. Signed-off-by: Stefan Hajnoczi -(cherry picked from commit 7740f7aafc9e6f415e8b6d5e8421deae63033b8d) +(from RFC v6 <1469716595-13591-2-git-send-email-stefanha@redhat.com>) --- include/net/af_vsock.h | 3 +++ net/vmw_vsock/af_vsock.c | 9 +++++++++ @@ -34,10 +34,10 @@ index e9eb2d6..23f5525 100644 void vsock_release_pending(struct sock *pending); diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c -index b5f1221..15f9595 100644 +index b96ac91..e34d96f 100644 --- a/net/vmw_vsock/af_vsock.c +++ b/net/vmw_vsock/af_vsock.c -@@ -1987,6 +1987,15 @@ void vsock_core_exit(void) +@@ -1995,6 +1995,15 @@ void vsock_core_exit(void) } EXPORT_SYMBOL_GPL(vsock_core_exit); @@ -54,5 +54,5 @@ index b5f1221..15f9595 100644 MODULE_DESCRIPTION("VMware Virtual Socket Family"); MODULE_VERSION("1.0.1.0-k"); -- -2.9.0 +2.9.3 diff --git a/alpine/kernel/patches/0006-VSOCK-defer-sock-removal-to-transports.patch b/alpine/kernel/patches/0006-VSOCK-defer-sock-removal-to-transports.patch new file mode 100644 index 000000000..41ece9252 --- /dev/null +++ b/alpine/kernel/patches/0006-VSOCK-defer-sock-removal-to-transports.patch @@ -0,0 +1,82 @@ +From 30d9aa8b6b1c2fa720917ede2315223ca0c5d538 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Thu, 28 Jul 2016 15:36:31 +0100 +Subject: [PATCH 06/45] 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 +it in the table of connections after .release(). + +This patch adds the vsock_remove_sock() function and leaves it up to the +transport when to remove the sock. + +Signed-off-by: Stefan Hajnoczi +(from RFC v6 <1469716595-13591-3-git-send-email-stefanha@redhat.com>) +--- + include/net/af_vsock.h | 1 + + net/vmw_vsock/af_vsock.c | 16 ++++++++++------ + net/vmw_vsock/vmci_transport.c | 2 ++ + 3 files changed, 13 insertions(+), 6 deletions(-) + +diff --git a/include/net/af_vsock.h b/include/net/af_vsock.h +index 23f5525..3af0b22 100644 +--- a/include/net/af_vsock.h ++++ b/include/net/af_vsock.h +@@ -180,6 +180,7 @@ void vsock_remove_connected(struct vsock_sock *vsk); + struct sock *vsock_find_bound_socket(struct sockaddr_vm *addr); + struct sock *vsock_find_connected_socket(struct sockaddr_vm *src, + struct sockaddr_vm *dst); ++void vsock_remove_sock(struct vsock_sock *vsk); + void vsock_for_each_connected_socket(void (*fn)(struct sock *sk)); + + #endif /* __AF_VSOCK_H__ */ +diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c +index e34d96f..17dbbe6 100644 +--- a/net/vmw_vsock/af_vsock.c ++++ b/net/vmw_vsock/af_vsock.c +@@ -344,6 +344,16 @@ static bool vsock_in_connected_table(struct vsock_sock *vsk) + return ret; + } + ++void vsock_remove_sock(struct vsock_sock *vsk) ++{ ++ if (vsock_in_bound_table(vsk)) ++ vsock_remove_bound(vsk); ++ ++ if (vsock_in_connected_table(vsk)) ++ vsock_remove_connected(vsk); ++} ++EXPORT_SYMBOL_GPL(vsock_remove_sock); ++ + void vsock_for_each_connected_socket(void (*fn)(struct sock *sk)) + { + int i; +@@ -660,12 +670,6 @@ static void __vsock_release(struct sock *sk) + vsk = vsock_sk(sk); + pending = NULL; /* Compiler warning. */ + +- if (vsock_in_bound_table(vsk)) +- vsock_remove_bound(vsk); +- +- if (vsock_in_connected_table(vsk)) +- vsock_remove_connected(vsk); +- + transport->release(vsk); + + lock_sock(sk); +diff --git a/net/vmw_vsock/vmci_transport.c b/net/vmw_vsock/vmci_transport.c +index 0a369bb..706991e 100644 +--- a/net/vmw_vsock/vmci_transport.c ++++ b/net/vmw_vsock/vmci_transport.c +@@ -1644,6 +1644,8 @@ static void vmci_transport_destruct(struct vsock_sock *vsk) + + static void vmci_transport_release(struct vsock_sock *vsk) + { ++ vsock_remove_sock(vsk); ++ + if (!vmci_handle_is_invalid(vmci_trans(vsk)->dg_handle)) { + vmci_datagram_destroy_handle(vmci_trans(vsk)->dg_handle); + vmci_trans(vsk)->dg_handle = VMCI_INVALID_HANDLE; +-- +2.9.3 + diff --git a/alpine/kernel/patches/0005-VSOCK-Introduce-virtio_vsock_common.ko.patch b/alpine/kernel/patches/0007-VSOCK-Introduce-virtio_vsock_common.ko.patch similarity index 80% rename from alpine/kernel/patches/0005-VSOCK-Introduce-virtio_vsock_common.ko.patch rename to alpine/kernel/patches/0007-VSOCK-Introduce-virtio_vsock_common.ko.patch index 4bbefaea7..314fdcb60 100644 --- a/alpine/kernel/patches/0005-VSOCK-Introduce-virtio_vsock_common.ko.patch +++ b/alpine/kernel/patches/0007-VSOCK-Introduce-virtio_vsock_common.ko.patch @@ -1,31 +1,35 @@ -From c3d222b1921fc5c9a6d10b2d2f2b0141fcc0741e Mon Sep 17 00:00:00 2001 +From 3c8c257cbb209af1d2a8a7bed7e4fb385e82b813 Mon Sep 17 00:00:00 2001 From: Asias He -Date: Thu, 13 Jun 2013 18:27:00 +0800 -Subject: [PATCH 05/40] VSOCK: Introduce virtio_vsock_common.ko +Date: Thu, 28 Jul 2016 15:36:32 +0100 +Subject: [PATCH 07/45] 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. Signed-off-by: Asias He +Signed-off-by: Claudio Imbrenda Signed-off-by: Stefan Hajnoczi +(from RFC v6 <1469716595-13591-4-git-send-email-stefanha@redhat.com>) --- MAINTAINERS | 10 + - include/linux/virtio_vsock.h | 167 ++++ - .../trace/events/vsock_virtio_transport_common.h | 144 ++++ + include/linux/virtio_vsock.h | 154 ++++ + include/net/af_vsock.h | 2 + + .../trace/events/vsock_virtio_transport_common.h | 144 +++ + include/uapi/linux/Kbuild | 1 + include/uapi/linux/virtio_ids.h | 1 + - include/uapi/linux/virtio_vsock.h | 94 +++ - net/vmw_vsock/virtio_transport_common.c | 838 +++++++++++++++++++++ - 6 files changed, 1254 insertions(+) + include/uapi/linux/virtio_vsock.h | 94 ++ + net/vmw_vsock/virtio_transport_common.c | 992 +++++++++++++++++++++ + 8 files changed, 1398 insertions(+) create mode 100644 include/linux/virtio_vsock.h create mode 100644 include/trace/events/vsock_virtio_transport_common.h create mode 100644 include/uapi/linux/virtio_vsock.h create mode 100644 net/vmw_vsock/virtio_transport_common.c diff --git a/MAINTAINERS b/MAINTAINERS -index ab65bbe..b93ba8b 100644 +index 48bd523..3e60f59 100644 --- a/MAINTAINERS +++ b/MAINTAINERS -@@ -11382,6 +11382,16 @@ S: Maintained +@@ -11395,6 +11395,16 @@ S: Maintained F: drivers/media/v4l2-core/videobuf2-* F: include/media/videobuf2-* @@ -44,10 +48,10 @@ index ab65bbe..b93ba8b 100644 S: Maintained diff --git a/include/linux/virtio_vsock.h b/include/linux/virtio_vsock.h new file mode 100644 -index 0000000..4c3d8e6 +index 0000000..9638bfe --- /dev/null +++ b/include/linux/virtio_vsock.h -@@ -0,0 +1,167 @@ +@@ -0,0 +1,154 @@ +#ifndef _LINUX_VIRTIO_VSOCK_H +#define _LINUX_VIRTIO_VSOCK_H + @@ -62,8 +66,6 @@ index 0000000..4c3d8e6 +#define VIRTIO_VSOCK_DEFAULT_RX_BUF_SIZE (1024 * 4) +#define VIRTIO_VSOCK_MAX_BUF_SIZE 0xFFFFFFFFUL +#define VIRTIO_VSOCK_MAX_PKT_BUF_SIZE (1024 * 64) -+#define VIRTIO_VSOCK_MAX_TX_BUF_SIZE (1024 * 1024 * 16) -+#define VIRTIO_VSOCK_MAX_DGRAM_SIZE (1024 * 64) + +enum { + VSOCK_VQ_RX = 0, /* for host to guest data */ @@ -81,8 +83,8 @@ index 0000000..4c3d8e6 + u32 buf_size_min; + u32 buf_size_max; + -+ struct mutex tx_lock; -+ struct mutex rx_lock; ++ spinlock_t tx_lock; ++ spinlock_t rx_lock; + + /* Protected by tx_lock */ + u32 tx_cnt; @@ -103,6 +105,7 @@ index 0000000..4c3d8e6 + void *buf; + u32 len; + u32 off; ++ bool reply; +}; + +struct virtio_vsock_pkt_info { @@ -112,29 +115,17 @@ index 0000000..4c3d8e6 + u16 type; + u16 op; + u32 flags; ++ bool reply; +}; + +struct virtio_transport { + /* This must be the first field */ + struct vsock_transport transport; + -+ /* Send packet for a specific socket */ -+ int (*send_pkt)(struct vsock_sock *vsk, -+ struct virtio_vsock_pkt_info *info); -+ -+ /* Send packet without a socket (e.g. RST). Prefer send_pkt() over -+ * send_pkt_no_sock() when a socket exists. -+ */ -+ int (*send_pkt_no_sock)(struct virtio_vsock_pkt *pkt); ++ /* Takes ownership of the packet */ ++ int (*send_pkt)(struct virtio_vsock_pkt *pkt); +}; + -+struct virtio_vsock_pkt * -+virtio_transport_alloc_pkt(struct virtio_vsock_pkt_info *info, -+ size_t len, -+ u32 src_cid, -+ u32 src_port, -+ u32 dst_cid, -+ u32 dst_port); +ssize_t +virtio_transport_stream_dequeue(struct vsock_sock *vsk, + struct msghdr *msg, @@ -215,6 +206,19 @@ index 0000000..4c3d8e6 +void virtio_transport_put_credit(struct virtio_vsock_sock *vvs, u32 credit); + +#endif /* _LINUX_VIRTIO_VSOCK_H */ +diff --git a/include/net/af_vsock.h b/include/net/af_vsock.h +index 3af0b22..f275896 100644 +--- a/include/net/af_vsock.h ++++ b/include/net/af_vsock.h +@@ -63,6 +63,8 @@ struct vsock_sock { + struct list_head accept_queue; + bool rejected; + struct delayed_work dwork; ++ struct delayed_work close_work; ++ bool close_work_scheduled; + u32 peer_shutdown; + bool sent_request; + bool ignore_connecting_rst; diff --git a/include/trace/events/vsock_virtio_transport_common.h b/include/trace/events/vsock_virtio_transport_common.h new file mode 100644 index 0000000..b7f1d62 @@ -365,6 +369,18 @@ index 0000000..b7f1d62 + +/* This part must be outside protection */ +#include +diff --git a/include/uapi/linux/Kbuild b/include/uapi/linux/Kbuild +index 32152e7..c830e9f 100644 +--- a/include/uapi/linux/Kbuild ++++ b/include/uapi/linux/Kbuild +@@ -448,6 +448,7 @@ header-y += virtio_ring.h + header-y += virtio_rng.h + header-y += virtio_scsi.h + header-y += virtio_types.h ++header-y += virtio_vsock.h + header-y += vm_sockets.h + header-y += vt.h + header-y += wait.h diff --git a/include/uapi/linux/virtio_ids.h b/include/uapi/linux/virtio_ids.h index 77925f5..3228d58 100644 --- a/include/uapi/linux/virtio_ids.h @@ -378,7 +394,7 @@ index 77925f5..3228d58 100644 #endif /* _LINUX_VIRTIO_IDS_H */ diff --git a/include/uapi/linux/virtio_vsock.h b/include/uapi/linux/virtio_vsock.h new file mode 100644 -index 0000000..12946ab +index 0000000..6b011c1 --- /dev/null +++ b/include/uapi/linux/virtio_vsock.h @@ -0,0 +1,94 @@ @@ -423,8 +439,8 @@ index 0000000..12946ab +#include + +struct virtio_vsock_config { -+ __le32 guest_cid; -+}; ++ __le64 guest_cid; ++} __attribute__((packed)); + +enum virtio_vsock_event_id { + VIRTIO_VSOCK_EVENT_TRANSPORT_RESET = 0, @@ -432,12 +448,12 @@ index 0000000..12946ab + +struct virtio_vsock_event { + __le32 id; -+}; ++} __attribute__((packed)); + +struct virtio_vsock_hdr { -+ __le32 src_cid; ++ __le64 src_cid; ++ __le64 dst_cid; + __le32 src_port; -+ __le32 dst_cid; + __le32 dst_port; + __le32 len; + __le16 type; /* enum virtio_vsock_type */ @@ -445,7 +461,7 @@ index 0000000..12946ab + __le32 flags; + __le32 buf_alloc; + __le32 fwd_cnt; -+}; ++} __attribute__((packed)); + +enum virtio_vsock_type { + VIRTIO_VSOCK_TYPE_STREAM = 1, @@ -478,10 +494,10 @@ index 0000000..12946ab +#endif /* _UAPI_LINUX_VIRTIO_VSOCK_H */ diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c new file mode 100644 -index 0000000..5b9e202 +index 0000000..a53b3a1 --- /dev/null +++ b/net/vmw_vsock/virtio_transport_common.c -@@ -0,0 +1,838 @@ +@@ -0,0 +1,992 @@ +/* + * common code for virtio vsock + * @@ -491,6 +507,7 @@ index 0000000..5b9e202 + * + * This work is licensed under the terms of the GNU GPL, version 2. + */ ++#include +#include +#include +#include @@ -505,6 +522,9 @@ index 0000000..5b9e202 +#define CREATE_TRACE_POINTS +#include + ++/* How long to wait for graceful shutdown of a connection */ ++#define VSOCK_CLOSE_TIMEOUT (8 * HZ) ++ +static const struct virtio_transport *virtio_transport_get_ops(void) +{ + const struct vsock_transport *t = vsock_core_get_transport(); @@ -512,17 +532,6 @@ index 0000000..5b9e202 + return container_of(t, struct virtio_transport, transport); +} + -+static int virtio_transport_send_pkt(struct vsock_sock *vsk, -+ struct virtio_vsock_pkt_info *info) -+{ -+ return virtio_transport_get_ops()->send_pkt(vsk, info); -+} -+ -+static int virtio_transport_send_pkt_no_sock(struct virtio_vsock_pkt *pkt) -+{ -+ return virtio_transport_get_ops()->send_pkt_no_sock(pkt); -+} -+ +struct virtio_vsock_pkt * +virtio_transport_alloc_pkt(struct virtio_vsock_pkt_info *info, + size_t len, @@ -540,13 +549,14 @@ index 0000000..5b9e202 + + pkt->hdr.type = cpu_to_le16(info->type); + pkt->hdr.op = cpu_to_le16(info->op); -+ pkt->hdr.src_cid = cpu_to_le32(src_cid); ++ pkt->hdr.src_cid = cpu_to_le64(src_cid); ++ pkt->hdr.dst_cid = cpu_to_le64(dst_cid); + pkt->hdr.src_port = cpu_to_le32(src_port); -+ pkt->hdr.dst_cid = cpu_to_le32(dst_cid); + pkt->hdr.dst_port = cpu_to_le32(dst_port); + pkt->hdr.flags = cpu_to_le32(info->flags); + pkt->len = len; + pkt->hdr.len = cpu_to_le32(len); ++ pkt->reply = info->reply; + + if (info->msg && len > 0) { + pkt->buf = kmalloc(len, GFP_KERNEL); @@ -574,6 +584,50 @@ index 0000000..5b9e202 +} +EXPORT_SYMBOL_GPL(virtio_transport_alloc_pkt); + ++static int virtio_transport_send_pkt_info(struct vsock_sock *vsk, ++ struct virtio_vsock_pkt_info *info) ++{ ++ u32 src_cid, src_port, dst_cid, dst_port; ++ struct virtio_vsock_sock *vvs; ++ struct virtio_vsock_pkt *pkt; ++ u32 pkt_len = info->pkt_len; ++ ++ src_cid = vm_sockets_get_local_cid(); ++ src_port = vsk->local_addr.svm_port; ++ if (!info->remote_cid) { ++ dst_cid = vsk->remote_addr.svm_cid; ++ dst_port = vsk->remote_addr.svm_port; ++ } else { ++ dst_cid = info->remote_cid; ++ dst_port = info->remote_port; ++ } ++ ++ vvs = vsk->trans; ++ ++ /* we can send less than pkt_len bytes */ ++ if (pkt_len > VIRTIO_VSOCK_DEFAULT_RX_BUF_SIZE) ++ pkt_len = VIRTIO_VSOCK_DEFAULT_RX_BUF_SIZE; ++ ++ /* virtio_transport_get_credit might return less than pkt_len credit */ ++ pkt_len = virtio_transport_get_credit(vvs, pkt_len); ++ ++ /* Do not send zero length OP_RW pkt */ ++ if (pkt_len == 0 && info->op == VIRTIO_VSOCK_OP_RW) ++ return pkt_len; ++ ++ pkt = virtio_transport_alloc_pkt(info, pkt_len, ++ src_cid, src_port, ++ dst_cid, dst_port); ++ if (!pkt) { ++ virtio_transport_put_credit(vvs, pkt_len); ++ return -ENOMEM; ++ } ++ ++ virtio_transport_inc_tx_pkt(vvs, pkt); ++ ++ return virtio_transport_get_ops()->send_pkt(pkt); ++} ++ +static void virtio_transport_inc_rx_pkt(struct virtio_vsock_sock *vvs, + struct virtio_vsock_pkt *pkt) +{ @@ -589,10 +643,10 @@ index 0000000..5b9e202 + +void virtio_transport_inc_tx_pkt(struct virtio_vsock_sock *vvs, struct virtio_vsock_pkt *pkt) +{ -+ mutex_lock(&vvs->tx_lock); ++ spin_lock_bh(&vvs->tx_lock); + pkt->hdr.fwd_cnt = cpu_to_le32(vvs->fwd_cnt); + pkt->hdr.buf_alloc = cpu_to_le32(vvs->buf_alloc); -+ mutex_unlock(&vvs->tx_lock); ++ spin_unlock_bh(&vvs->tx_lock); +} +EXPORT_SYMBOL_GPL(virtio_transport_inc_tx_pkt); + @@ -600,12 +654,12 @@ index 0000000..5b9e202 +{ + u32 ret; + -+ mutex_lock(&vvs->tx_lock); ++ spin_lock_bh(&vvs->tx_lock); + ret = vvs->peer_buf_alloc - (vvs->tx_cnt - vvs->peer_fwd_cnt); + if (ret > credit) + ret = credit; + vvs->tx_cnt += ret; -+ mutex_unlock(&vvs->tx_lock); ++ spin_unlock_bh(&vvs->tx_lock); + + return ret; +} @@ -613,9 +667,9 @@ index 0000000..5b9e202 + +void virtio_transport_put_credit(struct virtio_vsock_sock *vvs, u32 credit) +{ -+ mutex_lock(&vvs->tx_lock); ++ spin_lock_bh(&vvs->tx_lock); + vvs->tx_cnt -= credit; -+ mutex_unlock(&vvs->tx_lock); ++ spin_unlock_bh(&vvs->tx_lock); +} +EXPORT_SYMBOL_GPL(virtio_transport_put_credit); + @@ -628,7 +682,7 @@ index 0000000..5b9e202 + .type = type, + }; + -+ return virtio_transport_send_pkt(vsk, &info); ++ return virtio_transport_send_pkt_info(vsk, &info); +} + +static ssize_t @@ -641,10 +695,8 @@ index 0000000..5b9e202 + size_t bytes, total = 0; + int err = -EFAULT; + -+ mutex_lock(&vvs->rx_lock); -+ while (total < len && -+ vvs->rx_bytes > 0 && -+ !list_empty(&vvs->rx_queue)) { ++ spin_lock_bh(&vvs->rx_lock); ++ while (total < len && !list_empty(&vvs->rx_queue)) { + pkt = list_first_entry(&vvs->rx_queue, + struct virtio_vsock_pkt, list); + @@ -652,9 +704,17 @@ index 0000000..5b9e202 + if (bytes > pkt->len - pkt->off) + bytes = pkt->len - pkt->off; + ++ /* sk_lock is held by caller so no one else can dequeue. ++ * Unlock rx_lock since memcpy_to_msg() may sleep. ++ */ ++ spin_unlock_bh(&vvs->rx_lock); ++ + err = memcpy_to_msg(msg, pkt->buf + pkt->off, bytes); + if (err) + goto out; ++ ++ spin_lock_bh(&vvs->rx_lock); ++ + total += bytes; + pkt->off += bytes; + if (pkt->off == pkt->len) { @@ -663,7 +723,7 @@ index 0000000..5b9e202 + virtio_transport_free_pkt(pkt); + } + } -+ mutex_unlock(&vvs->rx_lock); ++ spin_unlock_bh(&vvs->rx_lock); + + /* Send a credit pkt to peer */ + virtio_transport_send_credit_update(vsk, VIRTIO_VSOCK_TYPE_STREAM, @@ -672,7 +732,6 @@ index 0000000..5b9e202 + return total; + +out: -+ mutex_unlock(&vvs->rx_lock); + if (total) + err = total; + return err; @@ -704,9 +763,9 @@ index 0000000..5b9e202 + struct virtio_vsock_sock *vvs = vsk->trans; + s64 bytes; + -+ mutex_lock(&vvs->rx_lock); ++ spin_lock_bh(&vvs->rx_lock); + bytes = vvs->rx_bytes; -+ mutex_unlock(&vvs->rx_lock); ++ spin_unlock_bh(&vvs->rx_lock); + + return bytes; +} @@ -729,9 +788,9 @@ index 0000000..5b9e202 + struct virtio_vsock_sock *vvs = vsk->trans; + s64 bytes; + -+ mutex_lock(&vvs->tx_lock); ++ spin_lock_bh(&vvs->tx_lock); + bytes = virtio_transport_has_space(vsk); -+ mutex_unlock(&vvs->tx_lock); ++ spin_unlock_bh(&vvs->tx_lock); + + return bytes; +} @@ -763,8 +822,8 @@ index 0000000..5b9e202 + + vvs->buf_alloc = vvs->buf_size; + -+ mutex_init(&vvs->rx_lock); -+ mutex_init(&vvs->tx_lock); ++ spin_lock_init(&vvs->rx_lock); ++ spin_lock_init(&vvs->tx_lock); + INIT_LIST_HEAD(&vvs->rx_queue); + + return 0; @@ -962,7 +1021,7 @@ index 0000000..5b9e202 + .type = VIRTIO_VSOCK_TYPE_STREAM, + }; + -+ return virtio_transport_send_pkt(vsk, &info); ++ return virtio_transport_send_pkt_info(vsk, &info); +} +EXPORT_SYMBOL_GPL(virtio_transport_connect); + @@ -977,22 +1036,10 @@ index 0000000..5b9e202 + VIRTIO_VSOCK_SHUTDOWN_SEND : 0), + }; + -+ return virtio_transport_send_pkt(vsk, &info); ++ return virtio_transport_send_pkt_info(vsk, &info); +} +EXPORT_SYMBOL_GPL(virtio_transport_shutdown); + -+void virtio_transport_release(struct vsock_sock *vsk) -+{ -+ struct sock *sk = &vsk->sk; -+ -+ /* Tell other side to terminate connection */ -+ if (sk->sk_type == SOCK_STREAM && -+ vsk->peer_shutdown != SHUTDOWN_MASK && -+ sk->sk_state == SS_CONNECTED) -+ (void)virtio_transport_shutdown(vsk, SHUTDOWN_MASK); -+} -+EXPORT_SYMBOL_GPL(virtio_transport_release); -+ +int +virtio_transport_dgram_enqueue(struct vsock_sock *vsk, + struct sockaddr_vm *remote_addr, @@ -1015,7 +1062,7 @@ index 0000000..5b9e202 + .pkt_len = len, + }; + -+ return virtio_transport_send_pkt(vsk, &info); ++ return virtio_transport_send_pkt_info(vsk, &info); +} +EXPORT_SYMBOL_GPL(virtio_transport_stream_enqueue); + @@ -1027,29 +1074,31 @@ index 0000000..5b9e202 +} +EXPORT_SYMBOL_GPL(virtio_transport_destruct); + -+static int virtio_transport_send_reset(struct vsock_sock *vsk, -+ struct virtio_vsock_pkt *pkt) ++static int virtio_transport_reset(struct vsock_sock *vsk, ++ struct virtio_vsock_pkt *pkt) +{ + struct virtio_vsock_pkt_info info = { + .op = VIRTIO_VSOCK_OP_RST, + .type = VIRTIO_VSOCK_TYPE_STREAM, ++ .reply = !!pkt, + }; + + /* Send RST only if the original pkt is not a RST pkt */ -+ if (le16_to_cpu(pkt->hdr.op) == VIRTIO_VSOCK_OP_RST) ++ if (pkt && le16_to_cpu(pkt->hdr.op) == VIRTIO_VSOCK_OP_RST) + return 0; + -+ return virtio_transport_send_pkt(vsk, &info); ++ return virtio_transport_send_pkt_info(vsk, &info); +} + +/* Normally packets are associated with a socket. There may be no socket if an + * attempt was made to connect to a socket that does not exist. + */ -+static int virtio_transport_send_reset_no_sock(struct virtio_vsock_pkt *pkt) ++static int virtio_transport_reset_no_sock(struct virtio_vsock_pkt *pkt) +{ + struct virtio_vsock_pkt_info info = { + .op = VIRTIO_VSOCK_OP_RST, + .type = le16_to_cpu(pkt->hdr.type), ++ .reply = true, + }; + + /* Send RST only if the original pkt is not a RST pkt */ @@ -1064,9 +1113,117 @@ index 0000000..5b9e202 + if (!pkt) + return -ENOMEM; + -+ return virtio_transport_send_pkt_no_sock(pkt); ++ return virtio_transport_get_ops()->send_pkt(pkt); +} + ++static void virtio_transport_wait_close(struct sock *sk, long timeout) ++{ ++ if (timeout) { ++ DEFINE_WAIT(wait); ++ ++ do { ++ prepare_to_wait(sk_sleep(sk), &wait, ++ TASK_INTERRUPTIBLE); ++ if (sk_wait_event(sk, &timeout, ++ sock_flag(sk, SOCK_DONE))) ++ break; ++ } while (!signal_pending(current) && timeout); ++ ++ finish_wait(sk_sleep(sk), &wait); ++ } ++} ++ ++static void virtio_transport_do_close(struct vsock_sock *vsk, ++ bool cancel_timeout) ++{ ++ struct sock *sk = sk_vsock(vsk); ++ ++ sock_set_flag(sk, SOCK_DONE); ++ vsk->peer_shutdown = SHUTDOWN_MASK; ++ if (vsock_stream_has_data(vsk) <= 0) ++ sk->sk_state = SS_DISCONNECTING; ++ sk->sk_state_change(sk); ++ ++ if (vsk->close_work_scheduled && ++ (!cancel_timeout || cancel_delayed_work(&vsk->close_work))) { ++ vsk->close_work_scheduled = false; ++ ++ vsock_remove_sock(vsk); ++ ++ /* Release refcnt obtained when we scheduled the timeout */ ++ sock_put(sk); ++ } ++} ++ ++static void virtio_transport_close_timeout(struct work_struct *work) ++{ ++ struct vsock_sock *vsk = ++ container_of(work, struct vsock_sock, close_work.work); ++ struct sock *sk = sk_vsock(vsk); ++ ++ sock_hold(sk); ++ lock_sock(sk); ++ ++ if (!sock_flag(sk, SOCK_DONE)) { ++ (void)virtio_transport_reset(vsk, NULL); ++ ++ virtio_transport_do_close(vsk, false); ++ } ++ ++ vsk->close_work_scheduled = false; ++ ++ release_sock(sk); ++ sock_put(sk); ++} ++ ++/* User context, vsk->sk is locked */ ++static bool virtio_transport_close(struct vsock_sock *vsk) ++{ ++ struct sock *sk = &vsk->sk; ++ ++ if (!(sk->sk_state == SS_CONNECTED || ++ sk->sk_state == SS_DISCONNECTING)) ++ return true; ++ ++ /* Already received SHUTDOWN from peer, reply with RST */ ++ if ((vsk->peer_shutdown & SHUTDOWN_MASK) == SHUTDOWN_MASK) { ++ (void)virtio_transport_reset(vsk, NULL); ++ return true; ++ } ++ ++ if ((sk->sk_shutdown & SHUTDOWN_MASK) != SHUTDOWN_MASK) ++ (void)virtio_transport_shutdown(vsk, SHUTDOWN_MASK); ++ ++ if (sock_flag(sk, SOCK_LINGER) && !(current->flags & PF_EXITING)) ++ virtio_transport_wait_close(sk, sk->sk_lingertime); ++ ++ if (sock_flag(sk, SOCK_DONE)) { ++ return true; ++ } ++ ++ sock_hold(sk); ++ INIT_DELAYED_WORK(&vsk->close_work, ++ virtio_transport_close_timeout); ++ vsk->close_work_scheduled = true; ++ schedule_delayed_work(&vsk->close_work, VSOCK_CLOSE_TIMEOUT); ++ return false; ++} ++ ++void virtio_transport_release(struct vsock_sock *vsk) ++{ ++ struct sock *sk = &vsk->sk; ++ bool remove_sock = true; ++ ++ lock_sock(sk); ++ if (sk->sk_type == SOCK_STREAM) ++ remove_sock = virtio_transport_close(vsk); ++ release_sock(sk); ++ ++ if (remove_sock) ++ vsock_remove_sock(vsk); ++} ++EXPORT_SYMBOL_GPL(virtio_transport_release); ++ +static int +virtio_transport_recv_connecting(struct sock *sk, + struct virtio_vsock_pkt *pkt) @@ -1096,7 +1253,7 @@ index 0000000..5b9e202 + return 0; + +destroy: -+ virtio_transport_send_reset(vsk, pkt); ++ virtio_transport_reset(vsk, pkt); + sk->sk_state = SS_UNCONNECTED; + sk->sk_err = skerr; + sk->sk_error_report(sk); @@ -1116,10 +1273,10 @@ index 0000000..5b9e202 + pkt->len = le32_to_cpu(pkt->hdr.len); + pkt->off = 0; + -+ mutex_lock(&vvs->rx_lock); ++ spin_lock_bh(&vvs->rx_lock); + virtio_transport_inc_rx_pkt(vvs, pkt); + list_add_tail(&pkt->list, &vvs->rx_queue); -+ mutex_unlock(&vvs->rx_lock); ++ spin_unlock_bh(&vvs->rx_lock); + + sk->sk_data_ready(sk); + return err; @@ -1138,11 +1295,7 @@ index 0000000..5b9e202 + sk->sk_state_change(sk); + break; + case VIRTIO_VSOCK_OP_RST: -+ sock_set_flag(sk, SOCK_DONE); -+ vsk->peer_shutdown = SHUTDOWN_MASK; -+ if (vsock_stream_has_data(vsk) <= 0) -+ sk->sk_state = SS_DISCONNECTING; -+ sk->sk_state_change(sk); ++ virtio_transport_do_close(vsk, true); + break; + default: + err = -EINVAL; @@ -1153,6 +1306,16 @@ index 0000000..5b9e202 + return err; +} + ++static void ++virtio_transport_recv_disconnecting(struct sock *sk, ++ struct virtio_vsock_pkt *pkt) ++{ ++ struct vsock_sock *vsk = vsock_sk(sk); ++ ++ if (le16_to_cpu(pkt->hdr.op) == VIRTIO_VSOCK_OP_RST) ++ virtio_transport_do_close(vsk, true); ++} ++ +static int +virtio_transport_send_response(struct vsock_sock *vsk, + struct virtio_vsock_pkt *pkt) @@ -1162,9 +1325,10 @@ index 0000000..5b9e202 + .type = VIRTIO_VSOCK_TYPE_STREAM, + .remote_cid = le32_to_cpu(pkt->hdr.src_cid), + .remote_port = le32_to_cpu(pkt->hdr.src_port), ++ .reply = true, + }; + -+ return virtio_transport_send_pkt(vsk, &info); ++ return virtio_transport_send_pkt_info(vsk, &info); +} + +/* Handle server socket */ @@ -1176,25 +1340,25 @@ index 0000000..5b9e202 + struct sock *child; + + if (le16_to_cpu(pkt->hdr.op) != VIRTIO_VSOCK_OP_REQUEST) { -+ virtio_transport_send_reset(vsk, pkt); ++ virtio_transport_reset(vsk, pkt); + return -EINVAL; + } + + if (sk_acceptq_is_full(sk)) { -+ virtio_transport_send_reset(vsk, pkt); ++ virtio_transport_reset(vsk, pkt); + return -ENOMEM; + } + + child = __vsock_create(sock_net(sk), NULL, sk, GFP_KERNEL, + sk->sk_type, 0); + if (!child) { -+ virtio_transport_send_reset(vsk, pkt); ++ virtio_transport_reset(vsk, pkt); + return -ENOMEM; + } + + sk->sk_ack_backlog++; + -+ lock_sock(child); ++ lock_sock_nested(child, SINGLE_DEPTH_NESTING); + + child->sk_state = SS_CONNECTED; + @@ -1214,7 +1378,7 @@ index 0000000..5b9e202 + return 0; +} + -+static void virtio_transport_space_update(struct sock *sk, ++static bool virtio_transport_space_update(struct sock *sk, + struct virtio_vsock_pkt *pkt) +{ + struct vsock_sock *vsk = vsock_sk(sk); @@ -1222,14 +1386,12 @@ index 0000000..5b9e202 + bool space_available; + + /* buf_alloc and fwd_cnt is always included in the hdr */ -+ mutex_lock(&vvs->tx_lock); ++ spin_lock_bh(&vvs->tx_lock); + vvs->peer_buf_alloc = le32_to_cpu(pkt->hdr.buf_alloc); + vvs->peer_fwd_cnt = le32_to_cpu(pkt->hdr.fwd_cnt); + space_available = virtio_transport_has_space(vsk); -+ mutex_unlock(&vvs->tx_lock); -+ -+ if (space_available) -+ sk->sk_write_space(sk); ++ spin_unlock_bh(&vvs->tx_lock); ++ return space_available; +} + +/* We are under the virtio-vsock's vsock->rx_lock or vhost-vsock's vq->mutex @@ -1240,6 +1402,7 @@ index 0000000..5b9e202 + struct sockaddr_vm src, dst; + struct vsock_sock *vsk; + struct sock *sk; ++ bool space_available; + + vsock_addr_init(&src, le32_to_cpu(pkt->hdr.src_cid), + le32_to_cpu(pkt->hdr.src_port)); @@ -1256,7 +1419,7 @@ index 0000000..5b9e202 + le32_to_cpu(pkt->hdr.fwd_cnt)); + + if (le16_to_cpu(pkt->hdr.type) != VIRTIO_VSOCK_TYPE_STREAM) { -+ (void)virtio_transport_send_reset_no_sock(pkt); ++ (void)virtio_transport_reset_no_sock(pkt); + goto free_pkt; + } + @@ -1267,20 +1430,23 @@ index 0000000..5b9e202 + if (!sk) { + sk = vsock_find_bound_socket(&dst); + if (!sk) { -+ (void)virtio_transport_send_reset_no_sock(pkt); ++ (void)virtio_transport_reset_no_sock(pkt); + goto free_pkt; + } + } + + vsk = vsock_sk(sk); + -+ virtio_transport_space_update(sk, pkt); ++ space_available = virtio_transport_space_update(sk, pkt); + + lock_sock(sk); + + /* Update CID in case it has changed after a transport reset event */ + vsk->local_addr.svm_cid = dst.svm_cid; + ++ if (space_available) ++ sk->sk_write_space(sk); ++ + switch (sk->sk_state) { + case VSOCK_SS_LISTEN: + virtio_transport_recv_listen(sk, pkt); @@ -1293,6 +1459,10 @@ index 0000000..5b9e202 + case SS_CONNECTED: + virtio_transport_recv_connected(sk, pkt); + break; ++ case SS_DISCONNECTING: ++ virtio_transport_recv_disconnecting(sk, pkt); ++ virtio_transport_free_pkt(pkt); ++ break; + default: + virtio_transport_free_pkt(pkt); + break; @@ -1321,5 +1491,5 @@ index 0000000..5b9e202 +MODULE_AUTHOR("Asias He"); +MODULE_DESCRIPTION("common code for virtio vsock"); -- -2.9.0 +2.9.3 diff --git a/alpine/kernel/patches/0006-VSOCK-Introduce-virtio_transport.ko.patch b/alpine/kernel/patches/0008-VSOCK-Introduce-virtio_transport.ko.patch similarity index 74% rename from alpine/kernel/patches/0006-VSOCK-Introduce-virtio_transport.ko.patch rename to alpine/kernel/patches/0008-VSOCK-Introduce-virtio_transport.ko.patch index e71db3623..13263827c 100644 --- a/alpine/kernel/patches/0006-VSOCK-Introduce-virtio_transport.ko.patch +++ b/alpine/kernel/patches/0008-VSOCK-Introduce-virtio_transport.ko.patch @@ -1,24 +1,25 @@ -From 425faa8655fbbe9191ddc88fe57097e8be2fdf44 Mon Sep 17 00:00:00 2001 +From c6a12128d92b89b3d424e7cd3dd3c6cbfe4e1011 Mon Sep 17 00:00:00 2001 From: Asias He -Date: Thu, 13 Jun 2013 18:28:48 +0800 -Subject: [PATCH 06/40] VSOCK: Introduce virtio_transport.ko +Date: Thu, 28 Jul 2016 15:36:33 +0100 +Subject: [PATCH 08/45] VSOCK: Introduce virtio_transport.ko VM sockets virtio transport implementation. This driver runs in the guest. Signed-off-by: Asias He Signed-off-by: Stefan Hajnoczi +(from RFC v6 <1469716595-13591-5-git-send-email-stefanha@redhat.com>) --- MAINTAINERS | 1 + - net/vmw_vsock/virtio_transport.c | 584 +++++++++++++++++++++++++++++++++++++++ - 2 files changed, 585 insertions(+) + net/vmw_vsock/virtio_transport.c | 624 +++++++++++++++++++++++++++++++++++++++ + 2 files changed, 625 insertions(+) create mode 100644 net/vmw_vsock/virtio_transport.c diff --git a/MAINTAINERS b/MAINTAINERS -index b93ba8b..82d1123 100644 +index 3e60f59..c7e4c9a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS -@@ -11391,6 +11391,7 @@ S: Maintained +@@ -11404,6 +11404,7 @@ S: Maintained F: include/linux/virtio_vsock.h F: include/uapi/linux/virtio_vsock.h F: net/vmw_vsock/virtio_transport_common.c @@ -28,10 +29,10 @@ index b93ba8b..82d1123 100644 M: Stephen Chandler Paul diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c new file mode 100644 -index 0000000..45472e0 +index 0000000..699dfab --- /dev/null +++ b/net/vmw_vsock/virtio_transport.c -@@ -0,0 +1,584 @@ +@@ -0,0 +1,624 @@ +/* + * virtio transport for vsock + * @@ -47,6 +48,7 @@ index 0000000..45472e0 +#include +#include +#include ++#include +#include +#include +#include @@ -58,7 +60,6 @@ index 0000000..45472e0 +static struct workqueue_struct *virtio_vsock_workqueue; +static struct virtio_vsock *the_virtio_vsock; +static DEFINE_MUTEX(the_virtio_vsock_mutex); /* protects the_virtio_vsock */ -+static void virtio_vsock_rx_fill(struct virtio_vsock *vsock); + +struct virtio_vsock { + struct virtio_device *vdev; @@ -69,13 +70,16 @@ index 0000000..45472e0 + struct work_struct rx_work; + struct work_struct event_work; + -+ wait_queue_head_t tx_wait; /* for waiting for tx resources */ -+ + /* The following fields are protected by tx_lock. vqs[VSOCK_VQ_TX] + * must be accessed with tx_lock held. + */ + struct mutex tx_lock; -+ u32 total_tx_buf; ++ ++ struct work_struct send_pkt_work; ++ spinlock_t send_pkt_list_lock; ++ struct list_head send_pkt_list; ++ ++ atomic_t queued_replies; + + /* The following fields are protected by rx_lock. vqs[VSOCK_VQ_RX] + * must be accessed with rx_lock held. @@ -105,45 +109,88 @@ index 0000000..45472e0 + return vsock->guest_cid; +} + -+static int -+virtio_transport_send_one_pkt(struct virtio_vsock *vsock, -+ struct virtio_vsock_pkt *pkt) ++static void ++virtio_transport_send_pkt_work(struct work_struct *work) +{ -+ struct scatterlist hdr, buf, *sgs[2]; -+ int ret, in_sg = 0, out_sg = 0; ++ struct virtio_vsock *vsock = ++ container_of(work, struct virtio_vsock, send_pkt_work); + struct virtqueue *vq; -+ DEFINE_WAIT(wait); ++ bool added = false; ++ bool restart_rx = false; ++ ++ mutex_lock(&vsock->tx_lock); + + vq = vsock->vqs[VSOCK_VQ_TX]; + -+ /* Put pkt in the virtqueue */ -+ sg_init_one(&hdr, &pkt->hdr, sizeof(pkt->hdr)); -+ sgs[out_sg++] = &hdr; -+ if (pkt->buf) { -+ sg_init_one(&buf, pkt->buf, pkt->len); -+ sgs[out_sg++] = &buf; ++ /* Avoid unnecessary interrupts while we're processing the ring */ ++ virtqueue_disable_cb(vq); ++ ++ for (;;) { ++ struct virtio_vsock_pkt *pkt; ++ struct scatterlist hdr, buf, *sgs[2]; ++ int ret, in_sg = 0, out_sg = 0; ++ bool reply; ++ ++ spin_lock_bh(&vsock->send_pkt_list_lock); ++ if (list_empty(&vsock->send_pkt_list)) { ++ spin_unlock_bh(&vsock->send_pkt_list_lock); ++ virtqueue_enable_cb(vq); ++ break; ++ } ++ ++ pkt = list_first_entry(&vsock->send_pkt_list, ++ struct virtio_vsock_pkt, list); ++ list_del_init(&pkt->list); ++ spin_unlock_bh(&vsock->send_pkt_list_lock); ++ ++ reply = pkt->reply; ++ ++ sg_init_one(&hdr, &pkt->hdr, sizeof(pkt->hdr)); ++ sgs[out_sg++] = &hdr; ++ if (pkt->buf) { ++ sg_init_one(&buf, pkt->buf, pkt->len); ++ sgs[out_sg++] = &buf; ++ } ++ ++ ret = virtqueue_add_sgs(vq, sgs, out_sg, in_sg, pkt, GFP_KERNEL); ++ if (ret < 0) { ++ spin_lock_bh(&vsock->send_pkt_list_lock); ++ list_add(&pkt->list, &vsock->send_pkt_list); ++ spin_unlock_bh(&vsock->send_pkt_list_lock); ++ ++ if (!virtqueue_enable_cb(vq) && ret == -ENOSPC) ++ continue; /* retry now that we have more space */ ++ break; ++ } ++ ++ if (reply) { ++ struct virtqueue *rx_vq = vsock->vqs[VSOCK_VQ_RX]; ++ int val; ++ ++ val = atomic_dec_return(&vsock->queued_replies); ++ ++ /* Do we now have resources to resume rx processing? */ ++ if (val + 1 == virtqueue_get_vring_size(rx_vq)) ++ restart_rx = true; ++ } ++ ++ added = true; + } + -+ mutex_lock(&vsock->tx_lock); -+ while ((ret = virtqueue_add_sgs(vq, sgs, out_sg, in_sg, pkt, -+ GFP_KERNEL)) < 0) { -+ prepare_to_wait_exclusive(&vsock->tx_wait, &wait, -+ TASK_UNINTERRUPTIBLE); -+ mutex_unlock(&vsock->tx_lock); -+ schedule(); -+ mutex_lock(&vsock->tx_lock); -+ finish_wait(&vsock->tx_wait, &wait); -+ } -+ virtqueue_kick(vq); ++ if (added) ++ virtqueue_kick(vq); ++ + mutex_unlock(&vsock->tx_lock); + -+ return pkt->len; ++ if (restart_rx) ++ queue_work(virtio_vsock_workqueue, &vsock->rx_work); +} + +static int -+virtio_transport_send_pkt_no_sock(struct virtio_vsock_pkt *pkt) ++virtio_transport_send_pkt(struct virtio_vsock_pkt *pkt) +{ + struct virtio_vsock *vsock; ++ int len = pkt->len; + + vsock = virtio_vsock_get(); + if (!vsock) { @@ -151,71 +198,15 @@ index 0000000..45472e0 + return -ENODEV; + } + -+ return virtio_transport_send_one_pkt(vsock, pkt); -+} ++ if (pkt->reply) ++ atomic_inc(&vsock->queued_replies); + -+static int -+virtio_transport_send_pkt(struct vsock_sock *vsk, -+ struct virtio_vsock_pkt_info *info) -+{ -+ u32 src_cid, src_port, dst_cid, dst_port; -+ struct virtio_vsock_sock *vvs; -+ struct virtio_vsock_pkt *pkt; -+ struct virtio_vsock *vsock; -+ u32 pkt_len = info->pkt_len; -+ DEFINE_WAIT(wait); ++ spin_lock_bh(&vsock->send_pkt_list_lock); ++ list_add_tail(&pkt->list, &vsock->send_pkt_list); ++ spin_unlock_bh(&vsock->send_pkt_list_lock); + -+ vsock = virtio_vsock_get(); -+ if (!vsock) -+ return -ENODEV; -+ -+ src_cid = virtio_transport_get_local_cid(); -+ src_port = vsk->local_addr.svm_port; -+ if (!info->remote_cid) { -+ dst_cid = vsk->remote_addr.svm_cid; -+ dst_port = vsk->remote_addr.svm_port; -+ } else { -+ dst_cid = info->remote_cid; -+ dst_port = info->remote_port; -+ } -+ -+ vvs = vsk->trans; -+ -+ if (pkt_len > VIRTIO_VSOCK_DEFAULT_RX_BUF_SIZE) -+ pkt_len = VIRTIO_VSOCK_DEFAULT_RX_BUF_SIZE; -+ pkt_len = virtio_transport_get_credit(vvs, pkt_len); -+ /* Do not send zero length OP_RW pkt*/ -+ if (pkt_len == 0 && info->op == VIRTIO_VSOCK_OP_RW) -+ return pkt_len; -+ -+ /* Respect global tx buf limitation */ -+ mutex_lock(&vsock->tx_lock); -+ while (pkt_len + vsock->total_tx_buf > VIRTIO_VSOCK_MAX_TX_BUF_SIZE) { -+ prepare_to_wait_exclusive(&vsock->tx_wait, &wait, -+ TASK_UNINTERRUPTIBLE); -+ mutex_unlock(&vsock->tx_lock); -+ schedule(); -+ mutex_lock(&vsock->tx_lock); -+ finish_wait(&vsock->tx_wait, &wait); -+ } -+ vsock->total_tx_buf += pkt_len; -+ mutex_unlock(&vsock->tx_lock); -+ -+ pkt = virtio_transport_alloc_pkt(info, pkt_len, -+ src_cid, src_port, -+ dst_cid, dst_port); -+ if (!pkt) { -+ mutex_lock(&vsock->tx_lock); -+ vsock->total_tx_buf -= pkt_len; -+ mutex_unlock(&vsock->tx_lock); -+ virtio_transport_put_credit(vvs, pkt_len); -+ wake_up(&vsock->tx_wait); -+ return -ENOMEM; -+ } -+ -+ virtio_transport_inc_tx_pkt(vvs, pkt); -+ -+ return virtio_transport_send_one_pkt(vsock, pkt); ++ queue_work(virtio_vsock_workqueue, &vsock->send_pkt_work); ++ return len; +} + +static void virtio_vsock_rx_fill(struct virtio_vsock *vsock) @@ -258,7 +249,7 @@ index 0000000..45472e0 + virtqueue_kick(vq); +} + -+static void virtio_transport_send_pkt_work(struct work_struct *work) ++static void virtio_transport_tx_work(struct work_struct *work) +{ + struct virtio_vsock *vsock = + container_of(work, struct virtio_vsock, tx_work); @@ -273,7 +264,6 @@ index 0000000..45472e0 + + virtqueue_disable_cb(vq); + while ((pkt = virtqueue_get_buf(vq, &len)) != NULL) { -+ vsock->total_tx_buf -= pkt->len; + virtio_transport_free_pkt(pkt); + added = true; + } @@ -281,23 +271,50 @@ index 0000000..45472e0 + mutex_unlock(&vsock->tx_lock); + + if (added) -+ wake_up(&vsock->tx_wait); ++ queue_work(virtio_vsock_workqueue, &vsock->send_pkt_work); +} + -+static void virtio_transport_recv_pkt_work(struct work_struct *work) ++/* Is there space left for replies to rx packets? */ ++static bool virtio_transport_more_replies(struct virtio_vsock *vsock) ++{ ++ struct virtqueue *vq = vsock->vqs[VSOCK_VQ_RX]; ++ int val; ++ ++ smp_rmb(); /* paired with atomic_inc() and atomic_dec_return() */ ++ val = atomic_read(&vsock->queued_replies); ++ ++ return val < virtqueue_get_vring_size(vq); ++} ++ ++static void virtio_transport_rx_work(struct work_struct *work) +{ + struct virtio_vsock *vsock = + container_of(work, struct virtio_vsock, rx_work); + struct virtqueue *vq; + + vq = vsock->vqs[VSOCK_VQ_RX]; -+ mutex_lock(&vsock->rx_lock); -+ do { -+ struct virtio_vsock_pkt *pkt; -+ unsigned int len; + ++ mutex_lock(&vsock->rx_lock); ++ ++ do { + virtqueue_disable_cb(vq); -+ while ((pkt = virtqueue_get_buf(vq, &len)) != NULL) { ++ for (;;) { ++ struct virtio_vsock_pkt *pkt; ++ unsigned int len; ++ ++ if (!virtio_transport_more_replies(vsock)) { ++ /* Stop rx until the device processes already ++ * pending replies. Leave rx virtqueue ++ * callbacks disabled. ++ */ ++ goto out; ++ } ++ ++ pkt = virtqueue_get_buf(vq, &len); ++ if (!pkt) { ++ break; ++ } ++ + vsock->rx_buf_nr--; + + /* Drop short/long packets */ @@ -312,6 +329,7 @@ index 0000000..45472e0 + } + } while (!virtqueue_enable_cb(vq)); + ++out: + if (vsock->rx_buf_nr < vsock->rx_buf_max_nr / 2) + virtio_vsock_rx_fill(vsock); + mutex_unlock(&vsock->rx_lock); @@ -357,11 +375,11 @@ index 0000000..45472e0 +static void virtio_vsock_update_guest_cid(struct virtio_vsock *vsock) +{ + struct virtio_device *vdev = vsock->vdev; -+ u32 guest_cid; ++ u64 guest_cid; + + vdev->config->get(vdev, offsetof(struct virtio_vsock_config, guest_cid), + &guest_cid, sizeof(guest_cid)); -+ vsock->guest_cid = le32_to_cpu(guest_cid); ++ vsock->guest_cid = le64_to_cpu(guest_cid); +} + +/* event_lock must be held */ @@ -473,8 +491,7 @@ index 0000000..45472e0 + .get_max_buffer_size = virtio_transport_get_max_buffer_size, + }, + -+ .send_pkt = virtio_transport_send_pkt, -+ .send_pkt_no_sock = virtio_transport_send_pkt_no_sock, ++ .send_pkt = virtio_transport_send_pkt, +}; + +static int virtio_vsock_probe(struct virtio_device *vdev) @@ -523,16 +540,19 @@ index 0000000..45472e0 + + vsock->rx_buf_nr = 0; + vsock->rx_buf_max_nr = 0; ++ atomic_set(&vsock->queued_replies, 0); + + vdev->priv = vsock; + the_virtio_vsock = vsock; -+ init_waitqueue_head(&vsock->tx_wait); + mutex_init(&vsock->tx_lock); + mutex_init(&vsock->rx_lock); + mutex_init(&vsock->event_lock); -+ INIT_WORK(&vsock->rx_work, virtio_transport_recv_pkt_work); -+ INIT_WORK(&vsock->tx_work, virtio_transport_send_pkt_work); ++ spin_lock_init(&vsock->send_pkt_list_lock); ++ INIT_LIST_HEAD(&vsock->send_pkt_list); ++ INIT_WORK(&vsock->rx_work, virtio_transport_rx_work); ++ INIT_WORK(&vsock->tx_work, virtio_transport_tx_work); + INIT_WORK(&vsock->event_work, virtio_transport_event_work); ++ INIT_WORK(&vsock->send_pkt_work, virtio_transport_send_pkt_work); + + mutex_lock(&vsock->rx_lock); + virtio_vsock_rx_fill(vsock); @@ -556,13 +576,34 @@ index 0000000..45472e0 +static void virtio_vsock_remove(struct virtio_device *vdev) +{ + struct virtio_vsock *vsock = vdev->priv; ++ struct virtio_vsock_pkt *pkt; + + flush_work(&vsock->rx_work); + flush_work(&vsock->tx_work); + flush_work(&vsock->event_work); ++ flush_work(&vsock->send_pkt_work); + + vdev->config->reset(vdev); + ++ mutex_lock(&vsock->rx_lock); ++ while ((pkt = virtqueue_detach_unused_buf(vsock->vqs[VSOCK_VQ_RX]))) ++ virtio_transport_free_pkt(pkt); ++ mutex_unlock(&vsock->rx_lock); ++ ++ mutex_lock(&vsock->tx_lock); ++ while ((pkt = virtqueue_detach_unused_buf(vsock->vqs[VSOCK_VQ_TX]))) ++ virtio_transport_free_pkt(pkt); ++ mutex_unlock(&vsock->tx_lock); ++ ++ spin_lock_bh(&vsock->send_pkt_list_lock); ++ while (!list_empty(&vsock->send_pkt_list)) { ++ pkt = list_first_entry(&vsock->send_pkt_list, ++ struct virtio_vsock_pkt, list); ++ list_del(&pkt->list); ++ virtio_transport_free_pkt(pkt); ++ } ++ spin_unlock_bh(&vsock->send_pkt_list_lock); ++ + mutex_lock(&the_virtio_vsock_mutex); + the_virtio_vsock = NULL; + vsock_core_exit(); @@ -617,5 +658,5 @@ index 0000000..45472e0 +MODULE_DESCRIPTION("virtio transport for vsock"); +MODULE_DEVICE_TABLE(virtio, id_table); -- -2.9.0 +2.9.3 diff --git a/alpine/kernel/patches/0007-VSOCK-Introduce-vhost_vsock.ko.patch b/alpine/kernel/patches/0009-VSOCK-Introduce-vhost_vsock.ko.patch similarity index 73% rename from alpine/kernel/patches/0007-VSOCK-Introduce-vhost_vsock.ko.patch rename to alpine/kernel/patches/0009-VSOCK-Introduce-vhost_vsock.ko.patch index ce47edb23..58c81dde0 100644 --- a/alpine/kernel/patches/0007-VSOCK-Introduce-vhost_vsock.ko.patch +++ b/alpine/kernel/patches/0009-VSOCK-Introduce-vhost_vsock.ko.patch @@ -1,26 +1,26 @@ -From b83fd98b14a95b6ae4b5eee5c565e645aee41442 Mon Sep 17 00:00:00 2001 +From 007cc7ab2d6af1c213b5d5e8fc0cd651bad8f486 Mon Sep 17 00:00:00 2001 From: Asias He -Date: Thu, 13 Jun 2013 18:29:21 +0800 -Subject: [PATCH 07/40] VSOCK: Introduce vhost_vsock.ko +Date: Thu, 28 Jul 2016 15:36:34 +0100 +Subject: [PATCH 09/45] VSOCK: Introduce vhost_vsock.ko VM sockets vhost transport implementation. This driver runs on the host. Signed-off-by: Asias He Signed-off-by: Stefan Hajnoczi +(from RFC v6 <1469716595-13591-6-git-send-email-stefanha@redhat.com>) --- - MAINTAINERS | 2 + - drivers/vhost/vsock.c | 694 ++++++++++++++++++++++++++++++++++++++++++++++++++ - drivers/vhost/vsock.h | 5 + - 3 files changed, 701 insertions(+) + MAINTAINERS | 2 + + drivers/vhost/vsock.c | 722 +++++++++++++++++++++++++++++++++++++++++++++ + include/uapi/linux/vhost.h | 5 + + 3 files changed, 729 insertions(+) create mode 100644 drivers/vhost/vsock.c - create mode 100644 drivers/vhost/vsock.h diff --git a/MAINTAINERS b/MAINTAINERS -index 82d1123..12d49f5 100644 +index c7e4c9a..fa94182 100644 --- a/MAINTAINERS +++ b/MAINTAINERS -@@ -11392,6 +11392,8 @@ F: include/linux/virtio_vsock.h +@@ -11405,6 +11405,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 @@ -31,10 +31,10 @@ index 82d1123..12d49f5 100644 M: Stephen Chandler Paul diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c new file mode 100644 -index 0000000..8488d01 +index 0000000..028ca16 --- /dev/null +++ b/drivers/vhost/vsock.c -@@ -0,0 +1,694 @@ +@@ -0,0 +1,722 @@ +/* + * vhost transport for vsock + * @@ -45,15 +45,16 @@ index 0000000..8488d01 + * This work is licensed under the terms of the GNU GPL, version 2. + */ +#include ++#include +#include +#include ++#include +#include +#include +#include + +#include +#include "vhost.h" -+#include "vsock.h" + +#define VHOST_VSOCK_DEFAULT_HOST_CID 2 + @@ -62,22 +63,21 @@ index 0000000..8488d01 +}; + +/* Used to track all the vhost_vsock instances on the system. */ ++static DEFINE_SPINLOCK(vhost_vsock_lock); +static LIST_HEAD(vhost_vsock_list); -+static DEFINE_MUTEX(vhost_vsock_mutex); + +struct vhost_vsock { + struct vhost_dev dev; + struct vhost_virtqueue vqs[2]; + -+ /* Link to global vhost_vsock_list, protected by vhost_vsock_mutex */ ++ /* Link to global vhost_vsock_list, protected by vhost_vsock_lock */ + struct list_head list; + + struct vhost_work send_pkt_work; -+ wait_queue_head_t send_wait; -+ -+ /* Fields protected by vqs[VSOCK_VQ_RX].mutex */ ++ spinlock_t send_pkt_list_lock; + struct list_head send_pkt_list; /* host->guest pending packets */ -+ u32 total_tx_buf; ++ ++ atomic_t queued_replies; + + u32 guest_cid; +}; @@ -91,7 +91,7 @@ index 0000000..8488d01 +{ + struct vhost_vsock *vsock; + -+ mutex_lock(&vhost_vsock_mutex); ++ spin_lock_bh(&vhost_vsock_lock); + list_for_each_entry(vsock, &vhost_vsock_list, list) { + u32 other_cid = vsock->guest_cid; + @@ -100,11 +100,11 @@ index 0000000..8488d01 + continue; + + if (other_cid == guest_cid) { -+ mutex_unlock(&vhost_vsock_mutex); ++ spin_unlock_bh(&vhost_vsock_lock); + return vsock; + } + } -+ mutex_unlock(&vhost_vsock_mutex); ++ spin_unlock_bh(&vhost_vsock_lock); + + return NULL; +} @@ -113,10 +113,15 @@ index 0000000..8488d01 +vhost_transport_do_send_pkt(struct vhost_vsock *vsock, + struct vhost_virtqueue *vq) +{ ++ struct vhost_virtqueue *tx_vq = &vsock->vqs[VSOCK_VQ_TX]; + bool added = false; ++ bool restart_tx = false; + + mutex_lock(&vq->mutex); + ++ if (!vq->private_data) ++ goto out; ++ + /* Avoid further vmexits, we're already processing the virtqueue */ + vhost_disable_notify(&vsock->dev, vq); + @@ -128,17 +133,32 @@ index 0000000..8488d01 + size_t len; + int head; + ++ spin_lock_bh(&vsock->send_pkt_list_lock); + if (list_empty(&vsock->send_pkt_list)) { ++ spin_unlock_bh(&vsock->send_pkt_list_lock); + vhost_enable_notify(&vsock->dev, vq); + break; + } + ++ pkt = list_first_entry(&vsock->send_pkt_list, ++ struct virtio_vsock_pkt, list); ++ list_del_init(&pkt->list); ++ spin_unlock_bh(&vsock->send_pkt_list_lock); ++ + head = vhost_get_vq_desc(vq, vq->iov, ARRAY_SIZE(vq->iov), + &out, &in, NULL, NULL); -+ if (head < 0) ++ if (head < 0) { ++ spin_lock_bh(&vsock->send_pkt_list_lock); ++ list_add(&pkt->list, &vsock->send_pkt_list); ++ spin_unlock_bh(&vsock->send_pkt_list_lock); + break; ++ } + + if (head == vq->num) { ++ spin_lock_bh(&vsock->send_pkt_list_lock); ++ list_add(&pkt->list, &vsock->send_pkt_list); ++ spin_unlock_bh(&vsock->send_pkt_list_lock); ++ + /* We cannot finish yet if more buffers snuck in while + * re-enabling notify. + */ @@ -149,10 +169,6 @@ index 0000000..8488d01 + break; + } + -+ pkt = list_first_entry(&vsock->send_pkt_list, -+ struct virtio_vsock_pkt, list); -+ list_del_init(&pkt->list); -+ + if (out) { + virtio_transport_free_pkt(pkt); + vq_err(vq, "Expected 0 output buffers, got %u\n", out); @@ -179,16 +195,26 @@ index 0000000..8488d01 + vhost_add_used(vq, head, sizeof(pkt->hdr) + pkt->len); + added = true; + -+ vsock->total_tx_buf -= pkt->len; ++ if (pkt->reply) { ++ int val; ++ ++ val = atomic_dec_return(&vsock->queued_replies); ++ ++ /* Do we have resources to resume tx processing? */ ++ if (val + 1 == tx_vq->num) ++ restart_tx = true; ++ } + + virtio_transport_free_pkt(pkt); + } + if (added) + vhost_signal(&vsock->dev, vq); ++ ++out: + mutex_unlock(&vq->mutex); + -+ if (added) -+ wake_up(&vsock->send_wait); ++ if (restart_tx) ++ vhost_poll_queue(&tx_vq->poll); +} + +static void vhost_transport_send_pkt_work(struct vhost_work *work) @@ -203,104 +229,30 @@ index 0000000..8488d01 +} + +static int -+vhost_transport_send_one_pkt(struct vhost_vsock *vsock, -+ struct virtio_vsock_pkt *pkt) -+{ -+ struct vhost_virtqueue *vq = &vsock->vqs[VSOCK_VQ_RX]; -+ -+ /* Queue it up in vhost work */ -+ mutex_lock(&vq->mutex); -+ list_add_tail(&pkt->list, &vsock->send_pkt_list); -+ vhost_work_queue(&vsock->dev, &vsock->send_pkt_work); -+ mutex_unlock(&vq->mutex); -+ -+ return pkt->len; -+} -+ -+static int -+vhost_transport_send_pkt_no_sock(struct virtio_vsock_pkt *pkt) ++vhost_transport_send_pkt(struct virtio_vsock_pkt *pkt) +{ + struct vhost_vsock *vsock; ++ struct vhost_virtqueue *vq; ++ int len = pkt->len; + + /* Find the vhost_vsock according to guest context id */ -+ vsock = vhost_vsock_get(le32_to_cpu(pkt->hdr.dst_cid)); ++ vsock = vhost_vsock_get(le64_to_cpu(pkt->hdr.dst_cid)); + if (!vsock) { + virtio_transport_free_pkt(pkt); + return -ENODEV; + } + -+ return vhost_transport_send_one_pkt(vsock, pkt); -+} -+ -+static int -+vhost_transport_send_pkt(struct vsock_sock *vsk, -+ struct virtio_vsock_pkt_info *info) -+{ -+ u32 src_cid, src_port, dst_cid, dst_port; -+ struct virtio_vsock_sock *vvs; -+ struct virtio_vsock_pkt *pkt; -+ struct vhost_virtqueue *vq; -+ struct vhost_vsock *vsock; -+ u32 pkt_len = info->pkt_len; -+ DEFINE_WAIT(wait); -+ -+ src_cid = vhost_transport_get_local_cid(); -+ src_port = vsk->local_addr.svm_port; -+ if (!info->remote_cid) { -+ dst_cid = vsk->remote_addr.svm_cid; -+ dst_port = vsk->remote_addr.svm_port; -+ } else { -+ dst_cid = info->remote_cid; -+ dst_port = info->remote_port; -+ } -+ -+ /* Find the vhost_vsock according to guest context id */ -+ vsock = vhost_vsock_get(dst_cid); -+ if (!vsock) -+ return -ENODEV; -+ -+ vvs = vsk->trans; + vq = &vsock->vqs[VSOCK_VQ_RX]; + -+ /* we can send less than pkt_len bytes */ -+ if (pkt_len > VIRTIO_VSOCK_DEFAULT_RX_BUF_SIZE) -+ pkt_len = VIRTIO_VSOCK_DEFAULT_RX_BUF_SIZE; ++ if (pkt->reply) ++ atomic_inc(&vsock->queued_replies); + -+ /* virtio_transport_get_credit might return less than pkt_len credit */ -+ pkt_len = virtio_transport_get_credit(vvs, pkt_len); ++ spin_lock_bh(&vsock->send_pkt_list_lock); ++ list_add_tail(&pkt->list, &vsock->send_pkt_list); ++ spin_unlock_bh(&vsock->send_pkt_list_lock); + -+ /* Do not send zero length OP_RW pkt*/ -+ if (pkt_len == 0 && info->op == VIRTIO_VSOCK_OP_RW) -+ return pkt_len; -+ -+ /* Respect global tx buf limitation */ -+ mutex_lock(&vq->mutex); -+ while (pkt_len + vsock->total_tx_buf > VIRTIO_VSOCK_MAX_TX_BUF_SIZE) { -+ prepare_to_wait_exclusive(&vsock->send_wait, &wait, -+ TASK_UNINTERRUPTIBLE); -+ mutex_unlock(&vq->mutex); -+ schedule(); -+ mutex_lock(&vq->mutex); -+ finish_wait(&vsock->send_wait, &wait); -+ } -+ vsock->total_tx_buf += pkt_len; -+ mutex_unlock(&vq->mutex); -+ -+ pkt = virtio_transport_alloc_pkt(info, pkt_len, -+ src_cid, src_port, -+ dst_cid, dst_port); -+ if (!pkt) { -+ mutex_lock(&vq->mutex); -+ vsock->total_tx_buf -= pkt_len; -+ mutex_unlock(&vq->mutex); -+ virtio_transport_put_credit(vvs, pkt_len); -+ wake_up(&vsock->send_wait); -+ return -ENOMEM; -+ } -+ -+ virtio_transport_inc_tx_pkt(vvs, pkt); -+ -+ return vhost_transport_send_one_pkt(vsock, pkt); ++ vhost_work_queue(&vsock->dev, &vsock->send_pkt_work); ++ return len; +} + +static struct virtio_vsock_pkt * @@ -362,6 +314,18 @@ index 0000000..8488d01 + return pkt; +} + ++/* Is there space left for replies to rx packets? */ ++static bool vhost_vsock_more_replies(struct vhost_vsock *vsock) ++{ ++ struct vhost_virtqueue *vq = &vsock->vqs[VSOCK_VQ_TX]; ++ int val; ++ ++ smp_rmb(); /* paired with atomic_inc() and atomic_dec_return() */ ++ val = atomic_read(&vsock->queued_replies); ++ ++ return val < vq->num; ++} ++ +static void vhost_vsock_handle_tx_kick(struct vhost_work *work) +{ + struct vhost_virtqueue *vq = container_of(work, struct vhost_virtqueue, @@ -374,8 +338,20 @@ index 0000000..8488d01 + bool added = false; + + mutex_lock(&vq->mutex); ++ ++ if (!vq->private_data) ++ goto out; ++ + vhost_disable_notify(&vsock->dev, vq); + for (;;) { ++ if (!vhost_vsock_more_replies(vsock)) { ++ /* Stop tx until the device processes already ++ * pending replies. Leave tx virtqueue ++ * callbacks disabled. ++ */ ++ goto no_more_replies; ++ } ++ + head = vhost_get_vq_desc(vq, vq->iov, ARRAY_SIZE(vq->iov), + &out, &in, NULL, NULL); + if (head < 0) @@ -396,7 +372,7 @@ index 0000000..8488d01 + } + + /* Only accept correctly addressed packets */ -+ if (le32_to_cpu(pkt->hdr.src_cid) == vsock->guest_cid) ++ if (le64_to_cpu(pkt->hdr.src_cid) == vsock->guest_cid) + virtio_transport_recv_pkt(pkt); + else + virtio_transport_free_pkt(pkt); @@ -404,8 +380,12 @@ index 0000000..8488d01 + vhost_add_used(vq, head, sizeof(pkt->hdr) + pkt->len); + added = true; + } ++ ++no_more_replies: + if (added) + vhost_signal(&vsock->dev, vq); ++ ++out: + mutex_unlock(&vq->mutex); +} + @@ -465,21 +445,36 @@ index 0000000..8488d01 + return ret; +} + -+static void vhost_vsock_stop(struct vhost_vsock *vsock) ++static int vhost_vsock_stop(struct vhost_vsock *vsock) +{ + size_t i; ++ int ret; + + mutex_lock(&vsock->dev.mutex); + ++ ret = vhost_dev_check_owner(&vsock->dev); ++ if (ret) ++ goto err; ++ + for (i = 0; i < ARRAY_SIZE(vsock->vqs); i++) { + struct vhost_virtqueue *vq = &vsock->vqs[i]; + + mutex_lock(&vq->mutex); -+ vq->private_data = vsock; ++ vq->private_data = NULL; + mutex_unlock(&vq->mutex); + } + ++err: + mutex_unlock(&vsock->dev.mutex); ++ return ret; ++} ++ ++static void vhost_vsock_free(struct vhost_vsock *vsock) ++{ ++ if (is_vmalloc_addr(vsock)) ++ vfree(vsock); ++ else ++ kfree(vsock); +} + +static int vhost_vsock_dev_open(struct inode *inode, struct file *file) @@ -488,9 +483,15 @@ index 0000000..8488d01 + struct vhost_vsock *vsock; + int ret; + -+ vsock = kzalloc(sizeof(*vsock), GFP_KERNEL); -+ if (!vsock) -+ return -ENOMEM; ++ /* This struct is large and allocation could fail, fall back to vmalloc ++ * if there is no other way. ++ */ ++ vsock = kzalloc(sizeof(*vsock), GFP_KERNEL | __GFP_NOWARN | __GFP_REPEAT); ++ if (!vsock) { ++ vsock = vmalloc(sizeof(*vsock)); ++ if (!vsock) ++ return -ENOMEM; ++ } + + vqs = kmalloc_array(ARRAY_SIZE(vsock->vqs), sizeof(*vqs), GFP_KERNEL); + if (!vqs) { @@ -498,6 +499,8 @@ index 0000000..8488d01 + goto out; + } + ++ atomic_set(&vsock->queued_replies, 0); ++ + vqs[VSOCK_VQ_TX] = &vsock->vqs[VSOCK_VQ_TX]; + vqs[VSOCK_VQ_RX] = &vsock->vqs[VSOCK_VQ_RX]; + vsock->vqs[VSOCK_VQ_TX].handle_kick = vhost_vsock_handle_tx_kick; @@ -506,17 +509,17 @@ index 0000000..8488d01 + vhost_dev_init(&vsock->dev, vqs, ARRAY_SIZE(vsock->vqs)); + + file->private_data = vsock; -+ init_waitqueue_head(&vsock->send_wait); ++ spin_lock_init(&vsock->send_pkt_list_lock); + INIT_LIST_HEAD(&vsock->send_pkt_list); + vhost_work_init(&vsock->send_pkt_work, vhost_transport_send_pkt_work); + -+ mutex_lock(&vhost_vsock_mutex); ++ spin_lock_bh(&vhost_vsock_lock); + list_add_tail(&vsock->list, &vhost_vsock_list); -+ mutex_unlock(&vhost_vsock_mutex); ++ spin_unlock_bh(&vhost_vsock_lock); + return 0; + +out: -+ kfree(vsock); ++ vhost_vsock_free(vsock); + return ret; +} + @@ -534,22 +537,27 @@ index 0000000..8488d01 +{ + struct vsock_sock *vsk = vsock_sk(sk); + -+ lock_sock(sk); ++ /* vmci_transport.c doesn't take sk_lock here either. At least we're ++ * under vsock_table_lock so the sock cannot disappear while we're ++ * executing. ++ */ ++ + if (!vhost_vsock_get(vsk->local_addr.svm_cid)) { ++ sock_set_flag(sk, SOCK_DONE); ++ vsk->peer_shutdown = SHUTDOWN_MASK; + sk->sk_state = SS_UNCONNECTED; + sk->sk_err = ECONNRESET; + sk->sk_error_report(sk); + } -+ release_sock(sk); +} + +static int vhost_vsock_dev_release(struct inode *inode, struct file *file) +{ + struct vhost_vsock *vsock = file->private_data; + -+ mutex_lock(&vhost_vsock_mutex); ++ spin_lock_bh(&vhost_vsock_lock); + list_del(&vsock->list); -+ mutex_unlock(&vhost_vsock_mutex); ++ spin_unlock_bh(&vhost_vsock_lock); + + /* Iterating over all connections for all CIDs to find orphans is + * inefficient. Room for improvement here. */ @@ -558,18 +566,35 @@ index 0000000..8488d01 + vhost_vsock_stop(vsock); + vhost_vsock_flush(vsock); + vhost_dev_stop(&vsock->dev); ++ ++ spin_lock_bh(&vsock->send_pkt_list_lock); ++ while (!list_empty(&vsock->send_pkt_list)) { ++ struct virtio_vsock_pkt *pkt; ++ ++ pkt = list_first_entry(&vsock->send_pkt_list, ++ struct virtio_vsock_pkt, list); ++ list_del_init(&pkt->list); ++ virtio_transport_free_pkt(pkt); ++ } ++ spin_unlock_bh(&vsock->send_pkt_list_lock); ++ + vhost_dev_cleanup(&vsock->dev, false); + kfree(vsock->dev.vqs); -+ kfree(vsock); ++ vhost_vsock_free(vsock); + return 0; +} + -+static int vhost_vsock_set_cid(struct vhost_vsock *vsock, u32 guest_cid) ++static int vhost_vsock_set_cid(struct vhost_vsock *vsock, u64 guest_cid) +{ + struct vhost_vsock *other; + + /* Refuse reserved CIDs */ -+ if (guest_cid <= VMADDR_CID_HOST) ++ if (guest_cid <= VMADDR_CID_HOST || ++ guest_cid == U32_MAX) ++ return -EINVAL; ++ ++ /* 64-bit CIDs are not yet supported */ ++ if (guest_cid > U32_MAX) + return -EINVAL; + + /* Refuse if CID is already in use */ @@ -577,9 +602,9 @@ index 0000000..8488d01 + if (other && other != vsock) + return -EADDRINUSE; + -+ mutex_lock(&vhost_vsock_mutex); ++ spin_lock_bh(&vhost_vsock_lock); + vsock->guest_cid = guest_cid; -+ mutex_unlock(&vhost_vsock_mutex); ++ spin_unlock_bh(&vhost_vsock_lock); + + return 0; +} @@ -614,26 +639,30 @@ index 0000000..8488d01 +{ + struct vhost_vsock *vsock = f->private_data; + void __user *argp = (void __user *)arg; -+ u64 __user *featurep = argp; -+ u32 __user *cidp = argp; -+ u32 guest_cid; ++ u64 guest_cid; + u64 features; ++ int start; + int r; + + switch (ioctl) { + case VHOST_VSOCK_SET_GUEST_CID: -+ if (get_user(guest_cid, cidp)) ++ if (copy_from_user(&guest_cid, argp, sizeof(guest_cid))) + return -EFAULT; + return vhost_vsock_set_cid(vsock, guest_cid); -+ case VHOST_VSOCK_START: -+ return vhost_vsock_start(vsock); ++ case VHOST_VSOCK_SET_RUNNING: ++ if (copy_from_user(&start, argp, sizeof(start))) ++ return -EFAULT; ++ if (start) ++ return vhost_vsock_start(vsock); ++ else ++ return vhost_vsock_stop(vsock); + case VHOST_GET_FEATURES: + features = VHOST_VSOCK_FEATURES; -+ if (copy_to_user(featurep, &features, sizeof(features))) ++ if (copy_to_user(argp, &features, sizeof(features))) + return -EFAULT; + return 0; + case VHOST_SET_FEATURES: -+ if (copy_from_user(&features, featurep, sizeof(features))) ++ if (copy_from_user(&features, argp, sizeof(features))) + return -EFAULT; + return vhost_vsock_set_features(vsock, features); + default: @@ -705,7 +734,6 @@ index 0000000..8488d01 + }, + + .send_pkt = vhost_transport_send_pkt, -+ .send_pkt_no_sock = vhost_transport_send_pkt_no_sock, +}; + +static int __init vhost_vsock_init(void) @@ -729,17 +757,20 @@ index 0000000..8488d01 +MODULE_LICENSE("GPL v2"); +MODULE_AUTHOR("Asias He"); +MODULE_DESCRIPTION("vhost transport for vsock "); -diff --git a/drivers/vhost/vsock.h b/drivers/vhost/vsock.h -new file mode 100644 -index 0000000..173f9fc ---- /dev/null -+++ b/drivers/vhost/vsock.h -@@ -0,0 +1,5 @@ -+#ifndef VHOST_VSOCK_H -+#define VHOST_VSOCK_H -+#define VHOST_VSOCK_SET_GUEST_CID _IOW(VHOST_VIRTIO, 0x60, __u32) -+#define VHOST_VSOCK_START _IO(VHOST_VIRTIO, 0x61) -+#endif +diff --git a/include/uapi/linux/vhost.h b/include/uapi/linux/vhost.h +index ab373191..b306476 100644 +--- a/include/uapi/linux/vhost.h ++++ b/include/uapi/linux/vhost.h +@@ -169,4 +169,9 @@ struct vhost_scsi_target { + #define VHOST_SCSI_SET_EVENTS_MISSED _IOW(VHOST_VIRTIO, 0x43, __u32) + #define VHOST_SCSI_GET_EVENTS_MISSED _IOW(VHOST_VIRTIO, 0x44, __u32) + ++/* VHOST_VSOCK specific defines */ ++ ++#define VHOST_VSOCK_SET_GUEST_CID _IOW(VHOST_VIRTIO, 0x60, __u64) ++#define VHOST_VSOCK_SET_RUNNING _IOW(VHOST_VIRTIO, 0x61, int) ++ + #endif -- -2.9.0 +2.9.3 diff --git a/alpine/kernel/patches/0008-VSOCK-Add-Makefile-and-Kconfig.patch b/alpine/kernel/patches/0010-VSOCK-Add-Makefile-and-Kconfig.patch similarity index 68% rename from alpine/kernel/patches/0008-VSOCK-Add-Makefile-and-Kconfig.patch rename to alpine/kernel/patches/0010-VSOCK-Add-Makefile-and-Kconfig.patch index b524409bb..d5f364e11 100644 --- a/alpine/kernel/patches/0008-VSOCK-Add-Makefile-and-Kconfig.patch +++ b/alpine/kernel/patches/0010-VSOCK-Add-Makefile-and-Kconfig.patch @@ -1,18 +1,19 @@ -From 17871c8224feaa5cf4944f3f09800968a8f19589 Mon Sep 17 00:00:00 2001 +From d8b94a29a8e7fee77250aaa1ab3b1f80ad6c8882 Mon Sep 17 00:00:00 2001 From: Asias He -Date: Thu, 13 Jun 2013 18:30:19 +0800 -Subject: [PATCH 08/40] VSOCK: Add Makefile and Kconfig +Date: Thu, 28 Jul 2016 15:36:35 +0100 +Subject: [PATCH 10/45] VSOCK: Add Makefile and Kconfig Enable virtio-vsock and vhost-vsock. Signed-off-by: Asias He Signed-off-by: Stefan Hajnoczi +(from RFC v6 <1469716595-13591-7-git-send-email-stefanha@redhat.com>) --- drivers/vhost/Kconfig | 15 +++++++++++++++ drivers/vhost/Makefile | 4 ++++ - net/vmw_vsock/Kconfig | 19 +++++++++++++++++++ - net/vmw_vsock/Makefile | 2 ++ - 4 files changed, 40 insertions(+) + net/vmw_vsock/Kconfig | 20 ++++++++++++++++++++ + net/vmw_vsock/Makefile | 6 ++++++ + 4 files changed, 45 insertions(+) diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig index 533eaf0..d7aae9e 100644 @@ -55,10 +56,10 @@ index e0441c3..6b012b9 100644 + obj-$(CONFIG_VHOST) += vhost.o diff --git a/net/vmw_vsock/Kconfig b/net/vmw_vsock/Kconfig -index 14810ab..f27e74b 100644 +index 14810ab..8831e7c 100644 --- a/net/vmw_vsock/Kconfig +++ b/net/vmw_vsock/Kconfig -@@ -26,3 +26,22 @@ config VMWARE_VMCI_VSOCKETS +@@ -26,3 +26,23 @@ config VMWARE_VMCI_VSOCKETS To compile this driver as a module, choose M here: the module will be called vmw_vsock_vmci_transport. If unsure, say N. @@ -73,26 +74,33 @@ index 14810ab..f27e74b 100644 + Enable this transport if your Virtual Machine host supports Virtual + Sockets over virtio. + -+ To compile this driver as a module, choose M here: the module -+ will be called virtio_vsock_transport. If unsure, say N. ++ To compile this driver as a module, choose M here: the module will be ++ called vmw_vsock_virtio_transport. If unsure, say N. + +config VIRTIO_VSOCKETS_COMMON -+ tristate -+ ---help--- -+ This option is selected by any driver which needs to access -+ the virtio_vsock. ++ tristate ++ help ++ This option is selected by any driver which needs to access ++ the virtio_vsock. The module will be called ++ vmw_vsock_virtio_transport_common. diff --git a/net/vmw_vsock/Makefile b/net/vmw_vsock/Makefile -index 2ce52d7..cf4c294 100644 +index 2ce52d7..bc27c70 100644 --- a/net/vmw_vsock/Makefile +++ b/net/vmw_vsock/Makefile -@@ -1,5 +1,7 @@ +@@ -1,7 +1,13 @@ obj-$(CONFIG_VSOCKETS) += vsock.o obj-$(CONFIG_VMWARE_VMCI_VSOCKETS) += vmw_vsock_vmci_transport.o -+obj-$(CONFIG_VIRTIO_VSOCKETS) += virtio_transport.o -+obj-$(CONFIG_VIRTIO_VSOCKETS_COMMON) += virtio_transport_common.o ++obj-$(CONFIG_VIRTIO_VSOCKETS) += vmw_vsock_virtio_transport.o ++obj-$(CONFIG_VIRTIO_VSOCKETS_COMMON) += vmw_vsock_virtio_transport_common.o vsock-y += af_vsock.o vsock_addr.o + vmw_vsock_vmci_transport-y += vmci_transport.o vmci_transport_notify.o \ + vmci_transport_notify_qstate.o ++ ++vmw_vsock_virtio_transport-y += virtio_transport.o ++ ++vmw_vsock_virtio_transport_common-y += virtio_transport_common.o -- -2.9.0 +2.9.3 diff --git a/alpine/kernel/patches/0011-vhost-vsock-fix-vhost-virtio_vsock_pkt-use-after-fre.patch b/alpine/kernel/patches/0011-vhost-vsock-fix-vhost-virtio_vsock_pkt-use-after-fre.patch new file mode 100644 index 000000000..47a94944b --- /dev/null +++ b/alpine/kernel/patches/0011-vhost-vsock-fix-vhost-virtio_vsock_pkt-use-after-fre.patch @@ -0,0 +1,53 @@ +From 4438a0966cd79254fcab325f7495130314f339cd Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Thu, 4 Aug 2016 14:52:53 +0100 +Subject: [PATCH 11/45] 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 +virtio_transport_free_pkt(). + +This patch solves the use-after-free since pkt is no longer guaranteed +to be alive. + +Reported-by: Dan Carpenter +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 3fda5d6e580193fa005014355b3a61498f1b3ae0) +--- + drivers/vhost/vsock.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c +index 028ca16..9e10fb5 100644 +--- a/drivers/vhost/vsock.c ++++ b/drivers/vhost/vsock.c +@@ -307,6 +307,8 @@ static void vhost_vsock_handle_tx_kick(struct vhost_work *work) + + vhost_disable_notify(&vsock->dev, vq); + for (;;) { ++ u32 len; ++ + if (!vhost_vsock_more_replies(vsock)) { + /* Stop tx until the device processes already + * pending replies. Leave tx virtqueue +@@ -334,13 +336,15 @@ static void vhost_vsock_handle_tx_kick(struct vhost_work *work) + continue; + } + ++ len = pkt->len; ++ + /* Only accept correctly addressed packets */ + if (le64_to_cpu(pkt->hdr.src_cid) == vsock->guest_cid) + virtio_transport_recv_pkt(pkt); + else + virtio_transport_free_pkt(pkt); + +- vhost_add_used(vq, head, sizeof(pkt->hdr) + pkt->len); ++ vhost_add_used(vq, head, sizeof(pkt->hdr) + len); + added = true; + } + +-- +2.9.3 + diff --git a/alpine/kernel/patches/0012-virtio-vsock-fix-include-guard-typo.patch b/alpine/kernel/patches/0012-virtio-vsock-fix-include-guard-typo.patch new file mode 100644 index 000000000..c57ebd3f2 --- /dev/null +++ b/alpine/kernel/patches/0012-virtio-vsock-fix-include-guard-typo.patch @@ -0,0 +1,28 @@ +From f829b4b9d6ef1fa1d2859f5eceb9001c772541c3 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Fri, 5 Aug 2016 13:52:09 +0100 +Subject: [PATCH 12/45] virtio-vsock: fix include guard typo + +Signed-off-by: Stefan Hajnoczi +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 28ad55578b8a76390d966b09da8c7fa3644f5140) +--- + include/uapi/linux/virtio_vsock.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/include/uapi/linux/virtio_vsock.h b/include/uapi/linux/virtio_vsock.h +index 6b011c1..1d57ed3 100644 +--- a/include/uapi/linux/virtio_vsock.h ++++ b/include/uapi/linux/virtio_vsock.h +@@ -32,7 +32,7 @@ + */ + + #ifndef _UAPI_LINUX_VIRTIO_VSOCK_H +-#define _UAPI_LINUX_VIRTIO_VOSCK_H ++#define _UAPI_LINUX_VIRTIO_VSOCK_H + + #include + #include +-- +2.9.3 + diff --git a/alpine/kernel/patches/0013-vhost-vsock-drop-space-available-check-for-TX-vq.patch b/alpine/kernel/patches/0013-vhost-vsock-drop-space-available-check-for-TX-vq.patch new file mode 100644 index 000000000..5333634e1 --- /dev/null +++ b/alpine/kernel/patches/0013-vhost-vsock-drop-space-available-check-for-TX-vq.patch @@ -0,0 +1,61 @@ +From 1294bdb2bffedfa825a8572926ba90fa522746c2 Mon Sep 17 00:00:00 2001 +From: Gerard Garcia +Date: Wed, 10 Aug 2016 17:24:34 +0200 +Subject: [PATCH 13/45] vhost/vsock: drop space available check for TX vq + +Remove unnecessary use of enable/disable callback notifications +and the incorrect more space available check. + +The virtio_transport_tx_work handles when the TX virtqueue +has more buffers available. + +Signed-off-by: Gerard Garcia +Acked-by: Stefan Hajnoczi +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 21bc54fc0cdc31de72b57d2b3c79cf9c2b83cf39) +--- + net/vmw_vsock/virtio_transport.c | 10 +++------- + 1 file changed, 3 insertions(+), 7 deletions(-) + +diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c +index 699dfab..936d7ee 100644 +--- a/net/vmw_vsock/virtio_transport.c ++++ b/net/vmw_vsock/virtio_transport.c +@@ -87,9 +87,6 @@ virtio_transport_send_pkt_work(struct work_struct *work) + + vq = vsock->vqs[VSOCK_VQ_TX]; + +- /* Avoid unnecessary interrupts while we're processing the ring */ +- virtqueue_disable_cb(vq); +- + for (;;) { + struct virtio_vsock_pkt *pkt; + struct scatterlist hdr, buf, *sgs[2]; +@@ -99,7 +96,6 @@ virtio_transport_send_pkt_work(struct work_struct *work) + spin_lock_bh(&vsock->send_pkt_list_lock); + if (list_empty(&vsock->send_pkt_list)) { + spin_unlock_bh(&vsock->send_pkt_list_lock); +- virtqueue_enable_cb(vq); + break; + } + +@@ -118,13 +114,13 @@ virtio_transport_send_pkt_work(struct work_struct *work) + } + + ret = virtqueue_add_sgs(vq, sgs, out_sg, in_sg, pkt, GFP_KERNEL); ++ /* Usually this means that there is no more space available in ++ * the vq ++ */ + if (ret < 0) { + spin_lock_bh(&vsock->send_pkt_list_lock); + list_add(&pkt->list, &vsock->send_pkt_list); + spin_unlock_bh(&vsock->send_pkt_list_lock); +- +- if (!virtqueue_enable_cb(vq) && ret == -ENOSPC) +- continue; /* retry now that we have more space */ + break; + } + +-- +2.9.3 + diff --git a/alpine/kernel/patches/0009-VSOCK-Only-allow-host-network-namespace-to-use-AF_VS.patch b/alpine/kernel/patches/0014-VSOCK-Only-allow-host-network-namespace-to-use-AF_VS.patch similarity index 75% rename from alpine/kernel/patches/0009-VSOCK-Only-allow-host-network-namespace-to-use-AF_VS.patch rename to alpine/kernel/patches/0014-VSOCK-Only-allow-host-network-namespace-to-use-AF_VS.patch index 56ef77da9..f8996b427 100644 --- a/alpine/kernel/patches/0009-VSOCK-Only-allow-host-network-namespace-to-use-AF_VS.patch +++ b/alpine/kernel/patches/0014-VSOCK-Only-allow-host-network-namespace-to-use-AF_VS.patch @@ -1,7 +1,7 @@ -From a8a0423ba3b9cc33e2c673890d917318be602145 Mon Sep 17 00:00:00 2001 +From a39cc29b3cb531e73d4f03e64e12fc0de62f8d03 Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Mon, 4 Apr 2016 14:50:10 +0100 -Subject: [PATCH 09/40] VSOCK: Only allow host network namespace to use +Subject: [PATCH 14/45] VSOCK: Only allow host network namespace to use AF_VSOCK. The VSOCK addressing schema does not really lend itself to simply creating an @@ -13,10 +13,10 @@ Signed-off-by: Ian Campbell 1 file changed, 3 insertions(+) diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c -index 15f9595..8373709 100644 +index 17dbbe6..1bb1b01 100644 --- a/net/vmw_vsock/af_vsock.c +++ b/net/vmw_vsock/af_vsock.c -@@ -1840,6 +1840,9 @@ static const struct proto_ops vsock_stream_ops = { +@@ -1852,6 +1852,9 @@ static const struct proto_ops vsock_stream_ops = { static int vsock_create(struct net *net, struct socket *sock, int protocol, int kern) { @@ -27,5 +27,5 @@ index 15f9595..8373709 100644 return -EINVAL; -- -2.9.0 +2.9.3 diff --git a/alpine/kernel/patches/0010-drivers-hv-Define-the-channel-type-for-Hyper-V-PCI-E.patch b/alpine/kernel/patches/0015-drivers-hv-Define-the-channel-type-for-Hyper-V-PCI-E.patch similarity index 91% rename from alpine/kernel/patches/0010-drivers-hv-Define-the-channel-type-for-Hyper-V-PCI-E.patch rename to alpine/kernel/patches/0015-drivers-hv-Define-the-channel-type-for-Hyper-V-PCI-E.patch index ee23f0bec..38b4828fd 100644 --- a/alpine/kernel/patches/0010-drivers-hv-Define-the-channel-type-for-Hyper-V-PCI-E.patch +++ b/alpine/kernel/patches/0015-drivers-hv-Define-the-channel-type-for-Hyper-V-PCI-E.patch @@ -1,7 +1,7 @@ -From bab5ea0c103fe9e59b91e3f02ffd3a45c4e6be4a Mon Sep 17 00:00:00 2001 +From 7dc9f307981ebd10ed716a56a0795af7c3f8ae90 Mon Sep 17 00:00:00 2001 From: Jake Oshins Date: Mon, 14 Dec 2015 16:01:41 -0800 -Subject: [PATCH 10/40] drivers:hv: Define the channel type for Hyper-V PCI +Subject: [PATCH 15/45] 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. @@ -59,5 +59,5 @@ index ae6a711..10dda1e 100644 */ -- -2.9.0 +2.9.3 diff --git a/alpine/kernel/patches/0011-Drivers-hv-vmbus-Use-uuid_le-type-consistently.patch b/alpine/kernel/patches/0016-Drivers-hv-vmbus-Use-uuid_le-type-consistently.patch similarity index 95% rename from alpine/kernel/patches/0011-Drivers-hv-vmbus-Use-uuid_le-type-consistently.patch rename to alpine/kernel/patches/0016-Drivers-hv-vmbus-Use-uuid_le-type-consistently.patch index 32e354f8c..6444d90be 100644 --- a/alpine/kernel/patches/0011-Drivers-hv-vmbus-Use-uuid_le-type-consistently.patch +++ b/alpine/kernel/patches/0016-Drivers-hv-vmbus-Use-uuid_le-type-consistently.patch @@ -1,7 +1,7 @@ -From 6a0ed33229365bc267788283730cde6ddc0c7ff8 Mon Sep 17 00:00:00 2001 +From 935d2a3a0446c6b2f256729bd91974e800bef25f Mon Sep 17 00:00:00 2001 From: "K. Y. Srinivasan" Date: Mon, 14 Dec 2015 16:01:43 -0800 -Subject: [PATCH 11/40] Drivers: hv: vmbus: Use uuid_le type consistently +Subject: [PATCH 16/45] Drivers: hv: vmbus: Use uuid_le type consistently Consistently use uuid_le type in the Hyper-V driver code. @@ -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 f19b6f7..e64934e 100644 +index 9b5440f..9aadcc2 100644 --- a/drivers/hv/vmbus_drv.c +++ b/drivers/hv/vmbus_drv.c -@@ -531,7 +531,7 @@ static int vmbus_uevent(struct device *device, struct kobj_uevent_env *env) +@@ -532,7 +532,7 @@ static int vmbus_uevent(struct device *device, struct kobj_uevent_env *env) static const uuid_le null_guid; @@ -42,7 +42,7 @@ index f19b6f7..e64934e 100644 { if (memcmp(guid, &null_guid, sizeof(uuid_le))) return false; -@@ -544,9 +544,9 @@ static inline bool is_null_guid(const __u8 *guid) +@@ -545,9 +545,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 f19b6f7..e64934e 100644 if (!memcmp(&id->guid, guid, sizeof(uuid_le))) return id; -@@ -563,7 +563,7 @@ static int vmbus_match(struct device *device, struct device_driver *driver) +@@ -564,7 +564,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 f19b6f7..e64934e 100644 return 1; return 0; -@@ -580,7 +580,7 @@ static int vmbus_probe(struct device *child_device) +@@ -581,7 +581,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; @@ -280,7 +280,7 @@ index 64f36e0..6e4c645 100644 }; diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c -index 5b96206..8adca44 100644 +index 9f5cdd4..8e8c69b 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c @@ -917,7 +917,7 @@ static int do_vmbus_entry(const char *filename, void *symval, @@ -293,5 +293,5 @@ index 5b96206..8adca44 100644 strcpy(alias, "vmbus:"); strcat(alias, guid_name); -- -2.9.0 +2.9.3 diff --git a/alpine/kernel/patches/0012-Drivers-hv-vmbus-Use-uuid_le_cmp-for-comparing-GUIDs.patch b/alpine/kernel/patches/0017-Drivers-hv-vmbus-Use-uuid_le_cmp-for-comparing-GUIDs.patch similarity index 83% rename from alpine/kernel/patches/0012-Drivers-hv-vmbus-Use-uuid_le_cmp-for-comparing-GUIDs.patch rename to alpine/kernel/patches/0017-Drivers-hv-vmbus-Use-uuid_le_cmp-for-comparing-GUIDs.patch index 06dc53dca..dc86c33a9 100644 --- a/alpine/kernel/patches/0012-Drivers-hv-vmbus-Use-uuid_le_cmp-for-comparing-GUIDs.patch +++ b/alpine/kernel/patches/0017-Drivers-hv-vmbus-Use-uuid_le_cmp-for-comparing-GUIDs.patch @@ -1,7 +1,7 @@ -From 2be59f6d9924239fa410a184d06fc7d0338c83fc Mon Sep 17 00:00:00 2001 +From c5716756f56e498fc463458cfab19bb071f35469 Mon Sep 17 00:00:00 2001 From: "K. Y. Srinivasan" Date: Mon, 14 Dec 2015 16:01:44 -0800 -Subject: [PATCH 12/40] Drivers: hv: vmbus: Use uuid_le_cmp() for comparing +Subject: [PATCH 17/45] Drivers: hv: vmbus: Use uuid_le_cmp() for comparing GUIDs Use uuid_le_cmp() for comparing GUIDs. @@ -29,10 +29,10 @@ index 38470aa..dc4fb0b 100644 break; } diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c -index e64934e..aa4d8cc 100644 +index 9aadcc2..bf54455 100644 --- a/drivers/hv/vmbus_drv.c +++ b/drivers/hv/vmbus_drv.c -@@ -533,7 +533,7 @@ static const uuid_le null_guid; +@@ -534,7 +534,7 @@ static const uuid_le null_guid; static inline bool is_null_guid(const uuid_le *guid) { @@ -41,7 +41,7 @@ index e64934e..aa4d8cc 100644 return false; return true; } -@@ -547,7 +547,7 @@ static const struct hv_vmbus_device_id *hv_vmbus_get_id( +@@ -548,7 +548,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 e64934e..aa4d8cc 100644 return NULL; -- -2.9.0 +2.9.3 diff --git a/alpine/kernel/patches/0013-Drivers-hv-vmbus-serialize-process_chn_event-and-vmb.patch b/alpine/kernel/patches/0018-Drivers-hv-vmbus-serialize-process_chn_event-and-vmb.patch similarity index 95% rename from alpine/kernel/patches/0013-Drivers-hv-vmbus-serialize-process_chn_event-and-vmb.patch rename to alpine/kernel/patches/0018-Drivers-hv-vmbus-serialize-process_chn_event-and-vmb.patch index 83479d605..ec5878122 100644 --- a/alpine/kernel/patches/0013-Drivers-hv-vmbus-serialize-process_chn_event-and-vmb.patch +++ b/alpine/kernel/patches/0018-Drivers-hv-vmbus-serialize-process_chn_event-and-vmb.patch @@ -1,7 +1,7 @@ -From 5111097f2add634ea6b2964841ad15d9149da96e Mon Sep 17 00:00:00 2001 +From fb0f783a35e7a0a9e8560fe5809b824bc1c8f8a8 Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Mon, 14 Dec 2015 16:01:47 -0800 -Subject: [PATCH 13/40] Drivers: hv: vmbus: serialize process_chn_event() and +Subject: [PATCH 18/45] Drivers: hv: vmbus: serialize process_chn_event() and vmbus_close_internal() process_chn_event(), running in the tasklet, can race with @@ -83,5 +83,5 @@ index 9098f13..6a90c69 100644 } -- -2.9.0 +2.9.3 diff --git a/alpine/kernel/patches/0014-Drivers-hv-vmbus-do-sanity-check-of-channel-state-in.patch b/alpine/kernel/patches/0019-Drivers-hv-vmbus-do-sanity-check-of-channel-state-in.patch similarity index 91% rename from alpine/kernel/patches/0014-Drivers-hv-vmbus-do-sanity-check-of-channel-state-in.patch rename to alpine/kernel/patches/0019-Drivers-hv-vmbus-do-sanity-check-of-channel-state-in.patch index a2c8decdf..3f0d9dccd 100644 --- a/alpine/kernel/patches/0014-Drivers-hv-vmbus-do-sanity-check-of-channel-state-in.patch +++ b/alpine/kernel/patches/0019-Drivers-hv-vmbus-do-sanity-check-of-channel-state-in.patch @@ -1,7 +1,7 @@ -From df06857f7adf8fb4bb6cacdc80e174c9cb20ee8a Mon Sep 17 00:00:00 2001 +From 47057c1030e6a0e9ebd52e8268bb0fd7c6a3020c Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Mon, 14 Dec 2015 16:01:48 -0800 -Subject: [PATCH 14/40] Drivers: hv: vmbus: do sanity check of channel state in +Subject: [PATCH 19/45] Drivers: hv: vmbus: do sanity check of channel state in vmbus_close_internal() This fixes an incorrect assumption of channel state in the function. @@ -38,5 +38,5 @@ index 6a90c69..b3c14ca 100644 channel->sc_creation_callback = NULL; /* Stop callback and cancel the timer asap */ -- -2.9.0 +2.9.3 diff --git a/alpine/kernel/patches/0015-Drivers-hv-vmbus-fix-rescind-offer-handling-for-devi.patch b/alpine/kernel/patches/0020-Drivers-hv-vmbus-fix-rescind-offer-handling-for-devi.patch similarity index 93% rename from alpine/kernel/patches/0015-Drivers-hv-vmbus-fix-rescind-offer-handling-for-devi.patch rename to alpine/kernel/patches/0020-Drivers-hv-vmbus-fix-rescind-offer-handling-for-devi.patch index b19f9611a..176acfd7c 100644 --- a/alpine/kernel/patches/0015-Drivers-hv-vmbus-fix-rescind-offer-handling-for-devi.patch +++ b/alpine/kernel/patches/0020-Drivers-hv-vmbus-fix-rescind-offer-handling-for-devi.patch @@ -1,7 +1,7 @@ -From 8f7f448b5f9b613f9dec4b4554062c6f709dce96 Mon Sep 17 00:00:00 2001 +From 67631d9308a4405dfb219c287b3ec1d152946584 Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Mon, 14 Dec 2015 16:01:49 -0800 -Subject: [PATCH 15/40] Drivers: hv: vmbus: fix rescind-offer handling for +Subject: [PATCH 20/45] Drivers: hv: vmbus: fix rescind-offer handling for device without a driver In the path vmbus_onoffer_rescind() -> vmbus_device_unregister() -> @@ -79,10 +79,10 @@ index dc4fb0b..7903acc 100644 vmbus_device_unregister(channel->device_obj); diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c -index aa4d8cc..5a71b2a 100644 +index bf54455..8bf1f31 100644 --- a/drivers/hv/vmbus_drv.c +++ b/drivers/hv/vmbus_drv.c -@@ -602,23 +602,11 @@ static int vmbus_remove(struct device *child_device) +@@ -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); @@ -106,7 +106,7 @@ index aa4d8cc..5a71b2a 100644 } return 0; -@@ -653,7 +641,10 @@ static void vmbus_shutdown(struct device *child_device) +@@ -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); @@ -118,5 +118,5 @@ index aa4d8cc..5a71b2a 100644 } -- -2.9.0 +2.9.3 diff --git a/alpine/kernel/patches/0016-Drivers-hv-vmbus-release-relid-on-error-in-vmbus_pro.patch b/alpine/kernel/patches/0021-Drivers-hv-vmbus-release-relid-on-error-in-vmbus_pro.patch similarity index 94% rename from alpine/kernel/patches/0016-Drivers-hv-vmbus-release-relid-on-error-in-vmbus_pro.patch rename to alpine/kernel/patches/0021-Drivers-hv-vmbus-release-relid-on-error-in-vmbus_pro.patch index 4451ff526..214abf51a 100644 --- a/alpine/kernel/patches/0016-Drivers-hv-vmbus-release-relid-on-error-in-vmbus_pro.patch +++ b/alpine/kernel/patches/0021-Drivers-hv-vmbus-release-relid-on-error-in-vmbus_pro.patch @@ -1,7 +1,7 @@ -From bf5d3511a1f0b147e32eec71f610e780fd11701a Mon Sep 17 00:00:00 2001 +From 566fc2785f6bced720caae03060cadcb43faec0b Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Mon, 14 Dec 2015 16:01:50 -0800 -Subject: [PATCH 16/40] Drivers: hv: vmbus: release relid on error in +Subject: [PATCH 21/45] Drivers: hv: vmbus: release relid on error in vmbus_process_offer() We want to simplify vmbus_onoffer_rescind() by not invoking @@ -70,5 +70,5 @@ index 7903acc..9c9da3a 100644 } -- -2.9.0 +2.9.3 diff --git a/alpine/kernel/patches/0017-Drivers-hv-vmbus-channge-vmbus_connection.channel_lo.patch b/alpine/kernel/patches/0022-Drivers-hv-vmbus-channge-vmbus_connection.channel_lo.patch similarity index 96% rename from alpine/kernel/patches/0017-Drivers-hv-vmbus-channge-vmbus_connection.channel_lo.patch rename to alpine/kernel/patches/0022-Drivers-hv-vmbus-channge-vmbus_connection.channel_lo.patch index cdb32f788..0614636ff 100644 --- a/alpine/kernel/patches/0017-Drivers-hv-vmbus-channge-vmbus_connection.channel_lo.patch +++ b/alpine/kernel/patches/0022-Drivers-hv-vmbus-channge-vmbus_connection.channel_lo.patch @@ -1,7 +1,7 @@ -From dfc150e7bb90be0591784b1f8a532670ee1c011a Mon Sep 17 00:00:00 2001 +From abf8e10f0d5db38d8fbe6df7d1a680162f8d3ffa Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Mon, 14 Dec 2015 16:01:51 -0800 -Subject: [PATCH 17/40] Drivers: hv: vmbus: channge +Subject: [PATCH 22/45] Drivers: hv: vmbus: channge vmbus_connection.channel_lock to mutex spinlock is unnecessary here. @@ -112,5 +112,5 @@ index 3782636..d9937be 100644 struct workqueue_struct *work_queue; }; -- -2.9.0 +2.9.3 diff --git a/alpine/kernel/patches/0018-Drivers-hv-remove-code-duplication-between-vmbus_rec.patch b/alpine/kernel/patches/0023-Drivers-hv-remove-code-duplication-between-vmbus_rec.patch similarity index 96% rename from alpine/kernel/patches/0018-Drivers-hv-remove-code-duplication-between-vmbus_rec.patch rename to alpine/kernel/patches/0023-Drivers-hv-remove-code-duplication-between-vmbus_rec.patch index acd6e06c8..d84039d3e 100644 --- a/alpine/kernel/patches/0018-Drivers-hv-remove-code-duplication-between-vmbus_rec.patch +++ b/alpine/kernel/patches/0023-Drivers-hv-remove-code-duplication-between-vmbus_rec.patch @@ -1,7 +1,7 @@ -From c1ebc6e51a4e579e5b20ba4fd517e0da7dc563d1 Mon Sep 17 00:00:00 2001 +From 4f9c87c89627ceae3958099a853e65bac51d2491 Mon Sep 17 00:00:00 2001 From: Vitaly Kuznetsov Date: Mon, 14 Dec 2015 19:02:00 -0800 -Subject: [PATCH 18/40] Drivers: hv: remove code duplication between +Subject: [PATCH 23/45] 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.0 +2.9.3 diff --git a/alpine/kernel/patches/0019-Drivers-hv-vmbus-fix-the-building-warning-with-hyper.patch b/alpine/kernel/patches/0024-Drivers-hv-vmbus-fix-the-building-warning-with-hyper.patch similarity index 94% rename from alpine/kernel/patches/0019-Drivers-hv-vmbus-fix-the-building-warning-with-hyper.patch rename to alpine/kernel/patches/0024-Drivers-hv-vmbus-fix-the-building-warning-with-hyper.patch index 362923279..33afec491 100644 --- a/alpine/kernel/patches/0019-Drivers-hv-vmbus-fix-the-building-warning-with-hyper.patch +++ b/alpine/kernel/patches/0024-Drivers-hv-vmbus-fix-the-building-warning-with-hyper.patch @@ -1,7 +1,7 @@ -From cc4a6558e39bfc3042357669ff74d13f55e4f856 Mon Sep 17 00:00:00 2001 +From 172dc2c2f9a6536990de55c4dabfd71ba62833f8 Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Mon, 21 Dec 2015 12:21:22 -0800 -Subject: [PATCH 19/40] Drivers: hv: vmbus: fix the building warning with +Subject: [PATCH 24/45] 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.0 +2.9.3 diff --git a/alpine/kernel/patches/0020-Drivers-hv-vmbus-Treat-Fibre-Channel-devices-as-perf.patch b/alpine/kernel/patches/0025-Drivers-hv-vmbus-Treat-Fibre-Channel-devices-as-perf.patch similarity index 89% rename from alpine/kernel/patches/0020-Drivers-hv-vmbus-Treat-Fibre-Channel-devices-as-perf.patch rename to alpine/kernel/patches/0025-Drivers-hv-vmbus-Treat-Fibre-Channel-devices-as-perf.patch index bfef6f4ca..2c49db039 100644 --- a/alpine/kernel/patches/0020-Drivers-hv-vmbus-Treat-Fibre-Channel-devices-as-perf.patch +++ b/alpine/kernel/patches/0025-Drivers-hv-vmbus-Treat-Fibre-Channel-devices-as-perf.patch @@ -1,7 +1,7 @@ -From e9725d58380af9a2549b7fc76f512fc8bddea14b Mon Sep 17 00:00:00 2001 +From de9460b1d17a51ab2b3a1811ae3992fec7e15ca2 Mon Sep 17 00:00:00 2001 From: "K. Y. Srinivasan" Date: Tue, 15 Dec 2015 16:27:27 -0800 -Subject: [PATCH 20/40] Drivers: hv: vmbus: Treat Fibre Channel devices as +Subject: [PATCH 25/45] Drivers: hv: vmbus: Treat Fibre Channel devices as performance critical For performance critical devices, we distribute the incoming @@ -38,5 +38,5 @@ index d013171..1c1ad47 100644 { HV_NIC_GUID, }, /* NetworkDirect Guest RDMA */ -- -2.9.0 +2.9.3 diff --git a/alpine/kernel/patches/0021-Drivers-hv-vmbus-Add-vendor-and-device-atttributes.patch b/alpine/kernel/patches/0026-Drivers-hv-vmbus-Add-vendor-and-device-atttributes.patch similarity index 96% rename from alpine/kernel/patches/0021-Drivers-hv-vmbus-Add-vendor-and-device-atttributes.patch rename to alpine/kernel/patches/0026-Drivers-hv-vmbus-Add-vendor-and-device-atttributes.patch index 8dc933c90..a47a99ae3 100644 --- a/alpine/kernel/patches/0021-Drivers-hv-vmbus-Add-vendor-and-device-atttributes.patch +++ b/alpine/kernel/patches/0026-Drivers-hv-vmbus-Add-vendor-and-device-atttributes.patch @@ -1,7 +1,7 @@ -From 396bc263df13d54d2468c5d2a7888fc9f4067894 Mon Sep 17 00:00:00 2001 +From 2b8233468015c17304c8205eb16f798a9334155e Mon Sep 17 00:00:00 2001 From: "K. Y. Srinivasan" Date: Fri, 25 Dec 2015 20:00:30 -0800 -Subject: [PATCH 21/40] Drivers: hv: vmbus: Add vendor and device atttributes +Subject: [PATCH 26/45] 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 @@ -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 5a71b2a..3b83dfe 100644 +index 8bf1f31..959b656 100644 --- a/drivers/hv/vmbus_drv.c +++ b/drivers/hv/vmbus_drv.c -@@ -478,6 +478,24 @@ static ssize_t channel_vp_mapping_show(struct device *dev, +@@ -479,6 +479,24 @@ static ssize_t channel_vp_mapping_show(struct device *dev, } static DEVICE_ATTR_RO(channel_vp_mapping); @@ -287,7 +287,7 @@ index 5a71b2a..3b83dfe 100644 /* Set up per device attributes in /sys/bus/vmbus/devices/ */ static struct attribute *vmbus_attrs[] = { &dev_attr_id.attr, -@@ -503,6 +521,8 @@ static struct attribute *vmbus_attrs[] = { +@@ -504,6 +522,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 5a71b2a..3b83dfe 100644 NULL, }; ATTRIBUTE_GROUPS(vmbus); -@@ -957,6 +977,7 @@ struct hv_device *vmbus_device_create(const uuid_le *type, +@@ -960,6 +980,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.0 +2.9.3 diff --git a/alpine/kernel/patches/0022-Drivers-hv-vmbus-avoid-infinite-loop-in-init_vp_inde.patch b/alpine/kernel/patches/0027-Drivers-hv-vmbus-avoid-infinite-loop-in-init_vp_inde.patch similarity index 92% rename from alpine/kernel/patches/0022-Drivers-hv-vmbus-avoid-infinite-loop-in-init_vp_inde.patch rename to alpine/kernel/patches/0027-Drivers-hv-vmbus-avoid-infinite-loop-in-init_vp_inde.patch index 3b2e75a12..4c714ab3c 100644 --- a/alpine/kernel/patches/0022-Drivers-hv-vmbus-avoid-infinite-loop-in-init_vp_inde.patch +++ b/alpine/kernel/patches/0027-Drivers-hv-vmbus-avoid-infinite-loop-in-init_vp_inde.patch @@ -1,7 +1,7 @@ -From 864ad2a0988143fecd3b3c9282777a6930b34d5e Mon Sep 17 00:00:00 2001 +From 6a01db640f2950f33a51bc4549058d491c8d1314 Mon Sep 17 00:00:00 2001 From: Vitaly Kuznetsov Date: Wed, 27 Jan 2016 22:29:34 -0800 -Subject: [PATCH 22/40] Drivers: hv: vmbus: avoid infinite loop in +Subject: [PATCH 27/45] 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 @@ -45,5 +45,5 @@ index 107d72f..af1d82e 100644 cur_cpu = cpumask_next(cur_cpu, &available_mask); if (cur_cpu >= nr_cpu_ids) { -- -2.9.0 +2.9.3 diff --git a/alpine/kernel/patches/0023-Drivers-hv-vmbus-avoid-scheduling-in-interrupt-conte.patch b/alpine/kernel/patches/0028-Drivers-hv-vmbus-avoid-scheduling-in-interrupt-conte.patch similarity index 95% rename from alpine/kernel/patches/0023-Drivers-hv-vmbus-avoid-scheduling-in-interrupt-conte.patch rename to alpine/kernel/patches/0028-Drivers-hv-vmbus-avoid-scheduling-in-interrupt-conte.patch index 5da7f514d..733ef1c2d 100644 --- a/alpine/kernel/patches/0023-Drivers-hv-vmbus-avoid-scheduling-in-interrupt-conte.patch +++ b/alpine/kernel/patches/0028-Drivers-hv-vmbus-avoid-scheduling-in-interrupt-conte.patch @@ -1,7 +1,7 @@ -From fa2a38837ff00acfa5a1cb8fedbff33260f36653 Mon Sep 17 00:00:00 2001 +From 798509ab822925cc9bbe9b3f7d56ceb5869aa61c Mon Sep 17 00:00:00 2001 From: Vitaly Kuznetsov Date: Wed, 27 Jan 2016 22:29:35 -0800 -Subject: [PATCH 23/40] Drivers: hv: vmbus: avoid scheduling in interrupt +Subject: [PATCH 28/45] 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 @@ -95,5 +95,5 @@ index af1d82e..d6c6114 100644 /* -- -2.9.0 +2.9.3 diff --git a/alpine/kernel/patches/0024-Drivers-hv-vmbus-add-a-helper-function-to-set-a-chan.patch b/alpine/kernel/patches/0029-Drivers-hv-vmbus-add-a-helper-function-to-set-a-chan.patch similarity index 88% rename from alpine/kernel/patches/0024-Drivers-hv-vmbus-add-a-helper-function-to-set-a-chan.patch rename to alpine/kernel/patches/0029-Drivers-hv-vmbus-add-a-helper-function-to-set-a-chan.patch index bc90c47f0..ea13b6183 100644 --- a/alpine/kernel/patches/0024-Drivers-hv-vmbus-add-a-helper-function-to-set-a-chan.patch +++ b/alpine/kernel/patches/0029-Drivers-hv-vmbus-add-a-helper-function-to-set-a-chan.patch @@ -1,7 +1,7 @@ -From d24827511ecaab87a0763e43a13e7c742338ca90 Mon Sep 17 00:00:00 2001 +From 1cea598f33747f6f221600e4135fa1c7eb0339b3 Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Wed, 27 Jan 2016 22:29:37 -0800 -Subject: [PATCH 24/40] Drivers: hv: vmbus: add a helper function to set a +Subject: [PATCH 29/45] 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.0 +2.9.3 diff --git a/alpine/kernel/patches/0025-Drivers-hv-vmbus-define-the-new-offer-type-for-Hyper.patch b/alpine/kernel/patches/0030-Drivers-hv-vmbus-define-the-new-offer-type-for-Hyper.patch similarity index 90% rename from alpine/kernel/patches/0025-Drivers-hv-vmbus-define-the-new-offer-type-for-Hyper.patch rename to alpine/kernel/patches/0030-Drivers-hv-vmbus-define-the-new-offer-type-for-Hyper.patch index 6ecd7cb07..ae5245f99 100644 --- a/alpine/kernel/patches/0025-Drivers-hv-vmbus-define-the-new-offer-type-for-Hyper.patch +++ b/alpine/kernel/patches/0030-Drivers-hv-vmbus-define-the-new-offer-type-for-Hyper.patch @@ -1,7 +1,7 @@ -From 81caa506ed7b4af65b15c7f79e2cd82ba9565d8e Mon Sep 17 00:00:00 2001 +From 484e9fa916f11b145201a8473142977d260f924a Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Wed, 27 Jan 2016 22:29:38 -0800 -Subject: [PATCH 25/40] Drivers: hv: vmbus: define the new offer type for +Subject: [PATCH 30/45] 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.0 +2.9.3 diff --git a/alpine/kernel/patches/0026-Drivers-hv-vmbus-vmbus_sendpacket_ctl-hvsock-avoid-u.patch b/alpine/kernel/patches/0031-Drivers-hv-vmbus-vmbus_sendpacket_ctl-hvsock-avoid-u.patch similarity index 91% rename from alpine/kernel/patches/0026-Drivers-hv-vmbus-vmbus_sendpacket_ctl-hvsock-avoid-u.patch rename to alpine/kernel/patches/0031-Drivers-hv-vmbus-vmbus_sendpacket_ctl-hvsock-avoid-u.patch index 7f61e070a..80445fdba 100644 --- a/alpine/kernel/patches/0026-Drivers-hv-vmbus-vmbus_sendpacket_ctl-hvsock-avoid-u.patch +++ b/alpine/kernel/patches/0031-Drivers-hv-vmbus-vmbus_sendpacket_ctl-hvsock-avoid-u.patch @@ -1,7 +1,7 @@ -From 460356566f2e7d6a3b8f70154d0208620ee93063 Mon Sep 17 00:00:00 2001 +From e076eff3df2c5592ca711a0f3b9665ee9a9981c7 Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Wed, 27 Jan 2016 22:29:39 -0800 -Subject: [PATCH 26/40] Drivers: hv: vmbus: vmbus_sendpacket_ctl: hvsock: avoid +Subject: [PATCH 31/45] 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.0 +2.9.3 diff --git a/alpine/kernel/patches/0027-Drivers-hv-vmbus-define-a-new-VMBus-message-type-for.patch b/alpine/kernel/patches/0032-Drivers-hv-vmbus-define-a-new-VMBus-message-type-for.patch similarity index 96% rename from alpine/kernel/patches/0027-Drivers-hv-vmbus-define-a-new-VMBus-message-type-for.patch rename to alpine/kernel/patches/0032-Drivers-hv-vmbus-define-a-new-VMBus-message-type-for.patch index a2f443826..3b7dde36d 100644 --- a/alpine/kernel/patches/0027-Drivers-hv-vmbus-define-a-new-VMBus-message-type-for.patch +++ b/alpine/kernel/patches/0032-Drivers-hv-vmbus-define-a-new-VMBus-message-type-for.patch @@ -1,7 +1,7 @@ -From 7b1854b482f0a1e22e3ff5dfc5111ae968354b55 Mon Sep 17 00:00:00 2001 +From ef0c006df50c1a0f91827f2f84bb0936952e1361 Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Wed, 27 Jan 2016 22:29:40 -0800 -Subject: [PATCH 27/40] Drivers: hv: vmbus: define a new VMBus message type for +Subject: [PATCH 32/45] 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.0 +2.9.3 diff --git a/alpine/kernel/patches/0028-Drivers-hv-vmbus-add-a-hvsock-flag-in-struct-hv_driv.patch b/alpine/kernel/patches/0033-Drivers-hv-vmbus-add-a-hvsock-flag-in-struct-hv_driv.patch similarity index 90% rename from alpine/kernel/patches/0028-Drivers-hv-vmbus-add-a-hvsock-flag-in-struct-hv_driv.patch rename to alpine/kernel/patches/0033-Drivers-hv-vmbus-add-a-hvsock-flag-in-struct-hv_driv.patch index 9f4a78bc0..01b32ecf7 100644 --- a/alpine/kernel/patches/0028-Drivers-hv-vmbus-add-a-hvsock-flag-in-struct-hv_driv.patch +++ b/alpine/kernel/patches/0033-Drivers-hv-vmbus-add-a-hvsock-flag-in-struct-hv_driv.patch @@ -1,7 +1,7 @@ -From 80bf79d36dbffe682ccc62c8a4210e3ba4a6ecd3 Mon Sep 17 00:00:00 2001 +From 8271769466aa4286ad5fe29e7bddc85701965314 Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Wed, 27 Jan 2016 22:29:41 -0800 -Subject: [PATCH 28/40] Drivers: hv: vmbus: add a hvsock flag in struct +Subject: [PATCH 33/45] 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 2 files changed, 18 insertions(+) diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c -index 3b83dfe..d76a65f 100644 +index 959b656..d46b4ff 100644 --- a/drivers/hv/vmbus_drv.c +++ b/drivers/hv/vmbus_drv.c -@@ -583,6 +583,10 @@ static int vmbus_match(struct device *device, struct device_driver *driver) +@@ -584,6 +584,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.0 +2.9.3 diff --git a/alpine/kernel/patches/0029-Drivers-hv-vmbus-add-a-per-channel-rescind-callback.patch b/alpine/kernel/patches/0034-Drivers-hv-vmbus-add-a-per-channel-rescind-callback.patch similarity index 94% rename from alpine/kernel/patches/0029-Drivers-hv-vmbus-add-a-per-channel-rescind-callback.patch rename to alpine/kernel/patches/0034-Drivers-hv-vmbus-add-a-per-channel-rescind-callback.patch index 840a878f0..f93e0ba78 100644 --- a/alpine/kernel/patches/0029-Drivers-hv-vmbus-add-a-per-channel-rescind-callback.patch +++ b/alpine/kernel/patches/0034-Drivers-hv-vmbus-add-a-per-channel-rescind-callback.patch @@ -1,7 +1,7 @@ -From 82e699723be65d45ae64999eb60bde5cbb016368 Mon Sep 17 00:00:00 2001 +From 810c87d25aae195016a8d3a90aa3cf7258e2c7cc Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Wed, 27 Jan 2016 22:29:42 -0800 -Subject: [PATCH 29/40] Drivers: hv: vmbus: add a per-channel rescind callback +Subject: [PATCH 34/45] 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.0 +2.9.3 diff --git a/alpine/kernel/patches/0030-Drivers-hv-vmbus-add-an-API-vmbus_hvsock_device_unre.patch b/alpine/kernel/patches/0035-Drivers-hv-vmbus-add-an-API-vmbus_hvsock_device_unre.patch similarity index 97% rename from alpine/kernel/patches/0030-Drivers-hv-vmbus-add-an-API-vmbus_hvsock_device_unre.patch rename to alpine/kernel/patches/0035-Drivers-hv-vmbus-add-an-API-vmbus_hvsock_device_unre.patch index fe7291698..5813461bc 100644 --- a/alpine/kernel/patches/0030-Drivers-hv-vmbus-add-an-API-vmbus_hvsock_device_unre.patch +++ b/alpine/kernel/patches/0035-Drivers-hv-vmbus-add-an-API-vmbus_hvsock_device_unre.patch @@ -1,7 +1,7 @@ -From d29f80db881010c9eb7f7f09e33adcb2ec815f58 Mon Sep 17 00:00:00 2001 +From b20109841eac978453e3514b51fb93aa292ece09 Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Wed, 27 Jan 2016 22:29:43 -0800 -Subject: [PATCH 30/40] Drivers: hv: vmbus: add an API +Subject: [PATCH 35/45] 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.0 +2.9.3 diff --git a/alpine/kernel/patches/0031-Drivers-hv-vmbus-Give-control-over-how-the-ring-acce.patch b/alpine/kernel/patches/0036-Drivers-hv-vmbus-Give-control-over-how-the-ring-acce.patch similarity index 98% rename from alpine/kernel/patches/0031-Drivers-hv-vmbus-Give-control-over-how-the-ring-acce.patch rename to alpine/kernel/patches/0036-Drivers-hv-vmbus-Give-control-over-how-the-ring-acce.patch index 5908e7049..c2e042f43 100644 --- a/alpine/kernel/patches/0031-Drivers-hv-vmbus-Give-control-over-how-the-ring-acce.patch +++ b/alpine/kernel/patches/0036-Drivers-hv-vmbus-Give-control-over-how-the-ring-acce.patch @@ -1,7 +1,7 @@ -From 73a45a3f46df47b046fea2fa656602a3422ba54a Mon Sep 17 00:00:00 2001 +From b6ad0bd0eb97a4704e3e4f857282f41dfc8a08d8 Mon Sep 17 00:00:00 2001 From: "K. Y. Srinivasan" Date: Wed, 27 Jan 2016 22:29:45 -0800 -Subject: [PATCH 31/40] Drivers: hv: vmbus: Give control over how the ring +Subject: [PATCH 36/45] Drivers: hv: vmbus: Give control over how the ring access is serialized On the channel send side, many of the VMBUS @@ -204,5 +204,5 @@ index 993318a..6c9695e 100644 { return !!(c->offermsg.offer.chn_flags & -- -2.9.0 +2.9.3 diff --git a/alpine/kernel/patches/0032-Drivers-hv-vmbus-avoid-wait_for_completion-on-crash.patch b/alpine/kernel/patches/0037-Drivers-hv-vmbus-avoid-wait_for_completion-on-crash.patch similarity index 92% rename from alpine/kernel/patches/0032-Drivers-hv-vmbus-avoid-wait_for_completion-on-crash.patch rename to alpine/kernel/patches/0037-Drivers-hv-vmbus-avoid-wait_for_completion-on-crash.patch index 12a1e6030..12ca76c37 100644 --- a/alpine/kernel/patches/0032-Drivers-hv-vmbus-avoid-wait_for_completion-on-crash.patch +++ b/alpine/kernel/patches/0037-Drivers-hv-vmbus-avoid-wait_for_completion-on-crash.patch @@ -1,7 +1,7 @@ -From aa5c8776d3db2e7f09804631aec6d8e7b7265332 Mon Sep 17 00:00:00 2001 +From f465de8d2676b9f125255e8f3eec5e631d07d60e Mon Sep 17 00:00:00 2001 From: Vitaly Kuznetsov Date: Fri, 26 Feb 2016 15:13:16 -0800 -Subject: [PATCH 32/40] Drivers: hv: vmbus: avoid wait_for_completion() on +Subject: [PATCH 37/45] Drivers: hv: vmbus: avoid wait_for_completion() on crash MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 @@ -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 d76a65f..45ea71e 100644 +index d46b4ff..f5f57ee 100644 --- a/drivers/hv/vmbus_drv.c +++ b/drivers/hv/vmbus_drv.c -@@ -1263,7 +1263,7 @@ static void hv_kexec_handler(void) +@@ -1266,7 +1266,7 @@ static void hv_kexec_handler(void) int cpu; hv_synic_clockevents_cleanup(); @@ -86,7 +86,7 @@ index d76a65f..45ea71e 100644 for_each_online_cpu(cpu) smp_call_function_single(cpu, hv_synic_cleanup, NULL, 1); hv_cleanup(); -@@ -1271,7 +1271,7 @@ static void hv_kexec_handler(void) +@@ -1274,7 +1274,7 @@ static void hv_kexec_handler(void) static void hv_crash_handler(struct pt_regs *regs) { @@ -96,5 +96,5 @@ index d76a65f..45ea71e 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.0 +2.9.3 diff --git a/alpine/kernel/patches/0033-Drivers-hv-vmbus-avoid-unneeded-compiler-optimizatio.patch b/alpine/kernel/patches/0038-Drivers-hv-vmbus-avoid-unneeded-compiler-optimizatio.patch similarity index 90% rename from alpine/kernel/patches/0033-Drivers-hv-vmbus-avoid-unneeded-compiler-optimizatio.patch rename to alpine/kernel/patches/0038-Drivers-hv-vmbus-avoid-unneeded-compiler-optimizatio.patch index fe8571b99..8c139239a 100644 --- a/alpine/kernel/patches/0033-Drivers-hv-vmbus-avoid-unneeded-compiler-optimizatio.patch +++ b/alpine/kernel/patches/0038-Drivers-hv-vmbus-avoid-unneeded-compiler-optimizatio.patch @@ -1,7 +1,7 @@ -From f6eda6e9caee4b2eac5c5ad7a63002b7691f2102 Mon Sep 17 00:00:00 2001 +From d7b1742f30b68fae9c0bd627704106f7665c30ed Mon Sep 17 00:00:00 2001 From: Vitaly Kuznetsov Date: Fri, 26 Feb 2016 15:13:18 -0800 -Subject: [PATCH 33/40] Drivers: hv: vmbus: avoid unneeded compiler +Subject: [PATCH 38/45] 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.0 +2.9.3 diff --git a/alpine/kernel/patches/0034-kcm-Kernel-Connection-Multiplexor-module.patch b/alpine/kernel/patches/0039-kcm-Kernel-Connection-Multiplexor-module.patch similarity index 99% rename from alpine/kernel/patches/0034-kcm-Kernel-Connection-Multiplexor-module.patch rename to alpine/kernel/patches/0039-kcm-Kernel-Connection-Multiplexor-module.patch index 077466d68..da583f888 100644 --- a/alpine/kernel/patches/0034-kcm-Kernel-Connection-Multiplexor-module.patch +++ b/alpine/kernel/patches/0039-kcm-Kernel-Connection-Multiplexor-module.patch @@ -1,7 +1,7 @@ -From f377090a6256e4bbe8bc26ee524a03ea198fb402 Mon Sep 17 00:00:00 2001 +From 556c8b33b1690096d9b216184b0c892e058e8d76 Mon Sep 17 00:00:00 2001 From: Tom Herbert Date: Mon, 7 Mar 2016 14:11:06 -0800 -Subject: [PATCH 34/40] kcm: Kernel Connection Multiplexor module +Subject: [PATCH 39/45] 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.0 +2.9.3 diff --git a/alpine/kernel/patches/0035-net-add-the-AF_KCM-entries-to-family-name-tables.patch b/alpine/kernel/patches/0040-net-add-the-AF_KCM-entries-to-family-name-tables.patch similarity index 94% rename from alpine/kernel/patches/0035-net-add-the-AF_KCM-entries-to-family-name-tables.patch rename to alpine/kernel/patches/0040-net-add-the-AF_KCM-entries-to-family-name-tables.patch index 255824c7b..c8d73b490 100644 --- a/alpine/kernel/patches/0035-net-add-the-AF_KCM-entries-to-family-name-tables.patch +++ b/alpine/kernel/patches/0040-net-add-the-AF_KCM-entries-to-family-name-tables.patch @@ -1,7 +1,7 @@ -From 1aaf078c41b6150c42a40ca165003c5b902ba541 Mon Sep 17 00:00:00 2001 +From d3f41a6e22aecae1e0502dadc7ff1847f9b64af0 Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Mon, 21 Mar 2016 02:51:09 -0700 -Subject: [PATCH 35/40] net: add the AF_KCM entries to family name tables +Subject: [PATCH 40/45] 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.0 +2.9.3 diff --git a/alpine/kernel/patches/0036-net-Add-Qualcomm-IPC-router.patch b/alpine/kernel/patches/0041-net-Add-Qualcomm-IPC-router.patch similarity index 99% rename from alpine/kernel/patches/0036-net-Add-Qualcomm-IPC-router.patch rename to alpine/kernel/patches/0041-net-Add-Qualcomm-IPC-router.patch index 9f2e9a442..334732582 100644 --- a/alpine/kernel/patches/0036-net-Add-Qualcomm-IPC-router.patch +++ b/alpine/kernel/patches/0041-net-Add-Qualcomm-IPC-router.patch @@ -1,7 +1,7 @@ -From 46cb53195e3a65ab11c6447b855ef9684f29812b Mon Sep 17 00:00:00 2001 +From 8d3d67fb44d8d9b44b9923d1cbddf9285b9b68ae Mon Sep 17 00:00:00 2001 From: Courtney Cavin Date: Wed, 27 Apr 2016 12:13:03 -0700 -Subject: [PATCH 36/40] net: Add Qualcomm IPC router +Subject: [PATCH 41/45] 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.0 +2.9.3 diff --git a/alpine/kernel/patches/0037-hv_sock-introduce-Hyper-V-Sockets.patch b/alpine/kernel/patches/0042-hv_sock-introduce-Hyper-V-Sockets.patch similarity index 99% rename from alpine/kernel/patches/0037-hv_sock-introduce-Hyper-V-Sockets.patch rename to alpine/kernel/patches/0042-hv_sock-introduce-Hyper-V-Sockets.patch index b3e6f6b56..064693e16 100644 --- a/alpine/kernel/patches/0037-hv_sock-introduce-Hyper-V-Sockets.patch +++ b/alpine/kernel/patches/0042-hv_sock-introduce-Hyper-V-Sockets.patch @@ -1,7 +1,7 @@ -From 04b3d63b757432d90ce323a748b85a866114d9ac Mon Sep 17 00:00:00 2001 +From 9d627b917f9bf189f938e30fe4c6b11c241e204e Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Sun, 15 May 2016 09:53:11 -0700 -Subject: [PATCH 37/40] hv_sock: introduce Hyper-V Sockets +Subject: [PATCH 42/45] 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 12d49f5..fa87bdd 100644 +index fa94182..ff17e76 100644 --- a/MAINTAINERS +++ b/MAINTAINERS -@@ -5123,7 +5123,9 @@ F: drivers/input/serio/hyperv-keyboard.c +@@ -5136,7 +5136,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 @@ -1801,5 +1801,5 @@ index 0000000..b91bd60 +MODULE_DESCRIPTION("Hyper-V Sockets"); +MODULE_LICENSE("Dual BSD/GPL"); -- -2.9.0 +2.9.3 diff --git a/alpine/kernel/patches/0038-net-add-the-AF_HYPERV-entries-to-family-name-tables.patch b/alpine/kernel/patches/0043-net-add-the-AF_HYPERV-entries-to-family-name-tables.patch similarity index 93% rename from alpine/kernel/patches/0038-net-add-the-AF_HYPERV-entries-to-family-name-tables.patch rename to alpine/kernel/patches/0043-net-add-the-AF_HYPERV-entries-to-family-name-tables.patch index 46437ca1f..eb0cc347b 100644 --- a/alpine/kernel/patches/0038-net-add-the-AF_HYPERV-entries-to-family-name-tables.patch +++ b/alpine/kernel/patches/0043-net-add-the-AF_HYPERV-entries-to-family-name-tables.patch @@ -1,7 +1,7 @@ -From 179a4a8d5ad76cab98d2bc4b0f2633898d59e9f8 Mon Sep 17 00:00:00 2001 +From 0436560566688b27d0a1f505481b2bb3b738888e Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Mon, 21 Mar 2016 02:53:08 -0700 -Subject: [PATCH 38/40] net: add the AF_HYPERV entries to family name tables +Subject: [PATCH 43/45] 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.0 +2.9.3 diff --git a/alpine/kernel/patches/0039-Drivers-hv-vmbus-fix-the-race-when-querying-updating.patch b/alpine/kernel/patches/0044-Drivers-hv-vmbus-fix-the-race-when-querying-updating.patch similarity index 96% rename from alpine/kernel/patches/0039-Drivers-hv-vmbus-fix-the-race-when-querying-updating.patch rename to alpine/kernel/patches/0044-Drivers-hv-vmbus-fix-the-race-when-querying-updating.patch index beecbf7b4..9ba2cfa9a 100644 --- a/alpine/kernel/patches/0039-Drivers-hv-vmbus-fix-the-race-when-querying-updating.patch +++ b/alpine/kernel/patches/0044-Drivers-hv-vmbus-fix-the-race-when-querying-updating.patch @@ -1,7 +1,7 @@ -From 6857a15b84ea9a592cfbe8a9064d77a63d49bc68 Mon Sep 17 00:00:00 2001 +From 2fdbef30e06e66b0de2ddc9a424db56501cf546b Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Sat, 21 May 2016 16:55:50 +0800 -Subject: [PATCH 39/40] Drivers: hv: vmbus: fix the race when querying & +Subject: [PATCH 44/45] 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.0 +2.9.3 diff --git a/alpine/kernel/patches/0040-vmbus-Don-t-spam-the-logs-with-unknown-GUIDs.patch b/alpine/kernel/patches/0045-vmbus-Don-t-spam-the-logs-with-unknown-GUIDs.patch similarity index 86% rename from alpine/kernel/patches/0040-vmbus-Don-t-spam-the-logs-with-unknown-GUIDs.patch rename to alpine/kernel/patches/0045-vmbus-Don-t-spam-the-logs-with-unknown-GUIDs.patch index 3dafc6af1..72915ff0b 100644 --- a/alpine/kernel/patches/0040-vmbus-Don-t-spam-the-logs-with-unknown-GUIDs.patch +++ b/alpine/kernel/patches/0045-vmbus-Don-t-spam-the-logs-with-unknown-GUIDs.patch @@ -1,7 +1,7 @@ -From e3e9e646e4cd69f7dec7f5acc4a30cb1beb6e95a Mon Sep 17 00:00:00 2001 +From 24c21ccb6524b1ecff1ff47ef8b39375b763d79f Mon Sep 17 00:00:00 2001 From: Rolf Neugebauer Date: Mon, 23 May 2016 18:55:45 +0100 -Subject: [PATCH 40/40] vmbus: Don't spam the logs with unknown GUIDs +Subject: [PATCH 45/45] 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.0 +2.9.3 From 81b86d111af6c775efb9a1608ad0596dccc253d9 Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Tue, 13 Sep 2016 10:51:49 +0100 Subject: [PATCH 2/2] kernel: Replace vsock email series with upstream patches The vsock patches were merged into mainline in v4.8-rc1, replace the patches based on the email posting with cherry-picks. The patches appear identical so the only change here is to the annotation of the origin which now references an upstream commit instead of a message-id. Add one new upstream patch b226acab2f6a "VSOCK: Use kvfree()" Signed-off-by: Ian Campbell --- ...make-find_vqs-checkpatch.pl-friendly.patch | 2 +- ...vmci_transport_notify_ops-structures.patch | 2 +- ...the-area-influenced-by-prepare_to_wa.patch | 2 +- ...istener-child-lock-ordering-explicit.patch | 2 +- ...t-specific-vsock_transport-functions.patch | 7 ++-- ...OCK-defer-sock-removal-to-transports.patch | 7 ++-- ...OCK-Introduce-virtio_vsock_common.ko.patch | 7 ++-- ...-VSOCK-Introduce-virtio_transport.ko.patch | 7 ++-- .../0009-VSOCK-Introduce-vhost_vsock.ko.patch | 7 ++-- .../0010-VSOCK-Add-Makefile-and-Kconfig.patch | 16 ++++----- .../patches/0011-VSOCK-Use-kvfree.patch | 33 +++++++++++++++++++ ...host-virtio_vsock_pkt-use-after-fre.patch} | 6 ++-- ...virtio-vsock-fix-include-guard-typo.patch} | 4 +-- ...rop-space-available-check-for-TX-vq.patch} | 4 +-- ...host-network-namespace-to-use-AF_VS.patch} | 4 +-- ...-the-channel-type-for-Hyper-V-PCI-E.patch} | 4 +-- ...vmbus-Use-uuid_le-type-consistently.patch} | 4 +-- ...Use-uuid_le_cmp-for-comparing-GUIDs.patch} | 4 +-- ...serialize-process_chn_event-and-vmb.patch} | 4 +-- ...do-sanity-check-of-channel-state-in.patch} | 4 +-- ...fix-rescind-offer-handling-for-devi.patch} | 4 +-- ...release-relid-on-error-in-vmbus_pro.patch} | 4 +-- ...channge-vmbus_connection.channel_lo.patch} | 4 +-- ...-code-duplication-between-vmbus_rec.patch} | 4 +-- ...fix-the-building-warning-with-hyper.patch} | 4 +-- ...Treat-Fibre-Channel-devices-as-perf.patch} | 4 +-- ...s-Add-vendor-and-device-atttributes.patch} | 4 +-- ...avoid-infinite-loop-in-init_vp_inde.patch} | 4 +-- ...avoid-scheduling-in-interrupt-conte.patch} | 4 +-- ...add-a-helper-function-to-set-a-chan.patch} | 4 +-- ...define-the-new-offer-type-for-Hyper.patch} | 4 +-- ...vmbus_sendpacket_ctl-hvsock-avoid-u.patch} | 4 +-- ...define-a-new-VMBus-message-type-for.patch} | 4 +-- ...add-a-hvsock-flag-in-struct-hv_driv.patch} | 4 +-- ...-add-a-per-channel-rescind-callback.patch} | 4 +-- ...add-an-API-vmbus_hvsock_device_unre.patch} | 4 +-- ...Give-control-over-how-the-ring-acce.patch} | 4 +-- ...-avoid-wait_for_completion-on-crash.patch} | 4 +-- ...avoid-unneeded-compiler-optimizatio.patch} | 4 +-- ...ernel-Connection-Multiplexor-module.patch} | 4 +-- ...F_KCM-entries-to-family-name-tables.patch} | 4 +-- ...=> 0042-net-Add-Qualcomm-IPC-router.patch} | 4 +-- ...3-hv_sock-introduce-Hyper-V-Sockets.patch} | 4 +-- ...YPERV-entries-to-family-name-tables.patch} | 4 +-- ...fix-the-race-when-querying-updating.patch} | 4 +-- ...-t-spam-the-logs-with-unknown-GUIDs.patch} | 4 +-- 46 files changed, 136 insertions(+), 98 deletions(-) create mode 100644 alpine/kernel/patches/0011-VSOCK-Use-kvfree.patch rename alpine/kernel/patches/{0011-vhost-vsock-fix-vhost-virtio_vsock_pkt-use-after-fre.patch => 0012-vhost-vsock-fix-vhost-virtio_vsock_pkt-use-after-fre.patch} (90%) rename alpine/kernel/patches/{0012-virtio-vsock-fix-include-guard-typo.patch => 0013-virtio-vsock-fix-include-guard-typo.patch} (85%) rename alpine/kernel/patches/{0013-vhost-vsock-drop-space-available-check-for-TX-vq.patch => 0014-vhost-vsock-drop-space-available-check-for-TX-vq.patch} (93%) rename alpine/kernel/patches/{0014-VSOCK-Only-allow-host-network-namespace-to-use-AF_VS.patch => 0015-VSOCK-Only-allow-host-network-namespace-to-use-AF_VS.patch} (86%) rename alpine/kernel/patches/{0015-drivers-hv-Define-the-channel-type-for-Hyper-V-PCI-E.patch => 0016-drivers-hv-Define-the-channel-type-for-Hyper-V-PCI-E.patch} (92%) rename alpine/kernel/patches/{0016-Drivers-hv-vmbus-Use-uuid_le-type-consistently.patch => 0017-Drivers-hv-vmbus-Use-uuid_le-type-consistently.patch} (98%) rename alpine/kernel/patches/{0017-Drivers-hv-vmbus-Use-uuid_le_cmp-for-comparing-GUIDs.patch => 0018-Drivers-hv-vmbus-Use-uuid_le_cmp-for-comparing-GUIDs.patch} (92%) rename alpine/kernel/patches/{0018-Drivers-hv-vmbus-serialize-process_chn_event-and-vmb.patch => 0019-Drivers-hv-vmbus-serialize-process_chn_event-and-vmb.patch} (95%) rename alpine/kernel/patches/{0019-Drivers-hv-vmbus-do-sanity-check-of-channel-state-in.patch => 0020-Drivers-hv-vmbus-do-sanity-check-of-channel-state-in.patch} (91%) rename alpine/kernel/patches/{0020-Drivers-hv-vmbus-fix-rescind-offer-handling-for-devi.patch => 0021-Drivers-hv-vmbus-fix-rescind-offer-handling-for-devi.patch} (96%) rename alpine/kernel/patches/{0021-Drivers-hv-vmbus-release-relid-on-error-in-vmbus_pro.patch => 0022-Drivers-hv-vmbus-release-relid-on-error-in-vmbus_pro.patch} (94%) rename alpine/kernel/patches/{0022-Drivers-hv-vmbus-channge-vmbus_connection.channel_lo.patch => 0023-Drivers-hv-vmbus-channge-vmbus_connection.channel_lo.patch} (97%) rename alpine/kernel/patches/{0023-Drivers-hv-remove-code-duplication-between-vmbus_rec.patch => 0024-Drivers-hv-remove-code-duplication-between-vmbus_rec.patch} (96%) rename alpine/kernel/patches/{0024-Drivers-hv-vmbus-fix-the-building-warning-with-hyper.patch => 0025-Drivers-hv-vmbus-fix-the-building-warning-with-hyper.patch} (94%) rename alpine/kernel/patches/{0025-Drivers-hv-vmbus-Treat-Fibre-Channel-devices-as-perf.patch => 0026-Drivers-hv-vmbus-Treat-Fibre-Channel-devices-as-perf.patch} (89%) rename alpine/kernel/patches/{0026-Drivers-hv-vmbus-Add-vendor-and-device-atttributes.patch => 0027-Drivers-hv-vmbus-Add-vendor-and-device-atttributes.patch} (98%) rename alpine/kernel/patches/{0027-Drivers-hv-vmbus-avoid-infinite-loop-in-init_vp_inde.patch => 0028-Drivers-hv-vmbus-avoid-infinite-loop-in-init_vp_inde.patch} (93%) rename alpine/kernel/patches/{0028-Drivers-hv-vmbus-avoid-scheduling-in-interrupt-conte.patch => 0029-Drivers-hv-vmbus-avoid-scheduling-in-interrupt-conte.patch} (95%) rename alpine/kernel/patches/{0029-Drivers-hv-vmbus-add-a-helper-function-to-set-a-chan.patch => 0030-Drivers-hv-vmbus-add-a-helper-function-to-set-a-chan.patch} (88%) rename alpine/kernel/patches/{0030-Drivers-hv-vmbus-define-the-new-offer-type-for-Hyper.patch => 0031-Drivers-hv-vmbus-define-the-new-offer-type-for-Hyper.patch} (90%) rename alpine/kernel/patches/{0031-Drivers-hv-vmbus-vmbus_sendpacket_ctl-hvsock-avoid-u.patch => 0032-Drivers-hv-vmbus-vmbus_sendpacket_ctl-hvsock-avoid-u.patch} (92%) rename alpine/kernel/patches/{0032-Drivers-hv-vmbus-define-a-new-VMBus-message-type-for.patch => 0033-Drivers-hv-vmbus-define-a-new-VMBus-message-type-for.patch} (96%) rename alpine/kernel/patches/{0033-Drivers-hv-vmbus-add-a-hvsock-flag-in-struct-hv_driv.patch => 0034-Drivers-hv-vmbus-add-a-hvsock-flag-in-struct-hv_driv.patch} (94%) rename alpine/kernel/patches/{0034-Drivers-hv-vmbus-add-a-per-channel-rescind-callback.patch => 0035-Drivers-hv-vmbus-add-a-per-channel-rescind-callback.patch} (95%) rename alpine/kernel/patches/{0035-Drivers-hv-vmbus-add-an-API-vmbus_hvsock_device_unre.patch => 0036-Drivers-hv-vmbus-add-an-API-vmbus_hvsock_device_unre.patch} (97%) rename alpine/kernel/patches/{0036-Drivers-hv-vmbus-Give-control-over-how-the-ring-acce.patch => 0037-Drivers-hv-vmbus-Give-control-over-how-the-ring-acce.patch} (98%) rename alpine/kernel/patches/{0037-Drivers-hv-vmbus-avoid-wait_for_completion-on-crash.patch => 0038-Drivers-hv-vmbus-avoid-wait_for_completion-on-crash.patch} (96%) rename alpine/kernel/patches/{0038-Drivers-hv-vmbus-avoid-unneeded-compiler-optimizatio.patch => 0039-Drivers-hv-vmbus-avoid-unneeded-compiler-optimizatio.patch} (90%) rename alpine/kernel/patches/{0039-kcm-Kernel-Connection-Multiplexor-module.patch => 0040-kcm-Kernel-Connection-Multiplexor-module.patch} (99%) rename alpine/kernel/patches/{0040-net-add-the-AF_KCM-entries-to-family-name-tables.patch => 0041-net-add-the-AF_KCM-entries-to-family-name-tables.patch} (94%) rename alpine/kernel/patches/{0041-net-Add-Qualcomm-IPC-router.patch => 0042-net-Add-Qualcomm-IPC-router.patch} (99%) rename alpine/kernel/patches/{0042-hv_sock-introduce-Hyper-V-Sockets.patch => 0043-hv_sock-introduce-Hyper-V-Sockets.patch} (99%) rename alpine/kernel/patches/{0043-net-add-the-AF_HYPERV-entries-to-family-name-tables.patch => 0044-net-add-the-AF_HYPERV-entries-to-family-name-tables.patch} (93%) rename alpine/kernel/patches/{0044-Drivers-hv-vmbus-fix-the-race-when-querying-updating.patch => 0045-Drivers-hv-vmbus-fix-the-race-when-querying-updating.patch} (96%) rename alpine/kernel/patches/{0045-vmbus-Don-t-spam-the-logs-with-unknown-GUIDs.patch => 0046-vmbus-Don-t-spam-the-logs-with-unknown-GUIDs.patch} (86%) diff --git a/alpine/kernel/patches/0001-virtio-make-find_vqs-checkpatch.pl-friendly.patch b/alpine/kernel/patches/0001-virtio-make-find_vqs-checkpatch.pl-friendly.patch index 4716a371d..1f134a23a 100644 --- a/alpine/kernel/patches/0001-virtio-make-find_vqs-checkpatch.pl-friendly.patch +++ b/alpine/kernel/patches/0001-virtio-make-find_vqs-checkpatch.pl-friendly.patch @@ -1,7 +1,7 @@ From 0d67af6648f600656eb20cb2ca1d35cb0985e9bd Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Thu, 17 Dec 2015 16:53:43 +0800 -Subject: [PATCH 01/45] virtio: make find_vqs() checkpatch.pl-friendly +Subject: [PATCH 01/46] virtio: make find_vqs() checkpatch.pl-friendly checkpatch.pl wants arrays of strings declared as follows: diff --git a/alpine/kernel/patches/0002-VSOCK-constify-vmci_transport_notify_ops-structures.patch b/alpine/kernel/patches/0002-VSOCK-constify-vmci_transport_notify_ops-structures.patch index 9f378dd76..62df5db6d 100644 --- a/alpine/kernel/patches/0002-VSOCK-constify-vmci_transport_notify_ops-structures.patch +++ b/alpine/kernel/patches/0002-VSOCK-constify-vmci_transport_notify_ops-structures.patch @@ -1,7 +1,7 @@ From f1e0be6f17679e7f532989bae3290bb4ed3ba773 Mon Sep 17 00:00:00 2001 From: Julia Lawall Date: Sat, 21 Nov 2015 18:39:17 +0100 -Subject: [PATCH 02/45] VSOCK: constify vmci_transport_notify_ops structures +Subject: [PATCH 02/46] VSOCK: constify vmci_transport_notify_ops structures The vmci_transport_notify_ops structures are never modified, so declare them as const. diff --git a/alpine/kernel/patches/0003-AF_VSOCK-Shrink-the-area-influenced-by-prepare_to_wa.patch b/alpine/kernel/patches/0003-AF_VSOCK-Shrink-the-area-influenced-by-prepare_to_wa.patch index 8beee3d5f..e544661d5 100644 --- a/alpine/kernel/patches/0003-AF_VSOCK-Shrink-the-area-influenced-by-prepare_to_wa.patch +++ b/alpine/kernel/patches/0003-AF_VSOCK-Shrink-the-area-influenced-by-prepare_to_wa.patch @@ -1,7 +1,7 @@ From bc63a861a8379269f4a51fdaac3d40f9161aea4d Mon Sep 17 00:00:00 2001 From: Claudio Imbrenda Date: Tue, 22 Mar 2016 17:05:52 +0100 -Subject: [PATCH 03/45] AF_VSOCK: Shrink the area influenced by prepare_to_wait +Subject: [PATCH 03/46] 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 diff --git a/alpine/kernel/patches/0004-vsock-make-listener-child-lock-ordering-explicit.patch b/alpine/kernel/patches/0004-vsock-make-listener-child-lock-ordering-explicit.patch index 0d6f30dd7..6c8795231 100644 --- a/alpine/kernel/patches/0004-vsock-make-listener-child-lock-ordering-explicit.patch +++ b/alpine/kernel/patches/0004-vsock-make-listener-child-lock-ordering-explicit.patch @@ -1,7 +1,7 @@ From c1bc13ebe28532f99cb6b8edaa57a6aa61adbe58 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Thu, 23 Jun 2016 16:28:58 +0100 -Subject: [PATCH 04/45] vsock: make listener child lock ordering explicit +Subject: [PATCH 04/46] 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 diff --git a/alpine/kernel/patches/0005-VSOCK-transport-specific-vsock_transport-functions.patch b/alpine/kernel/patches/0005-VSOCK-transport-specific-vsock_transport-functions.patch index 8b4c2c2e1..d9c50bdbe 100644 --- a/alpine/kernel/patches/0005-VSOCK-transport-specific-vsock_transport-functions.patch +++ b/alpine/kernel/patches/0005-VSOCK-transport-specific-vsock_transport-functions.patch @@ -1,7 +1,7 @@ -From fdce29497e948f4a9f9417b4a908ec54feb1c9fa Mon Sep 17 00:00:00 2001 +From 3351d8e1a0e52529aea4b5c3ce0c2ef3ad43ee17 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Thu, 28 Jul 2016 15:36:30 +0100 -Subject: [PATCH 05/45] VSOCK: transport-specific vsock_transport functions +Subject: [PATCH 05/46] 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 @@ -13,7 +13,8 @@ access transport-specific function pointers. The virtio transport will use this. Signed-off-by: Stefan Hajnoczi -(from RFC v6 <1469716595-13591-2-git-send-email-stefanha@redhat.com>) +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 0b01aeb3d2fbf16787f0c9629f4ca52ae792f732) --- include/net/af_vsock.h | 3 +++ net/vmw_vsock/af_vsock.c | 9 +++++++++ diff --git a/alpine/kernel/patches/0006-VSOCK-defer-sock-removal-to-transports.patch b/alpine/kernel/patches/0006-VSOCK-defer-sock-removal-to-transports.patch index 41ece9252..1e2144489 100644 --- a/alpine/kernel/patches/0006-VSOCK-defer-sock-removal-to-transports.patch +++ b/alpine/kernel/patches/0006-VSOCK-defer-sock-removal-to-transports.patch @@ -1,7 +1,7 @@ -From 30d9aa8b6b1c2fa720917ede2315223ca0c5d538 Mon Sep 17 00:00:00 2001 +From 54f528a28ab97e1306180adde7ba15c4158428db Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Thu, 28 Jul 2016 15:36:31 +0100 -Subject: [PATCH 06/45] VSOCK: defer sock removal to transports +Subject: [PATCH 06/46] 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 @@ -11,7 +11,8 @@ This patch adds the vsock_remove_sock() function and leaves it up to the transport when to remove the sock. Signed-off-by: Stefan Hajnoczi -(from RFC v6 <1469716595-13591-3-git-send-email-stefanha@redhat.com>) +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 6773b7dc39f165bd9d824b50ac52cbb3f87d53c8) --- include/net/af_vsock.h | 1 + net/vmw_vsock/af_vsock.c | 16 ++++++++++------ diff --git a/alpine/kernel/patches/0007-VSOCK-Introduce-virtio_vsock_common.ko.patch b/alpine/kernel/patches/0007-VSOCK-Introduce-virtio_vsock_common.ko.patch index 314fdcb60..381bf1eff 100644 --- a/alpine/kernel/patches/0007-VSOCK-Introduce-virtio_vsock_common.ko.patch +++ b/alpine/kernel/patches/0007-VSOCK-Introduce-virtio_vsock_common.ko.patch @@ -1,7 +1,7 @@ -From 3c8c257cbb209af1d2a8a7bed7e4fb385e82b813 Mon Sep 17 00:00:00 2001 +From ec54f262b84f327f1c0ecabce6f0c9b5c75ff2df Mon Sep 17 00:00:00 2001 From: Asias He Date: Thu, 28 Jul 2016 15:36:32 +0100 -Subject: [PATCH 07/45] VSOCK: Introduce virtio_vsock_common.ko +Subject: [PATCH 07/46] 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. @@ -9,7 +9,8 @@ virtio_transporto and vhost_vsock kernel modules. Signed-off-by: Asias He Signed-off-by: Claudio Imbrenda Signed-off-by: Stefan Hajnoczi -(from RFC v6 <1469716595-13591-4-git-send-email-stefanha@redhat.com>) +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 06a8fc78367d070720af960dcecec917d3ae5f3b) --- MAINTAINERS | 10 + include/linux/virtio_vsock.h | 154 ++++ diff --git a/alpine/kernel/patches/0008-VSOCK-Introduce-virtio_transport.ko.patch b/alpine/kernel/patches/0008-VSOCK-Introduce-virtio_transport.ko.patch index 13263827c..b8339c613 100644 --- a/alpine/kernel/patches/0008-VSOCK-Introduce-virtio_transport.ko.patch +++ b/alpine/kernel/patches/0008-VSOCK-Introduce-virtio_transport.ko.patch @@ -1,14 +1,15 @@ -From c6a12128d92b89b3d424e7cd3dd3c6cbfe4e1011 Mon Sep 17 00:00:00 2001 +From e21bdf5a9a62fbdabddca3cafc8aa2b02f2cc165 Mon Sep 17 00:00:00 2001 From: Asias He Date: Thu, 28 Jul 2016 15:36:33 +0100 -Subject: [PATCH 08/45] VSOCK: Introduce virtio_transport.ko +Subject: [PATCH 08/46] VSOCK: Introduce virtio_transport.ko VM sockets virtio transport implementation. This driver runs in the guest. Signed-off-by: Asias He Signed-off-by: Stefan Hajnoczi -(from RFC v6 <1469716595-13591-5-git-send-email-stefanha@redhat.com>) +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 0ea9e1d3a9e3ef7d2a1462d3de6b95131dc7d872) --- MAINTAINERS | 1 + net/vmw_vsock/virtio_transport.c | 624 +++++++++++++++++++++++++++++++++++++++ diff --git a/alpine/kernel/patches/0009-VSOCK-Introduce-vhost_vsock.ko.patch b/alpine/kernel/patches/0009-VSOCK-Introduce-vhost_vsock.ko.patch index 58c81dde0..6a43020bc 100644 --- a/alpine/kernel/patches/0009-VSOCK-Introduce-vhost_vsock.ko.patch +++ b/alpine/kernel/patches/0009-VSOCK-Introduce-vhost_vsock.ko.patch @@ -1,14 +1,15 @@ -From 007cc7ab2d6af1c213b5d5e8fc0cd651bad8f486 Mon Sep 17 00:00:00 2001 +From 7cba4e91a9e1359345ccb7dbff243cedf5b5e6ea Mon Sep 17 00:00:00 2001 From: Asias He Date: Thu, 28 Jul 2016 15:36:34 +0100 -Subject: [PATCH 09/45] VSOCK: Introduce vhost_vsock.ko +Subject: [PATCH 09/46] VSOCK: Introduce vhost_vsock.ko VM sockets vhost transport implementation. This driver runs on the host. Signed-off-by: Asias He Signed-off-by: Stefan Hajnoczi -(from RFC v6 <1469716595-13591-6-git-send-email-stefanha@redhat.com>) +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 433fc58e6bf2c8bd97e57153ed28e64fd78207b8) --- MAINTAINERS | 2 + drivers/vhost/vsock.c | 722 +++++++++++++++++++++++++++++++++++++++++++++ diff --git a/alpine/kernel/patches/0010-VSOCK-Add-Makefile-and-Kconfig.patch b/alpine/kernel/patches/0010-VSOCK-Add-Makefile-and-Kconfig.patch index d5f364e11..ecb5ba766 100644 --- a/alpine/kernel/patches/0010-VSOCK-Add-Makefile-and-Kconfig.patch +++ b/alpine/kernel/patches/0010-VSOCK-Add-Makefile-and-Kconfig.patch @@ -1,25 +1,26 @@ -From d8b94a29a8e7fee77250aaa1ab3b1f80ad6c8882 Mon Sep 17 00:00:00 2001 +From 5600cbdcb09f2a322c696e37570d031932a3baa4 Mon Sep 17 00:00:00 2001 From: Asias He Date: Thu, 28 Jul 2016 15:36:35 +0100 -Subject: [PATCH 10/45] VSOCK: Add Makefile and Kconfig +Subject: [PATCH 10/46] VSOCK: Add Makefile and Kconfig Enable virtio-vsock and vhost-vsock. Signed-off-by: Asias He Signed-off-by: Stefan Hajnoczi -(from RFC v6 <1469716595-13591-7-git-send-email-stefanha@redhat.com>) +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit 304ba62fd4e670c1a5784585da0fac9f7309ef6c) --- - drivers/vhost/Kconfig | 15 +++++++++++++++ + drivers/vhost/Kconfig | 14 ++++++++++++++ drivers/vhost/Makefile | 4 ++++ net/vmw_vsock/Kconfig | 20 ++++++++++++++++++++ net/vmw_vsock/Makefile | 6 ++++++ - 4 files changed, 45 insertions(+) + 4 files changed, 44 insertions(+) diff --git a/drivers/vhost/Kconfig b/drivers/vhost/Kconfig -index 533eaf0..d7aae9e 100644 +index 533eaf0..2b5f588 100644 --- a/drivers/vhost/Kconfig +++ b/drivers/vhost/Kconfig -@@ -21,6 +21,21 @@ config VHOST_SCSI +@@ -21,6 +21,20 @@ config VHOST_SCSI Say M here to enable the vhost_scsi TCM fabric module for use with virtio-scsi guests @@ -28,7 +29,6 @@ index 533eaf0..d7aae9e 100644 + depends on VSOCKETS && EVENTFD + select VIRTIO_VSOCKETS_COMMON + select VHOST -+ select VHOST_RING + default n + ---help--- + This kernel module can be loaded in the host kernel to provide AF_VSOCK diff --git a/alpine/kernel/patches/0011-VSOCK-Use-kvfree.patch b/alpine/kernel/patches/0011-VSOCK-Use-kvfree.patch new file mode 100644 index 000000000..8a13a250b --- /dev/null +++ b/alpine/kernel/patches/0011-VSOCK-Use-kvfree.patch @@ -0,0 +1,33 @@ +From d722f0d8acd78f91e079f2fe0b4e4a29b42435b7 Mon Sep 17 00:00:00 2001 +From: Wei Yongjun +Date: Tue, 2 Aug 2016 13:50:42 +0000 +Subject: [PATCH 11/46] VSOCK: Use kvfree() + +Use kvfree() instead of open-coding it. + +Signed-off-by: Wei Yongjun +Signed-off-by: Michael S. Tsirkin +(cherry picked from commit b226acab2f6aaa45c2af27279b63f622b23a44bd) +--- + drivers/vhost/vsock.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c +index 028ca16..0ddf3a2 100644 +--- a/drivers/vhost/vsock.c ++++ b/drivers/vhost/vsock.c +@@ -434,10 +434,7 @@ err: + + static void vhost_vsock_free(struct vhost_vsock *vsock) + { +- if (is_vmalloc_addr(vsock)) +- vfree(vsock); +- else +- kfree(vsock); ++ kvfree(vsock); + } + + static int vhost_vsock_dev_open(struct inode *inode, struct file *file) +-- +2.9.3 + diff --git a/alpine/kernel/patches/0011-vhost-vsock-fix-vhost-virtio_vsock_pkt-use-after-fre.patch b/alpine/kernel/patches/0012-vhost-vsock-fix-vhost-virtio_vsock_pkt-use-after-fre.patch similarity index 90% rename from alpine/kernel/patches/0011-vhost-vsock-fix-vhost-virtio_vsock_pkt-use-after-fre.patch rename to alpine/kernel/patches/0012-vhost-vsock-fix-vhost-virtio_vsock_pkt-use-after-fre.patch index 47a94944b..e54e75673 100644 --- a/alpine/kernel/patches/0011-vhost-vsock-fix-vhost-virtio_vsock_pkt-use-after-fre.patch +++ b/alpine/kernel/patches/0012-vhost-vsock-fix-vhost-virtio_vsock_pkt-use-after-fre.patch @@ -1,7 +1,7 @@ -From 4438a0966cd79254fcab325f7495130314f339cd Mon Sep 17 00:00:00 2001 +From f2e2e9e439f717e454a1cf0e71e098b19ff0005d Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Thu, 4 Aug 2016 14:52:53 +0100 -Subject: [PATCH 11/45] vhost/vsock: fix vhost virtio_vsock_pkt use-after-free +Subject: [PATCH 12/46] 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 @@ -19,7 +19,7 @@ Signed-off-by: Michael S. Tsirkin 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c -index 028ca16..9e10fb5 100644 +index 0ddf3a2..e3b30ea 100644 --- a/drivers/vhost/vsock.c +++ b/drivers/vhost/vsock.c @@ -307,6 +307,8 @@ static void vhost_vsock_handle_tx_kick(struct vhost_work *work) diff --git a/alpine/kernel/patches/0012-virtio-vsock-fix-include-guard-typo.patch b/alpine/kernel/patches/0013-virtio-vsock-fix-include-guard-typo.patch similarity index 85% rename from alpine/kernel/patches/0012-virtio-vsock-fix-include-guard-typo.patch rename to alpine/kernel/patches/0013-virtio-vsock-fix-include-guard-typo.patch index c57ebd3f2..1f858b3cc 100644 --- a/alpine/kernel/patches/0012-virtio-vsock-fix-include-guard-typo.patch +++ b/alpine/kernel/patches/0013-virtio-vsock-fix-include-guard-typo.patch @@ -1,7 +1,7 @@ -From f829b4b9d6ef1fa1d2859f5eceb9001c772541c3 Mon Sep 17 00:00:00 2001 +From 1a8274f5f22a79f10aae3b4cf35f9b8a65f7f423 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Fri, 5 Aug 2016 13:52:09 +0100 -Subject: [PATCH 12/45] virtio-vsock: fix include guard typo +Subject: [PATCH 13/46] virtio-vsock: fix include guard typo Signed-off-by: Stefan Hajnoczi Signed-off-by: Michael S. Tsirkin diff --git a/alpine/kernel/patches/0013-vhost-vsock-drop-space-available-check-for-TX-vq.patch b/alpine/kernel/patches/0014-vhost-vsock-drop-space-available-check-for-TX-vq.patch similarity index 93% rename from alpine/kernel/patches/0013-vhost-vsock-drop-space-available-check-for-TX-vq.patch rename to alpine/kernel/patches/0014-vhost-vsock-drop-space-available-check-for-TX-vq.patch index 5333634e1..c8c5b4b00 100644 --- a/alpine/kernel/patches/0013-vhost-vsock-drop-space-available-check-for-TX-vq.patch +++ b/alpine/kernel/patches/0014-vhost-vsock-drop-space-available-check-for-TX-vq.patch @@ -1,7 +1,7 @@ -From 1294bdb2bffedfa825a8572926ba90fa522746c2 Mon Sep 17 00:00:00 2001 +From 5377a4a3e61adb924efdb4ff47ca2213c63e5bc4 Mon Sep 17 00:00:00 2001 From: Gerard Garcia Date: Wed, 10 Aug 2016 17:24:34 +0200 -Subject: [PATCH 13/45] vhost/vsock: drop space available check for TX vq +Subject: [PATCH 14/46] vhost/vsock: drop space available check for TX vq Remove unnecessary use of enable/disable callback notifications and the incorrect more space available check. diff --git a/alpine/kernel/patches/0014-VSOCK-Only-allow-host-network-namespace-to-use-AF_VS.patch b/alpine/kernel/patches/0015-VSOCK-Only-allow-host-network-namespace-to-use-AF_VS.patch similarity index 86% rename from alpine/kernel/patches/0014-VSOCK-Only-allow-host-network-namespace-to-use-AF_VS.patch rename to alpine/kernel/patches/0015-VSOCK-Only-allow-host-network-namespace-to-use-AF_VS.patch index f8996b427..5beaa076d 100644 --- a/alpine/kernel/patches/0014-VSOCK-Only-allow-host-network-namespace-to-use-AF_VS.patch +++ b/alpine/kernel/patches/0015-VSOCK-Only-allow-host-network-namespace-to-use-AF_VS.patch @@ -1,7 +1,7 @@ -From a39cc29b3cb531e73d4f03e64e12fc0de62f8d03 Mon Sep 17 00:00:00 2001 +From fc2bc563ce2a5205b7504c39e8dbb0a5db2d63e9 Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Mon, 4 Apr 2016 14:50:10 +0100 -Subject: [PATCH 14/45] VSOCK: Only allow host network namespace to use +Subject: [PATCH 15/46] VSOCK: Only allow host network namespace to use AF_VSOCK. The VSOCK addressing schema does not really lend itself to simply creating an diff --git a/alpine/kernel/patches/0015-drivers-hv-Define-the-channel-type-for-Hyper-V-PCI-E.patch b/alpine/kernel/patches/0016-drivers-hv-Define-the-channel-type-for-Hyper-V-PCI-E.patch similarity index 92% rename from alpine/kernel/patches/0015-drivers-hv-Define-the-channel-type-for-Hyper-V-PCI-E.patch rename to alpine/kernel/patches/0016-drivers-hv-Define-the-channel-type-for-Hyper-V-PCI-E.patch index 38b4828fd..d249b435a 100644 --- a/alpine/kernel/patches/0015-drivers-hv-Define-the-channel-type-for-Hyper-V-PCI-E.patch +++ b/alpine/kernel/patches/0016-drivers-hv-Define-the-channel-type-for-Hyper-V-PCI-E.patch @@ -1,7 +1,7 @@ -From 7dc9f307981ebd10ed716a56a0795af7c3f8ae90 Mon Sep 17 00:00:00 2001 +From 7c37cbd1fd8bff6d8373cff4d7e1c33fcb2aa653 Mon Sep 17 00:00:00 2001 From: Jake Oshins Date: Mon, 14 Dec 2015 16:01:41 -0800 -Subject: [PATCH 15/45] drivers:hv: Define the channel type for Hyper-V PCI +Subject: [PATCH 16/46] 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. diff --git a/alpine/kernel/patches/0016-Drivers-hv-vmbus-Use-uuid_le-type-consistently.patch b/alpine/kernel/patches/0017-Drivers-hv-vmbus-Use-uuid_le-type-consistently.patch similarity index 98% rename from alpine/kernel/patches/0016-Drivers-hv-vmbus-Use-uuid_le-type-consistently.patch rename to alpine/kernel/patches/0017-Drivers-hv-vmbus-Use-uuid_le-type-consistently.patch index 6444d90be..67ed80b3c 100644 --- a/alpine/kernel/patches/0016-Drivers-hv-vmbus-Use-uuid_le-type-consistently.patch +++ b/alpine/kernel/patches/0017-Drivers-hv-vmbus-Use-uuid_le-type-consistently.patch @@ -1,7 +1,7 @@ -From 935d2a3a0446c6b2f256729bd91974e800bef25f Mon Sep 17 00:00:00 2001 +From b26f3791593f6645c4e0e11fd93db7e47390fab6 Mon Sep 17 00:00:00 2001 From: "K. Y. Srinivasan" Date: Mon, 14 Dec 2015 16:01:43 -0800 -Subject: [PATCH 16/45] Drivers: hv: vmbus: Use uuid_le type consistently +Subject: [PATCH 17/46] Drivers: hv: vmbus: Use uuid_le type consistently Consistently use uuid_le type in the Hyper-V driver code. diff --git a/alpine/kernel/patches/0017-Drivers-hv-vmbus-Use-uuid_le_cmp-for-comparing-GUIDs.patch b/alpine/kernel/patches/0018-Drivers-hv-vmbus-Use-uuid_le_cmp-for-comparing-GUIDs.patch similarity index 92% rename from alpine/kernel/patches/0017-Drivers-hv-vmbus-Use-uuid_le_cmp-for-comparing-GUIDs.patch rename to alpine/kernel/patches/0018-Drivers-hv-vmbus-Use-uuid_le_cmp-for-comparing-GUIDs.patch index dc86c33a9..3da4267d0 100644 --- a/alpine/kernel/patches/0017-Drivers-hv-vmbus-Use-uuid_le_cmp-for-comparing-GUIDs.patch +++ b/alpine/kernel/patches/0018-Drivers-hv-vmbus-Use-uuid_le_cmp-for-comparing-GUIDs.patch @@ -1,7 +1,7 @@ -From c5716756f56e498fc463458cfab19bb071f35469 Mon Sep 17 00:00:00 2001 +From 9ae0af317c2a085434b46197a663165895decaf6 Mon Sep 17 00:00:00 2001 From: "K. Y. Srinivasan" Date: Mon, 14 Dec 2015 16:01:44 -0800 -Subject: [PATCH 17/45] Drivers: hv: vmbus: Use uuid_le_cmp() for comparing +Subject: [PATCH 18/46] Drivers: hv: vmbus: Use uuid_le_cmp() for comparing GUIDs Use uuid_le_cmp() for comparing GUIDs. diff --git a/alpine/kernel/patches/0018-Drivers-hv-vmbus-serialize-process_chn_event-and-vmb.patch b/alpine/kernel/patches/0019-Drivers-hv-vmbus-serialize-process_chn_event-and-vmb.patch similarity index 95% rename from alpine/kernel/patches/0018-Drivers-hv-vmbus-serialize-process_chn_event-and-vmb.patch rename to alpine/kernel/patches/0019-Drivers-hv-vmbus-serialize-process_chn_event-and-vmb.patch index ec5878122..7b19e429d 100644 --- a/alpine/kernel/patches/0018-Drivers-hv-vmbus-serialize-process_chn_event-and-vmb.patch +++ b/alpine/kernel/patches/0019-Drivers-hv-vmbus-serialize-process_chn_event-and-vmb.patch @@ -1,7 +1,7 @@ -From fb0f783a35e7a0a9e8560fe5809b824bc1c8f8a8 Mon Sep 17 00:00:00 2001 +From 5c3a0d077f4c0ecd17117c04b0b6fef7e8acbdea Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Mon, 14 Dec 2015 16:01:47 -0800 -Subject: [PATCH 18/45] Drivers: hv: vmbus: serialize process_chn_event() and +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 diff --git a/alpine/kernel/patches/0019-Drivers-hv-vmbus-do-sanity-check-of-channel-state-in.patch b/alpine/kernel/patches/0020-Drivers-hv-vmbus-do-sanity-check-of-channel-state-in.patch similarity index 91% rename from alpine/kernel/patches/0019-Drivers-hv-vmbus-do-sanity-check-of-channel-state-in.patch rename to alpine/kernel/patches/0020-Drivers-hv-vmbus-do-sanity-check-of-channel-state-in.patch index 3f0d9dccd..4ed003690 100644 --- a/alpine/kernel/patches/0019-Drivers-hv-vmbus-do-sanity-check-of-channel-state-in.patch +++ b/alpine/kernel/patches/0020-Drivers-hv-vmbus-do-sanity-check-of-channel-state-in.patch @@ -1,7 +1,7 @@ -From 47057c1030e6a0e9ebd52e8268bb0fd7c6a3020c Mon Sep 17 00:00:00 2001 +From 8bba0d5b705be1f1d0bdfe7fa8465042fa936c3c Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Mon, 14 Dec 2015 16:01:48 -0800 -Subject: [PATCH 19/45] Drivers: hv: vmbus: do sanity check of channel state in +Subject: [PATCH 20/46] Drivers: hv: vmbus: do sanity check of channel state in vmbus_close_internal() This fixes an incorrect assumption of channel state in the function. diff --git a/alpine/kernel/patches/0020-Drivers-hv-vmbus-fix-rescind-offer-handling-for-devi.patch b/alpine/kernel/patches/0021-Drivers-hv-vmbus-fix-rescind-offer-handling-for-devi.patch similarity index 96% rename from alpine/kernel/patches/0020-Drivers-hv-vmbus-fix-rescind-offer-handling-for-devi.patch rename to alpine/kernel/patches/0021-Drivers-hv-vmbus-fix-rescind-offer-handling-for-devi.patch index 176acfd7c..a65a6e127 100644 --- a/alpine/kernel/patches/0020-Drivers-hv-vmbus-fix-rescind-offer-handling-for-devi.patch +++ b/alpine/kernel/patches/0021-Drivers-hv-vmbus-fix-rescind-offer-handling-for-devi.patch @@ -1,7 +1,7 @@ -From 67631d9308a4405dfb219c287b3ec1d152946584 Mon Sep 17 00:00:00 2001 +From 4185d167c4c6db493a3e96e59689e32562761563 Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Mon, 14 Dec 2015 16:01:49 -0800 -Subject: [PATCH 20/45] Drivers: hv: vmbus: fix rescind-offer handling for +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() -> diff --git a/alpine/kernel/patches/0021-Drivers-hv-vmbus-release-relid-on-error-in-vmbus_pro.patch b/alpine/kernel/patches/0022-Drivers-hv-vmbus-release-relid-on-error-in-vmbus_pro.patch similarity index 94% rename from alpine/kernel/patches/0021-Drivers-hv-vmbus-release-relid-on-error-in-vmbus_pro.patch rename to alpine/kernel/patches/0022-Drivers-hv-vmbus-release-relid-on-error-in-vmbus_pro.patch index 214abf51a..79deac9fe 100644 --- a/alpine/kernel/patches/0021-Drivers-hv-vmbus-release-relid-on-error-in-vmbus_pro.patch +++ b/alpine/kernel/patches/0022-Drivers-hv-vmbus-release-relid-on-error-in-vmbus_pro.patch @@ -1,7 +1,7 @@ -From 566fc2785f6bced720caae03060cadcb43faec0b Mon Sep 17 00:00:00 2001 +From 667defbc25ef5dcfa89b60c0bd534d5a27f8c116 Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Mon, 14 Dec 2015 16:01:50 -0800 -Subject: [PATCH 21/45] Drivers: hv: vmbus: release relid on error in +Subject: [PATCH 22/46] Drivers: hv: vmbus: release relid on error in vmbus_process_offer() We want to simplify vmbus_onoffer_rescind() by not invoking diff --git a/alpine/kernel/patches/0022-Drivers-hv-vmbus-channge-vmbus_connection.channel_lo.patch b/alpine/kernel/patches/0023-Drivers-hv-vmbus-channge-vmbus_connection.channel_lo.patch similarity index 97% rename from alpine/kernel/patches/0022-Drivers-hv-vmbus-channge-vmbus_connection.channel_lo.patch rename to alpine/kernel/patches/0023-Drivers-hv-vmbus-channge-vmbus_connection.channel_lo.patch index 0614636ff..a802c9959 100644 --- a/alpine/kernel/patches/0022-Drivers-hv-vmbus-channge-vmbus_connection.channel_lo.patch +++ b/alpine/kernel/patches/0023-Drivers-hv-vmbus-channge-vmbus_connection.channel_lo.patch @@ -1,7 +1,7 @@ -From abf8e10f0d5db38d8fbe6df7d1a680162f8d3ffa Mon Sep 17 00:00:00 2001 +From 235e2935d2d0700ac21db0cb0d6a64d6f9ff09fa Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Mon, 14 Dec 2015 16:01:51 -0800 -Subject: [PATCH 22/45] Drivers: hv: vmbus: channge +Subject: [PATCH 23/46] Drivers: hv: vmbus: channge vmbus_connection.channel_lock to mutex spinlock is unnecessary here. diff --git a/alpine/kernel/patches/0023-Drivers-hv-remove-code-duplication-between-vmbus_rec.patch b/alpine/kernel/patches/0024-Drivers-hv-remove-code-duplication-between-vmbus_rec.patch similarity index 96% rename from alpine/kernel/patches/0023-Drivers-hv-remove-code-duplication-between-vmbus_rec.patch rename to alpine/kernel/patches/0024-Drivers-hv-remove-code-duplication-between-vmbus_rec.patch index d84039d3e..501fc0393 100644 --- a/alpine/kernel/patches/0023-Drivers-hv-remove-code-duplication-between-vmbus_rec.patch +++ b/alpine/kernel/patches/0024-Drivers-hv-remove-code-duplication-between-vmbus_rec.patch @@ -1,7 +1,7 @@ -From 4f9c87c89627ceae3958099a853e65bac51d2491 Mon Sep 17 00:00:00 2001 +From d6cc8615d22926bb1e2d8ba85fd391df9f1cf089 Mon Sep 17 00:00:00 2001 From: Vitaly Kuznetsov Date: Mon, 14 Dec 2015 19:02:00 -0800 -Subject: [PATCH 23/45] Drivers: hv: remove code duplication between +Subject: [PATCH 24/46] Drivers: hv: remove code duplication between vmbus_recvpacket()/vmbus_recvpacket_raw() vmbus_recvpacket() and vmbus_recvpacket_raw() are almost identical but diff --git a/alpine/kernel/patches/0024-Drivers-hv-vmbus-fix-the-building-warning-with-hyper.patch b/alpine/kernel/patches/0025-Drivers-hv-vmbus-fix-the-building-warning-with-hyper.patch similarity index 94% rename from alpine/kernel/patches/0024-Drivers-hv-vmbus-fix-the-building-warning-with-hyper.patch rename to alpine/kernel/patches/0025-Drivers-hv-vmbus-fix-the-building-warning-with-hyper.patch index 33afec491..4cc594162 100644 --- a/alpine/kernel/patches/0024-Drivers-hv-vmbus-fix-the-building-warning-with-hyper.patch +++ b/alpine/kernel/patches/0025-Drivers-hv-vmbus-fix-the-building-warning-with-hyper.patch @@ -1,7 +1,7 @@ -From 172dc2c2f9a6536990de55c4dabfd71ba62833f8 Mon Sep 17 00:00:00 2001 +From 64c112c50e6a404431f5adc7685915cd9b5e8d42 Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Mon, 21 Dec 2015 12:21:22 -0800 -Subject: [PATCH 24/45] Drivers: hv: vmbus: fix the building warning with +Subject: [PATCH 25/46] Drivers: hv: vmbus: fix the building warning with hyperv-keyboard With the recent change af3ff643ea91ba64dd8d0b1cbed54d44512f96cd diff --git a/alpine/kernel/patches/0025-Drivers-hv-vmbus-Treat-Fibre-Channel-devices-as-perf.patch b/alpine/kernel/patches/0026-Drivers-hv-vmbus-Treat-Fibre-Channel-devices-as-perf.patch similarity index 89% rename from alpine/kernel/patches/0025-Drivers-hv-vmbus-Treat-Fibre-Channel-devices-as-perf.patch rename to alpine/kernel/patches/0026-Drivers-hv-vmbus-Treat-Fibre-Channel-devices-as-perf.patch index 2c49db039..53c5d83e7 100644 --- a/alpine/kernel/patches/0025-Drivers-hv-vmbus-Treat-Fibre-Channel-devices-as-perf.patch +++ b/alpine/kernel/patches/0026-Drivers-hv-vmbus-Treat-Fibre-Channel-devices-as-perf.patch @@ -1,7 +1,7 @@ -From de9460b1d17a51ab2b3a1811ae3992fec7e15ca2 Mon Sep 17 00:00:00 2001 +From 6ee99ea70b9975b03c436c05a55c154bed392a94 Mon Sep 17 00:00:00 2001 From: "K. Y. Srinivasan" Date: Tue, 15 Dec 2015 16:27:27 -0800 -Subject: [PATCH 25/45] Drivers: hv: vmbus: Treat Fibre Channel devices as +Subject: [PATCH 26/46] Drivers: hv: vmbus: Treat Fibre Channel devices as performance critical For performance critical devices, we distribute the incoming diff --git a/alpine/kernel/patches/0026-Drivers-hv-vmbus-Add-vendor-and-device-atttributes.patch b/alpine/kernel/patches/0027-Drivers-hv-vmbus-Add-vendor-and-device-atttributes.patch similarity index 98% rename from alpine/kernel/patches/0026-Drivers-hv-vmbus-Add-vendor-and-device-atttributes.patch rename to alpine/kernel/patches/0027-Drivers-hv-vmbus-Add-vendor-and-device-atttributes.patch index a47a99ae3..f8ff33ff7 100644 --- a/alpine/kernel/patches/0026-Drivers-hv-vmbus-Add-vendor-and-device-atttributes.patch +++ b/alpine/kernel/patches/0027-Drivers-hv-vmbus-Add-vendor-and-device-atttributes.patch @@ -1,7 +1,7 @@ -From 2b8233468015c17304c8205eb16f798a9334155e Mon Sep 17 00:00:00 2001 +From 5131dc31aecd376785b71bb3bb16bf70573682b3 Mon Sep 17 00:00:00 2001 From: "K. Y. Srinivasan" Date: Fri, 25 Dec 2015 20:00:30 -0800 -Subject: [PATCH 26/45] Drivers: hv: vmbus: Add vendor and device atttributes +Subject: [PATCH 27/46] 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 diff --git a/alpine/kernel/patches/0027-Drivers-hv-vmbus-avoid-infinite-loop-in-init_vp_inde.patch b/alpine/kernel/patches/0028-Drivers-hv-vmbus-avoid-infinite-loop-in-init_vp_inde.patch similarity index 93% rename from alpine/kernel/patches/0027-Drivers-hv-vmbus-avoid-infinite-loop-in-init_vp_inde.patch rename to alpine/kernel/patches/0028-Drivers-hv-vmbus-avoid-infinite-loop-in-init_vp_inde.patch index 4c714ab3c..9a707241c 100644 --- a/alpine/kernel/patches/0027-Drivers-hv-vmbus-avoid-infinite-loop-in-init_vp_inde.patch +++ b/alpine/kernel/patches/0028-Drivers-hv-vmbus-avoid-infinite-loop-in-init_vp_inde.patch @@ -1,7 +1,7 @@ -From 6a01db640f2950f33a51bc4549058d491c8d1314 Mon Sep 17 00:00:00 2001 +From 2dd3d37c7e1a4ce1adeb2a4af3df878907d44ebe Mon Sep 17 00:00:00 2001 From: Vitaly Kuznetsov Date: Wed, 27 Jan 2016 22:29:34 -0800 -Subject: [PATCH 27/45] Drivers: hv: vmbus: avoid infinite loop in +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 diff --git a/alpine/kernel/patches/0028-Drivers-hv-vmbus-avoid-scheduling-in-interrupt-conte.patch b/alpine/kernel/patches/0029-Drivers-hv-vmbus-avoid-scheduling-in-interrupt-conte.patch similarity index 95% rename from alpine/kernel/patches/0028-Drivers-hv-vmbus-avoid-scheduling-in-interrupt-conte.patch rename to alpine/kernel/patches/0029-Drivers-hv-vmbus-avoid-scheduling-in-interrupt-conte.patch index 733ef1c2d..2ae3337ec 100644 --- a/alpine/kernel/patches/0028-Drivers-hv-vmbus-avoid-scheduling-in-interrupt-conte.patch +++ b/alpine/kernel/patches/0029-Drivers-hv-vmbus-avoid-scheduling-in-interrupt-conte.patch @@ -1,7 +1,7 @@ -From 798509ab822925cc9bbe9b3f7d56ceb5869aa61c Mon Sep 17 00:00:00 2001 +From f478bef9bcd76c17c338c7c96422f22dad0d02e3 Mon Sep 17 00:00:00 2001 From: Vitaly Kuznetsov Date: Wed, 27 Jan 2016 22:29:35 -0800 -Subject: [PATCH 28/45] Drivers: hv: vmbus: avoid scheduling in interrupt +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 diff --git a/alpine/kernel/patches/0029-Drivers-hv-vmbus-add-a-helper-function-to-set-a-chan.patch b/alpine/kernel/patches/0030-Drivers-hv-vmbus-add-a-helper-function-to-set-a-chan.patch similarity index 88% rename from alpine/kernel/patches/0029-Drivers-hv-vmbus-add-a-helper-function-to-set-a-chan.patch rename to alpine/kernel/patches/0030-Drivers-hv-vmbus-add-a-helper-function-to-set-a-chan.patch index ea13b6183..2923f53f7 100644 --- a/alpine/kernel/patches/0029-Drivers-hv-vmbus-add-a-helper-function-to-set-a-chan.patch +++ b/alpine/kernel/patches/0030-Drivers-hv-vmbus-add-a-helper-function-to-set-a-chan.patch @@ -1,7 +1,7 @@ -From 1cea598f33747f6f221600e4135fa1c7eb0339b3 Mon Sep 17 00:00:00 2001 +From 1686f700609459bc6cf9d4597a8a39bf5f133409 Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Wed, 27 Jan 2016 22:29:37 -0800 -Subject: [PATCH 29/45] Drivers: hv: vmbus: add a helper function to set a +Subject: [PATCH 30/46] 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. diff --git a/alpine/kernel/patches/0030-Drivers-hv-vmbus-define-the-new-offer-type-for-Hyper.patch b/alpine/kernel/patches/0031-Drivers-hv-vmbus-define-the-new-offer-type-for-Hyper.patch similarity index 90% rename from alpine/kernel/patches/0030-Drivers-hv-vmbus-define-the-new-offer-type-for-Hyper.patch rename to alpine/kernel/patches/0031-Drivers-hv-vmbus-define-the-new-offer-type-for-Hyper.patch index ae5245f99..f0b00c742 100644 --- a/alpine/kernel/patches/0030-Drivers-hv-vmbus-define-the-new-offer-type-for-Hyper.patch +++ b/alpine/kernel/patches/0031-Drivers-hv-vmbus-define-the-new-offer-type-for-Hyper.patch @@ -1,7 +1,7 @@ -From 484e9fa916f11b145201a8473142977d260f924a Mon Sep 17 00:00:00 2001 +From f22a67d17cb1f357da61258ee181729bcf0af3b1 Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Wed, 27 Jan 2016 22:29:38 -0800 -Subject: [PATCH 30/45] Drivers: hv: vmbus: define the new offer type for +Subject: [PATCH 31/46] Drivers: hv: vmbus: define the new offer type for Hyper-V socket (hvsock) A helper function is also added. diff --git a/alpine/kernel/patches/0031-Drivers-hv-vmbus-vmbus_sendpacket_ctl-hvsock-avoid-u.patch b/alpine/kernel/patches/0032-Drivers-hv-vmbus-vmbus_sendpacket_ctl-hvsock-avoid-u.patch similarity index 92% rename from alpine/kernel/patches/0031-Drivers-hv-vmbus-vmbus_sendpacket_ctl-hvsock-avoid-u.patch rename to alpine/kernel/patches/0032-Drivers-hv-vmbus-vmbus_sendpacket_ctl-hvsock-avoid-u.patch index 80445fdba..cbb2c68ff 100644 --- a/alpine/kernel/patches/0031-Drivers-hv-vmbus-vmbus_sendpacket_ctl-hvsock-avoid-u.patch +++ b/alpine/kernel/patches/0032-Drivers-hv-vmbus-vmbus_sendpacket_ctl-hvsock-avoid-u.patch @@ -1,7 +1,7 @@ -From e076eff3df2c5592ca711a0f3b9665ee9a9981c7 Mon Sep 17 00:00:00 2001 +From 6d465cc94028d9c3b7e36996b09e7c9d95b269f3 Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Wed, 27 Jan 2016 22:29:39 -0800 -Subject: [PATCH 31/45] Drivers: hv: vmbus: vmbus_sendpacket_ctl: hvsock: avoid +Subject: [PATCH 32/46] Drivers: hv: vmbus: vmbus_sendpacket_ctl: hvsock: avoid unnecessary signaling When the hvsock channel's outbound ringbuffer is full (i.e., diff --git a/alpine/kernel/patches/0032-Drivers-hv-vmbus-define-a-new-VMBus-message-type-for.patch b/alpine/kernel/patches/0033-Drivers-hv-vmbus-define-a-new-VMBus-message-type-for.patch similarity index 96% rename from alpine/kernel/patches/0032-Drivers-hv-vmbus-define-a-new-VMBus-message-type-for.patch rename to alpine/kernel/patches/0033-Drivers-hv-vmbus-define-a-new-VMBus-message-type-for.patch index 3b7dde36d..b1f1f4562 100644 --- a/alpine/kernel/patches/0032-Drivers-hv-vmbus-define-a-new-VMBus-message-type-for.patch +++ b/alpine/kernel/patches/0033-Drivers-hv-vmbus-define-a-new-VMBus-message-type-for.patch @@ -1,7 +1,7 @@ -From ef0c006df50c1a0f91827f2f84bb0936952e1361 Mon Sep 17 00:00:00 2001 +From 7a337a1dcbdcb4c5ab22822f5cbf5b5fbe45551c Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Wed, 27 Jan 2016 22:29:40 -0800 -Subject: [PATCH 32/45] Drivers: hv: vmbus: define a new VMBus message type for +Subject: [PATCH 33/46] Drivers: hv: vmbus: define a new VMBus message type for hvsock A function to send the type of message is also added. diff --git a/alpine/kernel/patches/0033-Drivers-hv-vmbus-add-a-hvsock-flag-in-struct-hv_driv.patch b/alpine/kernel/patches/0034-Drivers-hv-vmbus-add-a-hvsock-flag-in-struct-hv_driv.patch similarity index 94% rename from alpine/kernel/patches/0033-Drivers-hv-vmbus-add-a-hvsock-flag-in-struct-hv_driv.patch rename to alpine/kernel/patches/0034-Drivers-hv-vmbus-add-a-hvsock-flag-in-struct-hv_driv.patch index 01b32ecf7..0642ce2a7 100644 --- a/alpine/kernel/patches/0033-Drivers-hv-vmbus-add-a-hvsock-flag-in-struct-hv_driv.patch +++ b/alpine/kernel/patches/0034-Drivers-hv-vmbus-add-a-hvsock-flag-in-struct-hv_driv.patch @@ -1,7 +1,7 @@ -From 8271769466aa4286ad5fe29e7bddc85701965314 Mon Sep 17 00:00:00 2001 +From 6a067b8e07452ec14629bea5bfe0951877c27451 Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Wed, 27 Jan 2016 22:29:41 -0800 -Subject: [PATCH 33/45] Drivers: hv: vmbus: add a hvsock flag in struct +Subject: [PATCH 34/46] Drivers: hv: vmbus: add a hvsock flag in struct hv_driver Only the coming hv_sock driver has a "true" value for this flag. diff --git a/alpine/kernel/patches/0034-Drivers-hv-vmbus-add-a-per-channel-rescind-callback.patch b/alpine/kernel/patches/0035-Drivers-hv-vmbus-add-a-per-channel-rescind-callback.patch similarity index 95% rename from alpine/kernel/patches/0034-Drivers-hv-vmbus-add-a-per-channel-rescind-callback.patch rename to alpine/kernel/patches/0035-Drivers-hv-vmbus-add-a-per-channel-rescind-callback.patch index f93e0ba78..7ba70125a 100644 --- a/alpine/kernel/patches/0034-Drivers-hv-vmbus-add-a-per-channel-rescind-callback.patch +++ b/alpine/kernel/patches/0035-Drivers-hv-vmbus-add-a-per-channel-rescind-callback.patch @@ -1,7 +1,7 @@ -From 810c87d25aae195016a8d3a90aa3cf7258e2c7cc Mon Sep 17 00:00:00 2001 +From e8bf64d13b450b3a224bd12779c38931e4a5691d Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Wed, 27 Jan 2016 22:29:42 -0800 -Subject: [PATCH 34/45] Drivers: hv: vmbus: add a per-channel rescind callback +Subject: [PATCH 35/46] Drivers: hv: vmbus: add a per-channel rescind callback This will be used by the coming hv_sock driver. diff --git a/alpine/kernel/patches/0035-Drivers-hv-vmbus-add-an-API-vmbus_hvsock_device_unre.patch b/alpine/kernel/patches/0036-Drivers-hv-vmbus-add-an-API-vmbus_hvsock_device_unre.patch similarity index 97% rename from alpine/kernel/patches/0035-Drivers-hv-vmbus-add-an-API-vmbus_hvsock_device_unre.patch rename to alpine/kernel/patches/0036-Drivers-hv-vmbus-add-an-API-vmbus_hvsock_device_unre.patch index 5813461bc..0dc43d99d 100644 --- a/alpine/kernel/patches/0035-Drivers-hv-vmbus-add-an-API-vmbus_hvsock_device_unre.patch +++ b/alpine/kernel/patches/0036-Drivers-hv-vmbus-add-an-API-vmbus_hvsock_device_unre.patch @@ -1,7 +1,7 @@ -From b20109841eac978453e3514b51fb93aa292ece09 Mon Sep 17 00:00:00 2001 +From b27d9192ab78946005526ee9574bc971b69205a2 Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Wed, 27 Jan 2016 22:29:43 -0800 -Subject: [PATCH 35/45] Drivers: hv: vmbus: add an API +Subject: [PATCH 36/46] Drivers: hv: vmbus: add an API vmbus_hvsock_device_unregister() The hvsock driver needs this API to release all the resources related diff --git a/alpine/kernel/patches/0036-Drivers-hv-vmbus-Give-control-over-how-the-ring-acce.patch b/alpine/kernel/patches/0037-Drivers-hv-vmbus-Give-control-over-how-the-ring-acce.patch similarity index 98% rename from alpine/kernel/patches/0036-Drivers-hv-vmbus-Give-control-over-how-the-ring-acce.patch rename to alpine/kernel/patches/0037-Drivers-hv-vmbus-Give-control-over-how-the-ring-acce.patch index c2e042f43..e36ff3198 100644 --- a/alpine/kernel/patches/0036-Drivers-hv-vmbus-Give-control-over-how-the-ring-acce.patch +++ b/alpine/kernel/patches/0037-Drivers-hv-vmbus-Give-control-over-how-the-ring-acce.patch @@ -1,7 +1,7 @@ -From b6ad0bd0eb97a4704e3e4f857282f41dfc8a08d8 Mon Sep 17 00:00:00 2001 +From d5f89659d3c0c5e05c3a76c3cc1b84aa505bc06e Mon Sep 17 00:00:00 2001 From: "K. Y. Srinivasan" Date: Wed, 27 Jan 2016 22:29:45 -0800 -Subject: [PATCH 36/45] Drivers: hv: vmbus: Give control over how the ring +Subject: [PATCH 37/46] Drivers: hv: vmbus: Give control over how the ring access is serialized On the channel send side, many of the VMBUS diff --git a/alpine/kernel/patches/0037-Drivers-hv-vmbus-avoid-wait_for_completion-on-crash.patch b/alpine/kernel/patches/0038-Drivers-hv-vmbus-avoid-wait_for_completion-on-crash.patch similarity index 96% rename from alpine/kernel/patches/0037-Drivers-hv-vmbus-avoid-wait_for_completion-on-crash.patch rename to alpine/kernel/patches/0038-Drivers-hv-vmbus-avoid-wait_for_completion-on-crash.patch index 12ca76c37..28ee6214d 100644 --- a/alpine/kernel/patches/0037-Drivers-hv-vmbus-avoid-wait_for_completion-on-crash.patch +++ b/alpine/kernel/patches/0038-Drivers-hv-vmbus-avoid-wait_for_completion-on-crash.patch @@ -1,7 +1,7 @@ -From f465de8d2676b9f125255e8f3eec5e631d07d60e Mon Sep 17 00:00:00 2001 +From f565fcc8decc0d57427b8506ea4b430de70440b1 Mon Sep 17 00:00:00 2001 From: Vitaly Kuznetsov Date: Fri, 26 Feb 2016 15:13:16 -0800 -Subject: [PATCH 37/45] Drivers: hv: vmbus: avoid wait_for_completion() on +Subject: [PATCH 38/46] Drivers: hv: vmbus: avoid wait_for_completion() on crash MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 diff --git a/alpine/kernel/patches/0038-Drivers-hv-vmbus-avoid-unneeded-compiler-optimizatio.patch b/alpine/kernel/patches/0039-Drivers-hv-vmbus-avoid-unneeded-compiler-optimizatio.patch similarity index 90% rename from alpine/kernel/patches/0038-Drivers-hv-vmbus-avoid-unneeded-compiler-optimizatio.patch rename to alpine/kernel/patches/0039-Drivers-hv-vmbus-avoid-unneeded-compiler-optimizatio.patch index 8c139239a..b3f28682f 100644 --- a/alpine/kernel/patches/0038-Drivers-hv-vmbus-avoid-unneeded-compiler-optimizatio.patch +++ b/alpine/kernel/patches/0039-Drivers-hv-vmbus-avoid-unneeded-compiler-optimizatio.patch @@ -1,7 +1,7 @@ -From d7b1742f30b68fae9c0bd627704106f7665c30ed Mon Sep 17 00:00:00 2001 +From 0b4365983ef397e8b43f9f77e591c4c9f83fca26 Mon Sep 17 00:00:00 2001 From: Vitaly Kuznetsov Date: Fri, 26 Feb 2016 15:13:18 -0800 -Subject: [PATCH 38/45] Drivers: hv: vmbus: avoid unneeded compiler +Subject: [PATCH 39/46] Drivers: hv: vmbus: avoid unneeded compiler optimizations in vmbus_wait_for_unload() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 diff --git a/alpine/kernel/patches/0039-kcm-Kernel-Connection-Multiplexor-module.patch b/alpine/kernel/patches/0040-kcm-Kernel-Connection-Multiplexor-module.patch similarity index 99% rename from alpine/kernel/patches/0039-kcm-Kernel-Connection-Multiplexor-module.patch rename to alpine/kernel/patches/0040-kcm-Kernel-Connection-Multiplexor-module.patch index da583f888..b27b58471 100644 --- a/alpine/kernel/patches/0039-kcm-Kernel-Connection-Multiplexor-module.patch +++ b/alpine/kernel/patches/0040-kcm-Kernel-Connection-Multiplexor-module.patch @@ -1,7 +1,7 @@ -From 556c8b33b1690096d9b216184b0c892e058e8d76 Mon Sep 17 00:00:00 2001 +From f3d84d9ee57ed72603ea8334302c2ed2971882b9 Mon Sep 17 00:00:00 2001 From: Tom Herbert Date: Mon, 7 Mar 2016 14:11:06 -0800 -Subject: [PATCH 39/45] kcm: Kernel Connection Multiplexor module +Subject: [PATCH 40/46] kcm: Kernel Connection Multiplexor module This module implements the Kernel Connection Multiplexor. diff --git a/alpine/kernel/patches/0040-net-add-the-AF_KCM-entries-to-family-name-tables.patch b/alpine/kernel/patches/0041-net-add-the-AF_KCM-entries-to-family-name-tables.patch similarity index 94% rename from alpine/kernel/patches/0040-net-add-the-AF_KCM-entries-to-family-name-tables.patch rename to alpine/kernel/patches/0041-net-add-the-AF_KCM-entries-to-family-name-tables.patch index c8d73b490..a06100c1d 100644 --- a/alpine/kernel/patches/0040-net-add-the-AF_KCM-entries-to-family-name-tables.patch +++ b/alpine/kernel/patches/0041-net-add-the-AF_KCM-entries-to-family-name-tables.patch @@ -1,7 +1,7 @@ -From d3f41a6e22aecae1e0502dadc7ff1847f9b64af0 Mon Sep 17 00:00:00 2001 +From d436f250cb94cdc0f8ceb18c73e641f8285f2c87 Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Mon, 21 Mar 2016 02:51:09 -0700 -Subject: [PATCH 40/45] net: add the AF_KCM entries to family name tables +Subject: [PATCH 41/46] 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). diff --git a/alpine/kernel/patches/0041-net-Add-Qualcomm-IPC-router.patch b/alpine/kernel/patches/0042-net-Add-Qualcomm-IPC-router.patch similarity index 99% rename from alpine/kernel/patches/0041-net-Add-Qualcomm-IPC-router.patch rename to alpine/kernel/patches/0042-net-Add-Qualcomm-IPC-router.patch index 334732582..7f528f523 100644 --- a/alpine/kernel/patches/0041-net-Add-Qualcomm-IPC-router.patch +++ b/alpine/kernel/patches/0042-net-Add-Qualcomm-IPC-router.patch @@ -1,7 +1,7 @@ -From 8d3d67fb44d8d9b44b9923d1cbddf9285b9b68ae Mon Sep 17 00:00:00 2001 +From 550437ba0f633b470b719d981110cbd38a4a83c4 Mon Sep 17 00:00:00 2001 From: Courtney Cavin Date: Wed, 27 Apr 2016 12:13:03 -0700 -Subject: [PATCH 41/45] net: Add Qualcomm IPC router +Subject: [PATCH 42/46] net: Add Qualcomm IPC router Add an implementation of Qualcomm's IPC router protocol, used to communicate with service providing remote processors. diff --git a/alpine/kernel/patches/0042-hv_sock-introduce-Hyper-V-Sockets.patch b/alpine/kernel/patches/0043-hv_sock-introduce-Hyper-V-Sockets.patch similarity index 99% rename from alpine/kernel/patches/0042-hv_sock-introduce-Hyper-V-Sockets.patch rename to alpine/kernel/patches/0043-hv_sock-introduce-Hyper-V-Sockets.patch index 064693e16..9cb20ceba 100644 --- a/alpine/kernel/patches/0042-hv_sock-introduce-Hyper-V-Sockets.patch +++ b/alpine/kernel/patches/0043-hv_sock-introduce-Hyper-V-Sockets.patch @@ -1,7 +1,7 @@ -From 9d627b917f9bf189f938e30fe4c6b11c241e204e Mon Sep 17 00:00:00 2001 +From 87e2463282f0dc46f866cce2efd5cb36eb964bdb Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Sun, 15 May 2016 09:53:11 -0700 -Subject: [PATCH 42/45] hv_sock: introduce Hyper-V Sockets +Subject: [PATCH 43/46] 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 diff --git a/alpine/kernel/patches/0043-net-add-the-AF_HYPERV-entries-to-family-name-tables.patch b/alpine/kernel/patches/0044-net-add-the-AF_HYPERV-entries-to-family-name-tables.patch similarity index 93% rename from alpine/kernel/patches/0043-net-add-the-AF_HYPERV-entries-to-family-name-tables.patch rename to alpine/kernel/patches/0044-net-add-the-AF_HYPERV-entries-to-family-name-tables.patch index eb0cc347b..f43f27997 100644 --- a/alpine/kernel/patches/0043-net-add-the-AF_HYPERV-entries-to-family-name-tables.patch +++ b/alpine/kernel/patches/0044-net-add-the-AF_HYPERV-entries-to-family-name-tables.patch @@ -1,7 +1,7 @@ -From 0436560566688b27d0a1f505481b2bb3b738888e Mon Sep 17 00:00:00 2001 +From d3aac2768b413cea5e281290dfe236d7531638ad Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Mon, 21 Mar 2016 02:53:08 -0700 -Subject: [PATCH 43/45] net: add the AF_HYPERV entries to family name tables +Subject: [PATCH 44/46] net: add the AF_HYPERV entries to family name tables This is for the hv_sock driver, which introduces AF_HYPERV(42). diff --git a/alpine/kernel/patches/0044-Drivers-hv-vmbus-fix-the-race-when-querying-updating.patch b/alpine/kernel/patches/0045-Drivers-hv-vmbus-fix-the-race-when-querying-updating.patch similarity index 96% rename from alpine/kernel/patches/0044-Drivers-hv-vmbus-fix-the-race-when-querying-updating.patch rename to alpine/kernel/patches/0045-Drivers-hv-vmbus-fix-the-race-when-querying-updating.patch index 9ba2cfa9a..28566a1c6 100644 --- a/alpine/kernel/patches/0044-Drivers-hv-vmbus-fix-the-race-when-querying-updating.patch +++ b/alpine/kernel/patches/0045-Drivers-hv-vmbus-fix-the-race-when-querying-updating.patch @@ -1,7 +1,7 @@ -From 2fdbef30e06e66b0de2ddc9a424db56501cf546b Mon Sep 17 00:00:00 2001 +From 56e767526878b2fc79b0dfaa2860ed2ae836a52e Mon Sep 17 00:00:00 2001 From: Dexuan Cui Date: Sat, 21 May 2016 16:55:50 +0800 -Subject: [PATCH 44/45] Drivers: hv: vmbus: fix the race when querying & +Subject: [PATCH 45/46] 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 diff --git a/alpine/kernel/patches/0045-vmbus-Don-t-spam-the-logs-with-unknown-GUIDs.patch b/alpine/kernel/patches/0046-vmbus-Don-t-spam-the-logs-with-unknown-GUIDs.patch similarity index 86% rename from alpine/kernel/patches/0045-vmbus-Don-t-spam-the-logs-with-unknown-GUIDs.patch rename to alpine/kernel/patches/0046-vmbus-Don-t-spam-the-logs-with-unknown-GUIDs.patch index 72915ff0b..fa6b53ea5 100644 --- a/alpine/kernel/patches/0045-vmbus-Don-t-spam-the-logs-with-unknown-GUIDs.patch +++ b/alpine/kernel/patches/0046-vmbus-Don-t-spam-the-logs-with-unknown-GUIDs.patch @@ -1,7 +1,7 @@ -From 24c21ccb6524b1ecff1ff47ef8b39375b763d79f Mon Sep 17 00:00:00 2001 +From 44694d7a14f502c9222ea100ab62fa7030acf548 Mon Sep 17 00:00:00 2001 From: Rolf Neugebauer Date: Mon, 23 May 2016 18:55:45 +0100 -Subject: [PATCH 45/45] vmbus: Don't spam the logs with unknown GUIDs +Subject: [PATCH 46/46] 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