aboutsummaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorSepherosa Ziehau <sephe@FreeBSD.org>2016-11-02 07:18:27 +0000
committerSepherosa Ziehau <sephe@FreeBSD.org>2016-11-02 07:18:27 +0000
commit30c90f019fae2636046f3789dab92794a138d19a (patch)
treebf81c9b94c85921fe0bdccc9224f70a1f44a9636 /sys/dev
parent56e6c4251c09cd58fa3100037e05e7c8ec00709c (diff)
Notes
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/hyperv/utilities/hv_kvp.c44
-rw-r--r--sys/dev/hyperv/utilities/hv_kvp.h13
-rw-r--r--sys/dev/hyperv/utilities/hv_utilreg.h15
3 files changed, 34 insertions, 38 deletions
diff --git a/sys/dev/hyperv/utilities/hv_kvp.c b/sys/dev/hyperv/utilities/hv_kvp.c
index 593b4226bc52..643d61829810 100644
--- a/sys/dev/hyperv/utilities/hv_kvp.c
+++ b/sys/dev/hyperv/utilities/hv_kvp.c
@@ -72,8 +72,6 @@ __FBSDID("$FreeBSD$");
/* hv_kvp defines */
#define BUFFERSIZE sizeof(struct hv_kvp_msg)
-#define KVP_SUCCESS 0
-#define KVP_ERROR 1
#define kvp_hdr hdr.kvp_hdr
#define KVP_FWVER_MAJOR 3
@@ -480,7 +478,7 @@ hv_kvp_convert_usermsg_to_hostmsg(struct hv_kvp_msg *umsg, struct hv_kvp_msg *hm
case HV_KVP_OP_SET_IP_INFO:
case HV_KVP_OP_SET:
case HV_KVP_OP_DELETE:
- return (KVP_SUCCESS);
+ return (0);
case HV_KVP_OP_ENUMERATE:
host_exchg_data = &hmsg->body.kvp_enum_data.data;
@@ -501,9 +499,9 @@ hv_kvp_convert_usermsg_to_hostmsg(struct hv_kvp_msg *umsg, struct hv_kvp_msg *hm
host_exchg_data->value_type = HV_REG_SZ;
if ((hkey_len < 0) || (hvalue_len < 0))
- return (HV_KVP_E_FAIL);
+ return (EINVAL);
- return (KVP_SUCCESS);
+ return (0);
case HV_KVP_OP_GET:
host_exchg_data = &hmsg->body.kvp_get.data;
@@ -519,12 +517,12 @@ hv_kvp_convert_usermsg_to_hostmsg(struct hv_kvp_msg *umsg, struct hv_kvp_msg *hm
host_exchg_data->value_type = HV_REG_SZ;
if ((hkey_len < 0) || (hvalue_len < 0))
- return (HV_KVP_E_FAIL);
+ return (EINVAL);
- return (KVP_SUCCESS);
+ return (0);
default:
- return (HV_KVP_E_FAIL);
+ return (EINVAL);
}
}
@@ -533,16 +531,13 @@ hv_kvp_convert_usermsg_to_hostmsg(struct hv_kvp_msg *umsg, struct hv_kvp_msg *hm
* Send the response back to the host.
*/
static void
-hv_kvp_respond_host(hv_kvp_sc *sc, int error)
+hv_kvp_respond_host(hv_kvp_sc *sc, uint32_t error)
{
struct hv_vmbus_icmsg_hdr *hv_icmsg_hdrp;
hv_icmsg_hdrp = (struct hv_vmbus_icmsg_hdr *)
&sc->rcv_buf[sizeof(struct hv_vmbus_pipe_hdr)];
- if (error)
- error = HV_KVP_E_FAIL;
-
hv_icmsg_hdrp->status = error;
hv_icmsg_hdrp->icflags = HV_ICMSGHDRFLAG_TRANSACTION |
HV_ICMSGHDRFLAG_RESPONSE;
@@ -612,8 +607,10 @@ hv_kvp_process_request(void *context, int pending)
error = vmbus_ic_negomsg(&sc->util_sc,
kvp_buf, &recvlen, KVP_FWVER, KVP_MSGVER);
/* XXX handle vmbus_ic_negomsg failure. */
- hv_kvp_respond_host(sc, error);
-
+ if (!error)
+ hv_kvp_respond_host(sc, HV_S_OK);
+ else
+ hv_kvp_respond_host(sc, HV_E_FAIL);
/*
* It is ok to not acquire the mutex before setting
* req_in_progress here because negotiation is the
@@ -657,7 +654,7 @@ hv_kvp_process_request(void *context, int pending)
*/
if (hv_kvp_req_in_progress(sc)) {
hv_kvp_log_info("%s: request was still active after wait so failing\n", __func__);
- hv_kvp_respond_host(sc, HV_KVP_E_FAIL);
+ hv_kvp_respond_host(sc, HV_E_FAIL);
sc->req_in_progress = false;
}
@@ -737,9 +734,9 @@ hv_kvp_dev_daemon_read(struct cdev *dev, struct uio *uio, int ioflag __unused)
struct hv_kvp_msg *hv_kvp_dev_buf;
hv_kvp_sc *sc = (hv_kvp_sc*)dev->si_drv1;
- /* Check hv_kvp daemon registration status*/
+ /* Read is not allowed util registering is done. */
if (!sc->register_done)
- return (KVP_ERROR);
+ return (EPERM);
sema_wait(&sc->dev_sema);
@@ -789,7 +786,7 @@ hv_kvp_dev_daemon_write(struct cdev *dev, struct uio *uio, int ioflag __unused)
}
else {
hv_kvp_log_info("%s, KVP Registration Failed\n", __func__);
- return (KVP_ERROR);
+ return (EINVAL);
}
} else {
@@ -799,10 +796,15 @@ hv_kvp_dev_daemon_write(struct cdev *dev, struct uio *uio, int ioflag __unused)
struct hv_kvp_msg *hmsg = sc->host_kvp_msg;
struct hv_kvp_msg *umsg = &sc->daemon_kvp_msg;
- hv_kvp_convert_usermsg_to_hostmsg(umsg, hmsg);
- hv_kvp_respond_host(sc, KVP_SUCCESS);
+ error = hv_kvp_convert_usermsg_to_hostmsg(umsg, hmsg);
+ hv_kvp_respond_host(sc, umsg->hdr.error);
wakeup(sc);
sc->req_in_progress = false;
+ if (umsg->hdr.error != HV_S_OK)
+ hv_kvp_log_info("%s, Error 0x%x from daemon\n",
+ __func__, umsg->hdr.error);
+ if (error)
+ hv_kvp_log_info("%s, Error from convert\n", __func__);
}
sc->daemon_busy = false;
@@ -865,7 +867,7 @@ hv_kvp_attach(device_t dev)
child = SYSCTL_CHILDREN(device_get_sysctl_tree(dev));
SYSCTL_ADD_INT(ctx, child, OID_AUTO, "hv_kvp_log",
- CTLFLAG_RW, &hv_kvp_log, 0, "Hyperv KVP service log level");
+ CTLFLAG_RWTUN, &hv_kvp_log, 0, "Hyperv KVP service log level");
TASK_INIT(&sc->task, 0, hv_kvp_process_request, sc);
diff --git a/sys/dev/hyperv/utilities/hv_kvp.h b/sys/dev/hyperv/utilities/hv_kvp.h
index c391da0d5a5d..a94e67110f21 100644
--- a/sys/dev/hyperv/utilities/hv_kvp.h
+++ b/sys/dev/hyperv/utilities/hv_kvp.h
@@ -144,19 +144,6 @@ enum hv_kvp_exchg_pool {
HV_KVP_POOL_COUNT /* Number of pools, must be last. */
};
-
-/*
- * Some Hyper-V status codes.
- */
-#define HV_KVP_S_OK 0x00000000
-#define HV_KVP_E_FAIL 0x80004005
-#define HV_KVP_S_CONT 0x80070103
-#define HV_ERROR_NOT_SUPPORTED 0x80070032
-#define HV_ERROR_MACHINE_LOCKED 0x800704F7
-#define HV_ERROR_DEVICE_NOT_CONNECTED 0x8007048F
-#define HV_INVALIDARG 0x80070057
-#define HV_KVP_GUID_NOTFOUND 0x80041002
-
#define ADDR_FAMILY_NONE 0x00
#define ADDR_FAMILY_IPV4 0x01
#define ADDR_FAMILY_IPV6 0x02
diff --git a/sys/dev/hyperv/utilities/hv_utilreg.h b/sys/dev/hyperv/utilities/hv_utilreg.h
index 9358776409ee..b29c0f99204f 100644
--- a/sys/dev/hyperv/utilities/hv_utilreg.h
+++ b/sys/dev/hyperv/utilities/hv_utilreg.h
@@ -29,10 +29,17 @@
#ifndef _HV_UTILREG_H_
#define _HV_UTILREG_H_
-#define HV_S_OK 0x00000000
-#define HV_E_FAIL 0x80004005
-#define HV_ERROR_NOT_SUPPORTED 0x80070032
-#define HV_ERROR_MACHINE_LOCKED 0x800704F7
+/*
+ * Some Hyper-V status codes.
+ */
+#define HV_S_OK 0x00000000
+#define HV_E_FAIL 0x80004005
+#define HV_S_CONT 0x80070103
+#define HV_ERROR_NOT_SUPPORTED 0x80070032
+#define HV_ERROR_MACHINE_LOCKED 0x800704F7
+#define HV_ERROR_DEVICE_NOT_CONNECTED 0x8007048F
+#define HV_INVALIDARG 0x80070057
+#define HV_GUID_NOTFOUND 0x80041002
/*
* Common defines for Hyper-V ICs