* @timer: idle injection period timer
  * @idle_duration_us: duration of CPU idle time to inject
  * @run_duration_us: duration of CPU run time to allow
+ * @latency_us: max allowed latency
  * @cpumask: mask of CPUs affected by idle injection
  */
 struct idle_inject_device {
        struct hrtimer timer;
        unsigned int idle_duration_us;
        unsigned int run_duration_us;
+       unsigned int latency_us;
        unsigned long cpumask[];
 };
 
         */
        iit->should_run = 0;
 
-       play_idle(READ_ONCE(ii_dev->idle_duration_us));
+       play_idle_precise(READ_ONCE(ii_dev->idle_duration_us) * NSEC_PER_USEC,
+                         READ_ONCE(ii_dev->latency_us) * NSEC_PER_USEC);
 }
 
 /**
        *idle_duration_us = READ_ONCE(ii_dev->idle_duration_us);
 }
 
+/**
+ * idle_inject_set_latency - set the maximum latency allowed
+ * @latency_us: set the latency requirement for the idle state
+ */
+void idle_inject_set_latency(struct idle_inject_device *ii_dev,
+                            unsigned int latency_us)
+{
+       WRITE_ONCE(ii_dev->latency_us, latency_us);
+}
+
 /**
  * idle_inject_start - start idle injections
  * @ii_dev: idle injection control device structure
        cpumask_copy(to_cpumask(ii_dev->cpumask), cpumask);
        hrtimer_init(&ii_dev->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
        ii_dev->timer.function = idle_inject_timer_fn;
+       ii_dev->latency_us = UINT_MAX;
 
        for_each_cpu(cpu, to_cpumask(ii_dev->cpumask)) {
 
 
 void idle_inject_get_duration(struct idle_inject_device *ii_dev,
                                 unsigned int *run_duration_us,
                                 unsigned int *idle_duration_us);
+
+void idle_inject_set_latency(struct idle_inject_device *ii_dev,
+                            unsigned int latency_ns);
+
 #endif /* __IDLE_INJECT_H__ */