static int dedicated_cede_loop(struct cpuidle_device *dev, struct cpuidle_driver *drv, int index) { unsigned long in_purr; idle_loop_prolog(&in_purr); get_lppaca()->donate_dedicated_cpu = 1; HMT_medium(); check_and_cede_processor(); get_lppaca()->donate_dedicated_cpu = 0; idle_loop_epilog(in_purr); return index; }
static int dedicated_cede_loop(struct cpuidle_device *dev, struct cpuidle_driver *drv, int index) { unsigned long in_purr; ktime_t kt_before; idle_loop_prolog(&in_purr, &kt_before); get_lppaca()->donate_dedicated_cpu = 1; ppc64_runlatch_off(); HMT_medium(); check_and_cede_processor(); get_lppaca()->donate_dedicated_cpu = 0; dev->last_residency = (int)idle_loop_epilog(in_purr, kt_before); return index; }
static int shared_cede_loop(struct cpuidle_device *dev, struct cpuidle_driver *drv, int index) { unsigned long in_purr; idle_loop_prolog(&in_purr); /* * Yield the processor to the hypervisor. We return if * an external interrupt occurs (which are driven prior * to returning here) or if a prod occurs from another * processor. When returning here, external interrupts * are enabled. */ check_and_cede_processor(); idle_loop_epilog(in_purr); return index; }