/** * cmm_thread - CMM task thread * @dummy: not used * * Return value: * 0 **/ static int cmm_thread(void *dummy) { unsigned long timeleft; while (1) { timeleft = msleep_interruptible(delay * 1000); if (kthread_should_stop() || timeleft) break; if (mutex_trylock(&hotplug_mutex)) { if (hotplug_occurred) { hotplug_occurred = 0; mutex_unlock(&hotplug_mutex); cmm_dbg("Hotplug operation has occurred, " "loaning activity suspended " "for %d seconds.\n", hotplug_delay); timeleft = msleep_interruptible(hotplug_delay * 1000); if (kthread_should_stop() || timeleft) break; continue; } mutex_unlock(&hotplug_mutex); } else { cmm_dbg("Hotplug operation in progress, activity " "suspended\n"); continue; } cmm_get_mpp(); if (loaned_pages_target > loaned_pages) { if (cmm_alloc_pages(loaned_pages_target - loaned_pages)) loaned_pages_target = loaned_pages; } else if (loaned_pages_target < loaned_pages) cmm_free_pages(loaned_pages - loaned_pages_target); } return 0; }
/** * cmm_thread - CMM task thread * @dummy: not used * * Return value: * 0 **/ static int cmm_thread(void *dummy) { unsigned long timeleft; while (1) { timeleft = msleep_interruptible(delay * 1000); if (kthread_should_stop() || timeleft) { loaned_pages_target = loaned_pages; break; } cmm_get_mpp(); if (loaned_pages_target > loaned_pages) { if (cmm_alloc_pages(loaned_pages_target - loaned_pages)) loaned_pages_target = loaned_pages; } else if (loaned_pages_target < loaned_pages) cmm_free_pages(loaned_pages - loaned_pages_target); } return 0; }