Drivers: hv: Add new message types to enhance KVP.
authorOlaf Hering <ohering@suse.de>
Mon, 26 Mar 2012 13:52:26 +0000 (15:52 +0200)
committerOlaf Hering <ohering@suse.de>
Mon, 26 Mar 2012 13:52:44 +0000 (15:52 +0200)
suse-commit: 1813e31c96dbe1799206e7e0084eb9ab214b3761

drivers/hv/hv_kvp.c
include/linux/hyperv.h
tools/hv/hv_kvp_daemon.c

index 0ef4c1f..779109b 100644 (file)
@@ -78,7 +78,7 @@ kvp_register(void)
 
        if (msg) {
                kvp_msg = (struct hv_kvp_msg *)msg->data;
-               version = kvp_msg->body.kvp_version;
+               version = kvp_msg->body.kvp_register.version;
                msg->id.idx =  CN_KVP_IDX;
                msg->id.val = CN_KVP_VAL;
 
@@ -122,7 +122,8 @@ kvp_cn_callback(struct cn_msg *msg, struct netlink_skb_parms *nsp)
                 * to the host. But first, cancel the timeout.
                 */
                if (cancel_delayed_work_sync(&kvp_work))
-                       kvp_respond_to_host(data->data.key, data->data.value,
+                       kvp_respond_to_host(data->data.key,
+                                        data->data.value,
                                        !strlen(data->data.key));
        }
 }
index e57a6c6..a2d8c54 100644 (file)
@@ -149,7 +149,11 @@ struct hv_kvp_exchg_msg_value {
        __u32 key_size;
        __u32 value_size;
        __u8 key[HV_KVP_EXCHANGE_MAX_KEY_SIZE];
-       __u8 value[HV_KVP_EXCHANGE_MAX_VALUE_SIZE];
+       union {
+               __u8 value[HV_KVP_EXCHANGE_MAX_VALUE_SIZE];
+               __u32 value_u32;
+               __u64 value_u64;
+       };
 } __attribute__((packed));
 
 struct hv_kvp_msg_enumerate {
@@ -157,11 +161,31 @@ struct hv_kvp_msg_enumerate {
        struct hv_kvp_exchg_msg_value data;
 } __attribute__((packed));
 
+struct hv_kvp_msg_get {
+       struct hv_kvp_exchg_msg_value data;
+};
+
+struct hv_kvp_msg_set {
+       struct hv_kvp_exchg_msg_value data;
+};
+
+struct hv_kvp_msg_delete {
+       __u32 key_size;
+       __u8 key[HV_KVP_EXCHANGE_MAX_KEY_SIZE];
+};
+
+struct hv_kvp_register {
+       __u8 version[HV_KVP_EXCHANGE_MAX_KEY_SIZE];
+};
+
 struct hv_kvp_msg {
        struct hv_kvp_hdr       kvp_hdr;
        union {
-               struct hv_kvp_msg_enumerate     kvp_enum_data;
-               char    kvp_version[HV_KVP_EXCHANGE_MAX_KEY_SIZE];
+               struct hv_kvp_msg_get           kvp_get;
+               struct hv_kvp_msg_set           kvp_set;
+               struct hv_kvp_msg_delete        kvp_delete;
+               struct hv_kvp_msg_enumerate     kvp_enum_data;
+               struct hv_kvp_register          kvp_register;
        } body;
 } __attribute__((packed));
 
index 4ebf703..00d3f7c 100644 (file)
@@ -378,7 +378,7 @@ int main(void)
                         * Driver is registering with us; stash away the version
                         * information.
                         */
-                       p = (char *)hv_msg->body.kvp_version;
+                       p = (char *)hv_msg->body.kvp_register.version;
                        lic_version = malloc(strlen(p) + 1);
                        if (lic_version) {
                                strcpy(lic_version, p);