mm: add thp_size
[linux-2.6-microblaze.git] / kernel / kthread.c
index 1d9e2fd..3edaa38 100644 (file)
@@ -480,7 +480,6 @@ EXPORT_SYMBOL(kthread_bind);
  *          to "name.*%u". Code fills in cpu number.
  *
  * Description: This helper function creates and names a kernel thread
- * The thread will be woken and put into park mode.
  */
 struct task_struct *kthread_create_on_cpu(int (*threadfn)(void *data),
                                          void *data, unsigned int cpu,
@@ -1241,13 +1240,16 @@ void kthread_use_mm(struct mm_struct *mm)
        WARN_ON_ONCE(tsk->mm);
 
        task_lock(tsk);
+       /* Hold off tlb flush IPIs while switching mm's */
+       local_irq_disable();
        active_mm = tsk->active_mm;
        if (active_mm != mm) {
                mmgrab(mm);
                tsk->active_mm = mm;
        }
        tsk->mm = mm;
-       switch_mm(active_mm, mm, tsk);
+       switch_mm_irqs_off(active_mm, mm, tsk);
+       local_irq_enable();
        task_unlock(tsk);
 #ifdef finish_arch_post_lock_switch
        finish_arch_post_lock_switch();
@@ -1256,8 +1258,7 @@ void kthread_use_mm(struct mm_struct *mm)
        if (active_mm != mm)
                mmdrop(active_mm);
 
-       to_kthread(tsk)->oldfs = get_fs();
-       set_fs(USER_DS);
+       to_kthread(tsk)->oldfs = force_uaccess_begin();
 }
 EXPORT_SYMBOL_GPL(kthread_use_mm);
 
@@ -1272,13 +1273,15 @@ void kthread_unuse_mm(struct mm_struct *mm)
        WARN_ON_ONCE(!(tsk->flags & PF_KTHREAD));
        WARN_ON_ONCE(!tsk->mm);
 
-       set_fs(to_kthread(tsk)->oldfs);
+       force_uaccess_end(to_kthread(tsk)->oldfs);
 
        task_lock(tsk);
        sync_mm_rss(mm);
+       local_irq_disable();
        tsk->mm = NULL;
        /* active_mm is still 'mm' */
        enter_lazy_tlb(mm, tsk);
+       local_irq_enable();
        task_unlock(tsk);
 }
 EXPORT_SYMBOL_GPL(kthread_unuse_mm);