From: Dexuan Cui <decui@microsoft.com>
To: gregkh@linuxfoundation.org, davem@davemloft.net,
stephen@networkplumber.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org,
driverdev-devel@linuxdriverproject.org, olaf@aepfle.de,
apw@canonical.com, jasowang@redhat.com, kys@microsoft.com
Cc: pebolle@tiscali.nl, stefanha@redhat.com, vkuznets@redhat.com,
dan.carpenter@oracle.com
Subject: [PATCH V5 7/9] Drivers: hv: vmbus: add a mechanism to pass hvsock events to the hvsock driver
Date: Thu, 24 Dec 2015 06:14:51 -0800 [thread overview]
Message-ID: <1450966491-13276-1-git-send-email-decui@microsoft.com> (raw)
For now only 1 event is defined: HVSOCK_RESCIND_CHANNEL.
We'll have more events in the future.
Signed-off-by: Dexuan Cui <decui@microsoft.com>
---
drivers/hv/channel_mgmt.c | 18 ++++++++++++++++++
include/linux/hyperv.h | 17 +++++++++++++++++
2 files changed, 35 insertions(+)
diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
index 4611b50..87fc7d2 100644
--- a/drivers/hv/channel_mgmt.c
+++ b/drivers/hv/channel_mgmt.c
@@ -608,6 +608,16 @@ static void vmbus_onoffer_rescind(struct vmbus_channel_message_header *hdr)
spin_unlock_irqrestore(&channel->lock, flags);
if (channel->device_obj) {
+ if (is_hvsock_channel(channel) &&
+ channel->hvsock_event_callback) {
+ channel->hvsock_event_callback(channel,
+ HVSOCK_RESCIND_CHANNEL);
+ /*
+ * We can't invoke vmbus_device_unregister()
+ * until the socket fd is closed.
+ */
+ return;
+ }
/*
* We will have to unregister this device from the
* driver core.
@@ -977,3 +987,11 @@ bool vmbus_are_subchannels_present(struct vmbus_channel *primary)
return ret;
}
EXPORT_SYMBOL_GPL(vmbus_are_subchannels_present);
+
+void vmbus_set_hvsock_event_callback(struct vmbus_channel *channel,
+ void (*hvsock_event_callback)(struct vmbus_channel *,
+ enum hvsock_event))
+{
+ channel->hvsock_event_callback = hvsock_event_callback;
+}
+EXPORT_SYMBOL_GPL(vmbus_set_hvsock_event_callback);
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
index b4cc44c..7e507bb 100644
--- a/include/linux/hyperv.h
+++ b/include/linux/hyperv.h
@@ -645,6 +645,12 @@ enum hv_signal_policy {
HV_SIGNAL_POLICY_EXPLICIT,
};
+/* hvsock related definitions */
+enum hvsock_event {
+ /* The host application is close()-ing the connection */
+ HVSOCK_RESCIND_CHANNEL,
+};
+
struct vmbus_channel {
/* Unique channel id */
int id;
@@ -740,6 +746,13 @@ struct vmbus_channel {
void (*sc_creation_callback)(struct vmbus_channel *new_sc);
/*
+ * hvsock event callback.
+ * For now only 1 event is defined: HVSOCK_RESCIND_CHANNEL.
+ */
+ void (*hvsock_event_callback)(struct vmbus_channel *channel,
+ enum hvsock_event event);
+
+ /*
* The spinlock to protect the structure. It is being used to protect
* test-and-set access to various attributes of the structure as well
* as all sc_list operations.
@@ -825,6 +838,10 @@ int vmbus_request_offers(void);
void vmbus_set_sc_create_callback(struct vmbus_channel *primary_channel,
void (*sc_cr_cb)(struct vmbus_channel *new_sc));
+void vmbus_set_hvsock_event_callback(struct vmbus_channel *channel,
+ void (*hvsock_event_callback)(struct vmbus_channel *,
+ enum hvsock_event));
+
/*
* Retrieve the (sub) channel on which to send an outgoing request.
* When a primary channel has multiple sub-channels, we choose a
--
2.1.4
WARNING: multiple messages have this Message-ID (diff)
From: Dexuan Cui <decui@microsoft.com>
To: gregkh@linuxfoundation.org, davem@davemloft.net,
stephen@networkplumber.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org,
driverdev-devel@linuxdriverproject.org, olaf@aepfle.de,
apw@canonical.com, jasowang@redhat.com, kys@microsoft.com
Cc: pebolle@tiscali.nl, dan.carpenter@oracle.com, stefanha@redhat.com
Subject: [PATCH V5 7/9] Drivers: hv: vmbus: add a mechanism to pass hvsock events to the hvsock driver
Date: Thu, 24 Dec 2015 06:14:51 -0800 [thread overview]
Message-ID: <1450966491-13276-1-git-send-email-decui@microsoft.com> (raw)
For now only 1 event is defined: HVSOCK_RESCIND_CHANNEL.
We'll have more events in the future.
Signed-off-by: Dexuan Cui <decui@microsoft.com>
---
drivers/hv/channel_mgmt.c | 18 ++++++++++++++++++
include/linux/hyperv.h | 17 +++++++++++++++++
2 files changed, 35 insertions(+)
diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
index 4611b50..87fc7d2 100644
--- a/drivers/hv/channel_mgmt.c
+++ b/drivers/hv/channel_mgmt.c
@@ -608,6 +608,16 @@ static void vmbus_onoffer_rescind(struct vmbus_channel_message_header *hdr)
spin_unlock_irqrestore(&channel->lock, flags);
if (channel->device_obj) {
+ if (is_hvsock_channel(channel) &&
+ channel->hvsock_event_callback) {
+ channel->hvsock_event_callback(channel,
+ HVSOCK_RESCIND_CHANNEL);
+ /*
+ * We can't invoke vmbus_device_unregister()
+ * until the socket fd is closed.
+ */
+ return;
+ }
/*
* We will have to unregister this device from the
* driver core.
@@ -977,3 +987,11 @@ bool vmbus_are_subchannels_present(struct vmbus_channel *primary)
return ret;
}
EXPORT_SYMBOL_GPL(vmbus_are_subchannels_present);
+
+void vmbus_set_hvsock_event_callback(struct vmbus_channel *channel,
+ void (*hvsock_event_callback)(struct vmbus_channel *,
+ enum hvsock_event))
+{
+ channel->hvsock_event_callback = hvsock_event_callback;
+}
+EXPORT_SYMBOL_GPL(vmbus_set_hvsock_event_callback);
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
index b4cc44c..7e507bb 100644
--- a/include/linux/hyperv.h
+++ b/include/linux/hyperv.h
@@ -645,6 +645,12 @@ enum hv_signal_policy {
HV_SIGNAL_POLICY_EXPLICIT,
};
+/* hvsock related definitions */
+enum hvsock_event {
+ /* The host application is close()-ing the connection */
+ HVSOCK_RESCIND_CHANNEL,
+};
+
struct vmbus_channel {
/* Unique channel id */
int id;
@@ -740,6 +746,13 @@ struct vmbus_channel {
void (*sc_creation_callback)(struct vmbus_channel *new_sc);
/*
+ * hvsock event callback.
+ * For now only 1 event is defined: HVSOCK_RESCIND_CHANNEL.
+ */
+ void (*hvsock_event_callback)(struct vmbus_channel *channel,
+ enum hvsock_event event);
+
+ /*
* The spinlock to protect the structure. It is being used to protect
* test-and-set access to various attributes of the structure as well
* as all sc_list operations.
@@ -825,6 +838,10 @@ int vmbus_request_offers(void);
void vmbus_set_sc_create_callback(struct vmbus_channel *primary_channel,
void (*sc_cr_cb)(struct vmbus_channel *new_sc));
+void vmbus_set_hvsock_event_callback(struct vmbus_channel *channel,
+ void (*hvsock_event_callback)(struct vmbus_channel *,
+ enum hvsock_event));
+
/*
* Retrieve the (sub) channel on which to send an outgoing request.
* When a primary channel has multiple sub-channels, we choose a
--
2.1.4
next reply other threads:[~2015-12-24 12:40 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-24 14:14 Dexuan Cui [this message]
2015-12-24 14:14 ` [PATCH V5 7/9] Drivers: hv: vmbus: add a mechanism to pass hvsock events to the hvsock driver Dexuan Cui
2016-01-05 12:47 ` Vitaly Kuznetsov
2016-01-05 16:04 ` Dexuan Cui
2016-01-05 16:04 ` Dexuan Cui
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1450966491-13276-1-git-send-email-decui@microsoft.com \
--to=decui@microsoft.com \
--cc=apw@canonical.com \
--cc=dan.carpenter@oracle.com \
--cc=davem@davemloft.net \
--cc=driverdev-devel@linuxdriverproject.org \
--cc=gregkh@linuxfoundation.org \
--cc=jasowang@redhat.com \
--cc=kys@microsoft.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=olaf@aepfle.de \
--cc=pebolle@tiscali.nl \
--cc=stefanha@redhat.com \
--cc=stephen@networkplumber.org \
--cc=vkuznets@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.