device, after it has been suspended at run time, from a resume
                request to the moment the device will be ready to process I/O,
                in microseconds.  If it is equal to 0, however, this means that
-               the PM QoS resume latency may be arbitrary and the special value
-               "n/a" means that user space cannot accept any resume latency at
-               all for the given device.
+               the PM QoS resume latency may be arbitrary.
 
                Not all drivers support this attribute.  If it isn't supported,
                it is not present.
 
 
        per_cpu(cpu_sys_devices, num) = &cpu->dev;
        register_cpu_under_node(num, cpu_to_node(num));
-       dev_pm_qos_expose_latency_limit(&cpu->dev,
-                                       PM_QOS_RESUME_LATENCY_NO_CONSTRAINT);
+       dev_pm_qos_expose_latency_limit(&cpu->dev, 0);
 
        return 0;
 }
 
 static int dev_update_qos_constraint(struct device *dev, void *data)
 {
        s64 *constraint_ns_p = data;
-       s64 constraint_ns = -1;
+       s32 constraint_ns = -1;
 
        if (dev->power.subsys_data && dev->power.subsys_data->domain_data)
                constraint_ns = dev_gpd_data(dev)->td.effective_constraint_ns;
 
-       if (constraint_ns < 0)
+       if (constraint_ns < 0) {
                constraint_ns = dev_pm_qos_read_value(dev);
-
-       if (constraint_ns == PM_QOS_RESUME_LATENCY_NO_CONSTRAINT)
+               constraint_ns *= NSEC_PER_USEC;
+       }
+       if (constraint_ns == 0)
                return 0;
 
-       constraint_ns *= NSEC_PER_USEC;
-
-       if (constraint_ns < *constraint_ns_p || *constraint_ns_p < 0)
+       /*
+        * constraint_ns cannot be negative here, because the device has been
+        * suspended.
+        */
+       if (constraint_ns < *constraint_ns_p || *constraint_ns_p == 0)
                *constraint_ns_p = constraint_ns;
 
        return 0;
 
        spin_unlock_irqrestore(&dev->power.lock, flags);
 
-       if (constraint_ns == 0)
+       if (constraint_ns < 0)
                return false;
 
-       if (constraint_ns == PM_QOS_RESUME_LATENCY_NO_CONSTRAINT)
-               constraint_ns = -1;
-       else
-               constraint_ns *= NSEC_PER_USEC;
-
+       constraint_ns *= NSEC_PER_USEC;
        /*
         * We can walk the children without any additional locking, because
         * they all have been suspended at this point and their
                device_for_each_child(dev, &constraint_ns,
                                      dev_update_qos_constraint);
 
-       if (constraint_ns < 0) {
-               /* The children have no constraints. */
-               td->effective_constraint_ns = PM_QOS_RESUME_LATENCY_NO_CONSTRAINT;
-               td->cached_suspend_ok = true;
-       } else {
-               constraint_ns -= td->suspend_latency_ns + td->resume_latency_ns;
-               if (constraint_ns > 0) {
-                       td->effective_constraint_ns = constraint_ns;
-                       td->cached_suspend_ok = true;
-               } else {
-                       td->effective_constraint_ns = 0;
-               }
+       if (constraint_ns > 0) {
+               constraint_ns -= td->suspend_latency_ns +
+                               td->resume_latency_ns;
+               if (constraint_ns == 0)
+                       return false;
        }
+       td->effective_constraint_ns = constraint_ns;
+       td->cached_suspend_ok = constraint_ns >= 0;
 
        /*
         * The children have been suspended already, so we don't need to take
                td = &to_gpd_data(pdd)->td;
                constraint_ns = td->effective_constraint_ns;
                /* default_suspend_ok() need not be called before us. */
-               if (constraint_ns < 0)
+               if (constraint_ns < 0) {
                        constraint_ns = dev_pm_qos_read_value(pdd->dev);
-
-               if (constraint_ns == PM_QOS_RESUME_LATENCY_NO_CONSTRAINT)
+                       constraint_ns *= NSEC_PER_USEC;
+               }
+               if (constraint_ns == 0)
                        continue;
 
-               constraint_ns *= NSEC_PER_USEC;
-
                /*
                 * constraint_ns cannot be negative here, because the device has
                 * been suspended.
 
        plist_head_init(&c->list);
        c->target_value = PM_QOS_RESUME_LATENCY_DEFAULT_VALUE;
        c->default_value = PM_QOS_RESUME_LATENCY_DEFAULT_VALUE;
-       c->no_constraint_value = PM_QOS_RESUME_LATENCY_NO_CONSTRAINT;
+       c->no_constraint_value = PM_QOS_RESUME_LATENCY_DEFAULT_VALUE;
        c->type = PM_QOS_MIN;
        c->notifiers = n;
 
 
            || (dev->power.request_pending
                        && dev->power.request == RPM_REQ_RESUME))
                retval = -EAGAIN;
-       else if (__dev_pm_qos_read_value(dev) == 0)
+       else if (__dev_pm_qos_read_value(dev) < 0)
                retval = -EPERM;
        else if (dev->power.runtime_status == RPM_SUSPENDED)
                retval = 1;
 
                                          struct device_attribute *attr,
                                          char *buf)
 {
-       s32 value = dev_pm_qos_requested_resume_latency(dev);
-
-       if (value == 0)
-               return sprintf(buf, "n/a\n");
-       else if (value == PM_QOS_RESUME_LATENCY_NO_CONSTRAINT)
-               value = 0;
-
-       return sprintf(buf, "%d\n", value);
+       return sprintf(buf, "%d\n", dev_pm_qos_requested_resume_latency(dev));
 }
 
 static ssize_t pm_qos_resume_latency_store(struct device *dev,
        s32 value;
        int ret;
 
-       if (!kstrtos32(buf, 0, &value)) {
-               /*
-                * Prevent users from writing negative or "no constraint" values
-                * directly.
-                */
-               if (value < 0 || value == PM_QOS_RESUME_LATENCY_NO_CONSTRAINT)
-                       return -EINVAL;
+       if (kstrtos32(buf, 0, &value))
+               return -EINVAL;
 
-               if (value == 0)
-                       value = PM_QOS_RESUME_LATENCY_NO_CONSTRAINT;
-       } else if (!strcmp(buf, "n/a") || !strcmp(buf, "n/a\n")) {
-               value = 0;
-       } else {
+       if (value < 0)
                return -EINVAL;
-       }
 
        ret = dev_pm_qos_update_request(dev->power.qos->resume_latency_req,
                                        value);
 
                data->needs_update = 0;
        }
 
-       if (resume_latency < latency_req &&
-           resume_latency != PM_QOS_RESUME_LATENCY_NO_CONSTRAINT)
+       /* resume_latency is 0 means no restriction */
+       if (resume_latency && resume_latency < latency_req)
                latency_req = resume_latency;
 
        /* Special case when user has set very strict latency requirement */
 
        PM_QOS_FLAGS_ALL,
 };
 
-#define PM_QOS_DEFAULT_VALUE   (-1)
-#define PM_QOS_LATENCY_ANY     S32_MAX
+#define PM_QOS_DEFAULT_VALUE -1
 
 #define PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE       (2000 * USEC_PER_SEC)
 #define PM_QOS_NETWORK_LAT_DEFAULT_VALUE       (2000 * USEC_PER_SEC)
 #define PM_QOS_NETWORK_THROUGHPUT_DEFAULT_VALUE        0
 #define PM_QOS_MEMORY_BANDWIDTH_DEFAULT_VALUE  0
 #define PM_QOS_RESUME_LATENCY_DEFAULT_VALUE    0
-#define PM_QOS_RESUME_LATENCY_NO_CONSTRAINT    PM_QOS_LATENCY_ANY
 #define PM_QOS_LATENCY_TOLERANCE_DEFAULT_VALUE 0
 #define PM_QOS_LATENCY_TOLERANCE_NO_CONSTRAINT (-1)
+#define PM_QOS_LATENCY_ANY                     ((s32)(~(__u32)0 >> 1))
 
 #define PM_QOS_FLAG_NO_POWER_OFF       (1 << 0)
 #define PM_QOS_FLAG_REMOTE_WAKEUP      (1 << 1)