/* * RTCC idle handler, called when CPU is idle */ static int rtcc_idle_handler(struct notifier_block *nb, unsigned long val, void *data) { if (likely(!atomic_read(&krtccd_enabled))) return 0; if (likely(atomic_read(&need_to_reclaim) == 0)) return 0; // To prevent RTCC from running too frequently if (likely(time_before(jiffies, prev_jiffy + rtcc_reclaim_jiffies))) return 0; if (unlikely(atomic_read(&kswapd_running) == 1)) return 0; if (unlikely(idle_cpu(task_cpu(krtccd)) && this_cpu_loadx(3) == 0) || rtcc_boost_mode) { if (likely(atomic_read(&krtccd_running) == 0)) { atomic_set(&krtccd_running, 1); wake_up_process(krtccd); prev_jiffy = jiffies; } } return 0; }
void could_cswap(void) { if (atomic_read(&s_reclaim.need_to_reclaim) == 0) return; if (time_before(jiffies, prev_jiffy + minimum_interval_time)) return; if (atomic_read(&s_reclaim.lmk_running) == 1 || atomic_read(&kswapd_thread_on) == 1) return; if (get_nr_swap_pages() < minimum_freeswap_pages) return; if (idle_cpu(task_cpu(s_reclaim.kcompcached)) && this_cpu_loadx(4) == 0) { if (atomic_read(&s_reclaim.kcompcached_running) == 0) { wake_up_process(s_reclaim.kcompcached); atomic_set(&s_reclaim.kcompcached_running, 1); prev_jiffy = jiffies; } } }