Last active
May 14, 2016 06:38
-
-
Save jerrinsg/333e584d1f65dc95b9f13b61dcebdaa7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
unsigned volatile int migrate_flag; | |
EXPORT_SYMBOL(migrate_flag); | |
static int migrate_to(void *data) | |
{ | |
struct migration_arg *arg = (struct migration_arg *)data; | |
struct rq *rq; | |
local_irq_disable(); | |
rq = task_rq( arg->task ); | |
raw_spin_lock(&((arg->task)->pi_lock)); | |
raw_spin_lock(&rq->lock); | |
deactivate_task(rq, arg->task, DEQUEUE_SLEEP); | |
arg->task->on_rq = 0; | |
raw_spin_unlock(&rq->lock); | |
raw_spin_unlock(&((arg->task)->pi_lock)); | |
local_irq_enable(); | |
migrate_flag = 1; | |
return 0; | |
} | |
static int migrate_back(void *data) | |
{ | |
struct migration_arg *arg = (struct migration_arg *)data; | |
struct rq *rq; | |
local_irq_disable(); | |
rq = task_rq( arg->task ); | |
raw_spin_lock(&((arg->task)->pi_lock)); | |
raw_spin_lock(&rq->lock); | |
activate_task(rq, arg->task, 0); | |
arg->task->on_rq = 1; | |
check_preempt_curr(rq, arg->task, 0); | |
raw_spin_unlock(&rq->lock); | |
raw_spin_unlock(&((arg->task)->pi_lock)); | |
local_irq_enable(); | |
return 0; | |
} | |
void migrate_to_call(struct task_struct *task, int target_cpu ) | |
{ | |
struct migration_arg arg = { task, target_cpu }; | |
int curr_cpu = task_cpu(task); | |
int rt = stop_one_cpu(curr_cpu, migrate_to, &arg); | |
} | |
EXPORT_SYMBOL(migrate_to_call); | |
void migrate_back_call(struct task_struct *task, int target_cpu ) | |
{ | |
struct migration_arg arg = { task, target_cpu }; | |
int curr_cpu = task_cpu(task); | |
migrate_back( &arg ); | |
} | |
EXPORT_SYMBOL(migrate_back_call); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment