svn commit: r302803 - head/sys/dev/hyperv/vmbus
Sepherosa Ziehau
sephe at FreeBSD.org
Thu Jul 14 05:33:34 UTC 2016
Author: sephe
Date: Thu Jul 14 05:33:33 2016
New Revision: 302803
URL: https://svnweb.freebsd.org/changeset/base/302803
Log:
hyperv/vmbus: Move channel offer message definition to vmbus_reg.h
- Avoid bit fields.
- Avoid unnecessary indirection.
MFC after: 1 week
Sponsored by: Microsoft OSTC
Differential Revision: https://reviews.freebsd.org/D7093
Modified:
head/sys/dev/hyperv/vmbus/hv_channel_mgmt.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 Thu Jul 14 05:25:31 2016 (r302802)
+++ head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c Thu Jul 14 05:33:33 2016 (r302803)
@@ -42,7 +42,7 @@ typedef void (*vmbus_chanmsg_proc_t)
static struct hv_vmbus_channel *hv_vmbus_allocate_channel(struct vmbus_softc *);
static void vmbus_channel_on_offer_internal(struct vmbus_softc *,
- const hv_vmbus_channel_offer_channel *offer);
+ const struct vmbus_chanmsg_choffer *);
static void vmbus_chan_detach_task(void *, int);
static void vmbus_channel_on_offer(struct vmbus_softc *,
@@ -267,18 +267,16 @@ vmbus_channel_select_defcpu(struct hv_vm
static void
vmbus_channel_on_offer(struct vmbus_softc *sc, const struct vmbus_message *msg)
{
- const hv_vmbus_channel_offer_channel *offer;
-
/* New channel is offered by vmbus */
vmbus_scan_newchan(sc);
- offer = (const hv_vmbus_channel_offer_channel *)msg->msg_data;
- vmbus_channel_on_offer_internal(sc, offer);
+ vmbus_channel_on_offer_internal(sc,
+ (const struct vmbus_chanmsg_choffer *)msg->msg_data);
}
static void
vmbus_channel_on_offer_internal(struct vmbus_softc *sc,
- const hv_vmbus_channel_offer_channel *offer)
+ const struct vmbus_chanmsg_choffer *offer)
{
hv_vmbus_channel* new_channel;
@@ -286,14 +284,14 @@ vmbus_channel_on_offer_internal(struct v
* Allocate the channel object and save this offer
*/
new_channel = hv_vmbus_allocate_channel(sc);
- new_channel->ch_id = offer->child_rel_id;
- new_channel->ch_subidx = offer->offer.sub_channel_index;
- new_channel->ch_guid_type = offer->offer.interface_type;
- new_channel->ch_guid_inst = offer->offer.interface_instance;
+ new_channel->ch_id = offer->chm_chanid;
+ new_channel->ch_subidx = offer->chm_subidx;
+ new_channel->ch_guid_type = offer->chm_chtype;
+ new_channel->ch_guid_inst = offer->chm_chinst;
/* Batch reading is on by default */
new_channel->ch_flags |= VMBUS_CHAN_FLAG_BATCHREAD;
- if (offer->monitor_allocated)
+ if (offer->chm_flags1 & VMBUS_CHOFFER_FLAG1_HASMNF)
new_channel->ch_flags |= VMBUS_CHAN_FLAG_HASMNF;
new_channel->ch_monprm = hyperv_dmamem_alloc(
@@ -309,15 +307,15 @@ vmbus_channel_on_offer_internal(struct v
}
new_channel->ch_monprm->mp_connid = VMBUS_CONNID_EVENT;
if (sc->vmbus_version != VMBUS_VERSION_WS2008)
- new_channel->ch_monprm->mp_connid = offer->connection_id;
+ new_channel->ch_monprm->mp_connid = offer->chm_connid;
if (new_channel->ch_flags & VMBUS_CHAN_FLAG_HASMNF) {
new_channel->ch_montrig_idx =
- offer->monitor_id / VMBUS_MONTRIG_LEN;
+ offer->chm_montrig / VMBUS_MONTRIG_LEN;
if (new_channel->ch_montrig_idx >= VMBUS_MONTRIGS_MAX)
- panic("invalid monitor id %u", offer->monitor_id);
+ panic("invalid monitor trigger %u", offer->chm_montrig);
new_channel->ch_montrig_mask =
- 1 << (offer->monitor_id % VMBUS_MONTRIG_LEN);
+ 1 << (offer->chm_montrig % VMBUS_MONTRIG_LEN);
}
/* Select default cpu for this channel. */
Modified: head/sys/dev/hyperv/vmbus/vmbus_reg.h
==============================================================================
--- head/sys/dev/hyperv/vmbus/vmbus_reg.h Thu Jul 14 05:25:31 2016 (r302802)
+++ head/sys/dev/hyperv/vmbus/vmbus_reg.h Thu Jul 14 05:33:33 2016 (r302803)
@@ -31,6 +31,7 @@
#include <sys/param.h>
#include <dev/hyperv/vmbus/hyperv_reg.h>
+#include <dev/hyperv/include/hyperv.h> /* XXX for hyperv_guid */
/*
* Hyper-V SynIC message format.
@@ -121,6 +122,7 @@ struct vmbus_gpa_range {
* - Embedded in hypercall_postmsg_in.hc_data, e.g. request.
*/
+#define VMBUS_CHANMSG_TYPE_CHOFFER 1 /* NOTE */
#define VMBUS_CHANMSG_TYPE_CHRESCIND 2 /* NOTE */
#define VMBUS_CHANMSG_TYPE_CHREQUEST 3 /* REQ */
#define VMBUS_CHANMSG_TYPE_CHOPEN 5 /* REQ */
@@ -248,4 +250,27 @@ struct vmbus_chanmsg_chrescind {
uint32_t chm_chanid;
} __packed;
+/* VMBUS_CHANMSG_TYPE_CHOFFER */
+struct vmbus_chanmsg_choffer {
+ struct vmbus_chanmsg_hdr chm_hdr;
+ struct hyperv_guid chm_chtype;
+ struct hyperv_guid chm_chinst;
+ uint64_t chm_chlat; /* unit: 100ns */
+ uint32_t chm_chrev;
+ uint32_t chm_svrctx_sz;
+ uint16_t chm_chflags;
+ uint16_t chm_mmio_sz; /* unit: MB */
+ uint8_t chm_udata[120];
+ uint16_t chm_subidx;
+ uint16_t chm_rsvd;
+ uint32_t chm_chanid;
+ uint8_t chm_montrig;
+ uint8_t chm_flags1; /* VMBUS_CHOFFER_FLAG1_ */
+ uint16_t chm_flags2;
+ uint32_t chm_connid;
+} __packed;
+CTASSERT(sizeof(struct vmbus_chanmsg_choffer) <= VMBUS_MSG_DSIZE_MAX);
+
+#define VMBUS_CHOFFER_FLAG1_HASMNF 0x01
+
#endif /* !_VMBUS_REG_H_ */
More information about the svn-src-all
mailing list