svn commit: r302543 - head/sys/dev/hyperv/vmbus
Sepherosa Ziehau
sephe at FreeBSD.org
Mon Jul 11 06:11:26 UTC 2016
Author: sephe
Date: Mon Jul 11 06:11:24 2016
New Revision: 302543
URL: https://svnweb.freebsd.org/changeset/base/302543
Log:
hyperv/vmbus: Use post message Hypercall APIs for channel request
MFC after: 1 week
Sponsored by: Microsoft OSTC
Differential Revision: https://reviews.freebsd.org/D6831
Modified:
head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c
head/sys/dev/hyperv/vmbus/hv_vmbus_priv.h
head/sys/dev/hyperv/vmbus/vmbus.c
head/sys/dev/hyperv/vmbus/vmbus_reg.h
Modified: head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c
==============================================================================
--- head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c Mon Jul 11 05:44:58 2016 (r302542)
+++ head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c Mon Jul 11 06:11:24 2016 (r302543)
@@ -675,36 +675,6 @@ vmbus_channel_on_version_response(struct
}
/**
- * @brief Send a request to get all our pending offers.
- */
-int
-hv_vmbus_request_channel_offers(void)
-{
- int ret;
- hv_vmbus_channel_msg_header* msg;
- hv_vmbus_channel_msg_info* msg_info;
-
- msg_info = (hv_vmbus_channel_msg_info *)
- malloc(sizeof(hv_vmbus_channel_msg_info)
- + sizeof(hv_vmbus_channel_msg_header), M_DEVBUF, M_NOWAIT);
-
- if (msg_info == NULL) {
- if(bootverbose)
- printf("Error VMBUS: malloc failed for Request Offers\n");
- return (ENOMEM);
- }
-
- msg = (hv_vmbus_channel_msg_header*) msg_info->msg;
- msg->message_type = HV_CHANNEL_MESSAGE_REQUEST_OFFERS;
-
- ret = hv_vmbus_post_message(msg, sizeof(hv_vmbus_channel_msg_header));
-
- free(msg_info, M_DEVBUF);
-
- return (ret);
-}
-
-/**
* @brief Release channels that are unattached/unconnected (i.e., no drivers associated)
*/
void
Modified: head/sys/dev/hyperv/vmbus/hv_vmbus_priv.h
==============================================================================
--- head/sys/dev/hyperv/vmbus/hv_vmbus_priv.h Mon Jul 11 05:44:58 2016 (r302542)
+++ head/sys/dev/hyperv/vmbus/hv_vmbus_priv.h Mon Jul 11 06:11:24 2016 (r302543)
@@ -397,7 +397,6 @@ uint32_t hv_ring_buffer_read_end(
hv_vmbus_channel* hv_vmbus_allocate_channel(void);
void hv_vmbus_free_vmbus_channel(hv_vmbus_channel *channel);
-int hv_vmbus_request_channel_offers(void);
void hv_vmbus_release_unattached_channels(void);
uint16_t hv_vmbus_post_msg_via_msg_ipc(
Modified: head/sys/dev/hyperv/vmbus/vmbus.c
==============================================================================
--- head/sys/dev/hyperv/vmbus/vmbus.c Mon Jul 11 05:44:58 2016 (r302542)
+++ head/sys/dev/hyperv/vmbus/vmbus.c Mon Jul 11 06:11:24 2016 (r302543)
@@ -98,6 +98,7 @@ struct vmbus_msghc_ctx {
static int vmbus_init(struct vmbus_softc *);
static int vmbus_init_contact(struct vmbus_softc *,
uint32_t);
+static int vmbus_req_channels(struct vmbus_softc *sc);
static struct vmbus_msghc_ctx *vmbus_msghc_ctx_create(bus_dma_tag_t);
static void vmbus_msghc_ctx_destroy(
@@ -417,6 +418,26 @@ vmbus_init(struct vmbus_softc *sc)
return ENXIO;
}
+static int
+vmbus_req_channels(struct vmbus_softc *sc)
+{
+ struct vmbus_chanmsg_channel_req *req;
+ struct vmbus_msghc *mh;
+ int error;
+
+ mh = vmbus_msghc_get(sc, sizeof(*req));
+ if (mh == NULL)
+ return ENXIO;
+
+ req = vmbus_msghc_dataptr(mh);
+ req->chm_hdr.chm_type = VMBUS_CHANMSG_TYPE_CHANNEL_REQ;
+
+ error = vmbus_msghc_exec_noresult(mh);
+ vmbus_msghc_put(sc, mh);
+
+ return error;
+}
+
static void
vmbus_msg_task(void *xsc, int pending __unused)
{
@@ -1012,7 +1033,9 @@ vmbus_bus_init(void)
else
sc->vmbus_event_proc = vmbus_event_proc;
- hv_vmbus_request_channel_offers();
+ ret = vmbus_req_channels(sc);
+ if (ret != 0)
+ goto cleanup;
vmbus_scan();
bus_generic_attach(sc->vmbus_dev);
Modified: head/sys/dev/hyperv/vmbus/vmbus_reg.h
==============================================================================
--- head/sys/dev/hyperv/vmbus/vmbus_reg.h Mon Jul 11 05:44:58 2016 (r302542)
+++ head/sys/dev/hyperv/vmbus/vmbus_reg.h Mon Jul 11 06:11:24 2016 (r302543)
@@ -83,6 +83,7 @@ CTASSERT(sizeof(struct vmbus_evtflags) =
* - Embedded in hypercall_postmsg_in.hc_data, e.g. request.
*/
+#define VMBUS_CHANMSG_TYPE_CHANNEL_REQ 3 /* REQ */
#define VMBUS_CHANMSG_TYPE_INIT_CONTACT 14 /* REQ */
#define VMBUS_CHANMSG_TYPE_VERSION_RESP 15 /* RESP */
@@ -107,4 +108,9 @@ struct vmbus_chanmsg_version_resp {
uint8_t chm_supp;
} __packed;
+/* VMBUS_CHANMSG_TYPE_CHANNEL_REQ */
+struct vmbus_chanmsg_channel_req {
+ struct vmbus_chanmsg_hdr chm_hdr;
+} __packed;
+
#endif /* !_VMBUS_REG_H_ */
More information about the svn-src-head
mailing list