summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Hajnoczi <stefanha@redhat.com>2016-07-28 15:36:30 +0100
committerAlistair Strachan <astrachan@google.com>2019-05-14 17:56:56 -0700
commitbcb6d9e1950c8e2d301e0713bf25e29bcc70bf69 (patch)
treebc80d5b00936d0722b173a0df41e4718368d202b
parentd279af442001d03b41af233e97549f4b23d403a0 (diff)
UPSTREAM: 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 pointers and they can be added after struct vsock_transport. Allow the transport to fetch vsock_transport. It can downcast it to access transport-specific function pointers. The virtio transport will use this. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> (cherry picked from commit 0b01aeb3d2fbf16787f0c9629f4ca52ae792f732) Bug: 121166534 Test: Ran cuttlefish with android-4.4 + VSOCKETS, VMWARE_VMCI_VSOCKETS Signed-off-by: Cody Schuffelen <schuffelen@google.com> Change-Id: I442706ae71dc14c70fc4033d9719134c2d034509
-rw-r--r--include/net/af_vsock.h3
-rw-r--r--net/vmw_vsock/af_vsock.c9
2 files changed, 12 insertions, 0 deletions
diff --git a/include/net/af_vsock.h b/include/net/af_vsock.h
index f7a35fcaaaf6..2f987679239b 100644
--- a/include/net/af_vsock.h
+++ b/include/net/af_vsock.h
@@ -165,6 +165,9 @@ static inline int vsock_core_init(const struct vsock_transport *t)
}
void vsock_core_exit(void);
+/* The transport may downcast this to access transport-specific functions */
+const struct vsock_transport *vsock_core_get_transport(void);
+
/**** UTILS ****/
void vsock_release_pending(struct sock *pending);
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
index 611e3b13675e..fa5bed6dcd30 100644
--- a/net/vmw_vsock/af_vsock.c
+++ b/net/vmw_vsock/af_vsock.c
@@ -1991,6 +1991,15 @@ void vsock_core_exit(void)
}
EXPORT_SYMBOL_GPL(vsock_core_exit);
+const struct vsock_transport *vsock_core_get_transport(void)
+{
+ /* vsock_register_mutex not taken since only the transport uses this
+ * function and only while registered.
+ */
+ return transport;
+}
+EXPORT_SYMBOL_GPL(vsock_core_get_transport);
+
MODULE_AUTHOR("VMware, Inc.");
MODULE_DESCRIPTION("VMware Virtual Socket Family");
MODULE_VERSION("1.0.1.0-k");