Merge tag 'hyperv-next-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/hyper...
[platform/kernel/linux-starfive.git] / drivers / hv / vmbus_drv.c
index f2a79f5..000b53e 100644 (file)
@@ -654,38 +654,28 @@ static int vmbus_uevent(struct device *device, struct kobj_uevent_env *env)
        return ret;
 }
 
-static const uuid_le null_guid;
-
-static inline bool is_null_guid(const uuid_le *guid)
-{
-       if (uuid_le_cmp(*guid, null_guid))
-               return false;
-       return true;
-}
-
 static const struct hv_vmbus_device_id *
-hv_vmbus_dev_match(const struct hv_vmbus_device_id *id, const uuid_le *guid)
-
+hv_vmbus_dev_match(const struct hv_vmbus_device_id *id, const guid_t *guid)
 {
        if (id == NULL)
                return NULL; /* empty device table */
 
-       for (; !is_null_guid(&id->guid); id++)
-               if (!uuid_le_cmp(id->guid, *guid))
+       for (; !guid_is_null(&id->guid); id++)
+               if (guid_equal(&id->guid, guid))
                        return id;
 
        return NULL;
 }
 
 static const struct hv_vmbus_device_id *
-hv_vmbus_dynid_match(struct hv_driver *drv, const uuid_le *guid)
+hv_vmbus_dynid_match(struct hv_driver *drv, const guid_t *guid)
 {
        const struct hv_vmbus_device_id *id = NULL;
        struct vmbus_dynid *dynid;
 
        spin_lock(&drv->dynids.lock);
        list_for_each_entry(dynid, &drv->dynids.list, node) {
-               if (!uuid_le_cmp(dynid->id.guid, *guid)) {
+               if (guid_equal(&dynid->id.guid, guid)) {
                        id = &dynid->id;
                        break;
                }
@@ -695,9 +685,7 @@ hv_vmbus_dynid_match(struct hv_driver *drv, const uuid_le *guid)
        return id;
 }
 
-static const struct hv_vmbus_device_id vmbus_device_null = {
-       .guid = NULL_UUID_LE,
-};
+static const struct hv_vmbus_device_id vmbus_device_null;
 
 /*
  * Return a matching hv_vmbus_device_id pointer.
@@ -706,7 +694,7 @@ static const struct hv_vmbus_device_id vmbus_device_null = {
 static const struct hv_vmbus_device_id *hv_vmbus_get_id(struct hv_driver *drv,
                                                        struct hv_device *dev)
 {
-       const uuid_le *guid = &dev->dev_type;
+       const guid_t *guid = &dev->dev_type;
        const struct hv_vmbus_device_id *id;
 
        /* When driver_override is set, only bind to the matching driver */
@@ -726,7 +714,7 @@ static const struct hv_vmbus_device_id *hv_vmbus_get_id(struct hv_driver *drv,
 }
 
 /* vmbus_add_dynid - add a new device ID to this driver and re-probe devices */
-static int vmbus_add_dynid(struct hv_driver *drv, uuid_le *guid)
+static int vmbus_add_dynid(struct hv_driver *drv, guid_t *guid)
 {
        struct vmbus_dynid *dynid;
 
@@ -764,10 +752,10 @@ static ssize_t new_id_store(struct device_driver *driver, const char *buf,
                            size_t count)
 {
        struct hv_driver *drv = drv_to_hv_drv(driver);
-       uuid_le guid;
+       guid_t guid;
        ssize_t retval;
 
-       retval = uuid_le_to_bin(buf, &guid);
+       retval = guid_parse(buf, &guid);
        if (retval)
                return retval;
 
@@ -791,10 +779,10 @@ static ssize_t remove_id_store(struct device_driver *driver, const char *buf,
 {
        struct hv_driver *drv = drv_to_hv_drv(driver);
        struct vmbus_dynid *dynid, *n;
-       uuid_le guid;
+       guid_t guid;
        ssize_t retval;
 
-       retval = uuid_le_to_bin(buf, &guid);
+       retval = guid_parse(buf, &guid);
        if (retval)
                return retval;
 
@@ -803,7 +791,7 @@ static ssize_t remove_id_store(struct device_driver *driver, const char *buf,
        list_for_each_entry_safe(dynid, n, &drv->dynids.list, node) {
                struct hv_vmbus_device_id *id = &dynid->id;
 
-               if (!uuid_le_cmp(id->guid, guid)) {
+               if (guid_equal(&id->guid, &guid)) {
                        list_del(&dynid->node);
                        kfree(dynid);
                        retval = count;
@@ -1496,6 +1484,38 @@ static ssize_t channel_events_show(const struct vmbus_channel *channel, char *bu
 }
 static VMBUS_CHAN_ATTR(events, S_IRUGO, channel_events_show, NULL);
 
+static ssize_t channel_intr_in_full_show(const struct vmbus_channel *channel,
+                                        char *buf)
+{
+       return sprintf(buf, "%llu\n",
+                      (unsigned long long)channel->intr_in_full);
+}
+static VMBUS_CHAN_ATTR(intr_in_full, 0444, channel_intr_in_full_show, NULL);
+
+static ssize_t channel_intr_out_empty_show(const struct vmbus_channel *channel,
+                                          char *buf)
+{
+       return sprintf(buf, "%llu\n",
+                      (unsigned long long)channel->intr_out_empty);
+}
+static VMBUS_CHAN_ATTR(intr_out_empty, 0444, channel_intr_out_empty_show, NULL);
+
+static ssize_t channel_out_full_first_show(const struct vmbus_channel *channel,
+                                          char *buf)
+{
+       return sprintf(buf, "%llu\n",
+                      (unsigned long long)channel->out_full_first);
+}
+static VMBUS_CHAN_ATTR(out_full_first, 0444, channel_out_full_first_show, NULL);
+
+static ssize_t channel_out_full_total_show(const struct vmbus_channel *channel,
+                                          char *buf)
+{
+       return sprintf(buf, "%llu\n",
+                      (unsigned long long)channel->out_full_total);
+}
+static VMBUS_CHAN_ATTR(out_full_total, 0444, channel_out_full_total_show, NULL);
+
 static ssize_t subchannel_monitor_id_show(const struct vmbus_channel *channel,
                                          char *buf)
 {
@@ -1521,6 +1541,10 @@ static struct attribute *vmbus_chan_attrs[] = {
        &chan_attr_latency.attr,
        &chan_attr_interrupts.attr,
        &chan_attr_events.attr,
+       &chan_attr_intr_in_full.attr,
+       &chan_attr_intr_out_empty.attr,
+       &chan_attr_out_full_first.attr,
+       &chan_attr_out_full_total.attr,
        &chan_attr_monitor_id.attr,
        &chan_attr_subchannel_id.attr,
        NULL
@@ -1556,8 +1580,8 @@ int vmbus_add_channel_kobj(struct hv_device *dev, struct vmbus_channel *channel)
  * vmbus_device_create - Creates and registers a new child device
  * on the vmbus.
  */
-struct hv_device *vmbus_device_create(const uuid_le *type,
-                                     const uuid_le *instance,
+struct hv_device *vmbus_device_create(const guid_t *type,
+                                     const guid_t *instance,
                                      struct vmbus_channel *channel)
 {
        struct hv_device *child_device_obj;
@@ -1569,12 +1593,10 @@ struct hv_device *vmbus_device_create(const uuid_le *type,
        }
 
        child_device_obj->channel = channel;
-       memcpy(&child_device_obj->dev_type, type, sizeof(uuid_le));
-       memcpy(&child_device_obj->dev_instance, instance,
-              sizeof(uuid_le));
+       guid_copy(&child_device_obj->dev_type, type);
+       guid_copy(&child_device_obj->dev_instance, instance);
        child_device_obj->vendor_id = 0x1414; /* MSFT vendor ID */
 
-
        return child_device_obj;
 }