home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-um / mmu_context.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.3 KB  |  89 lines

  1. /* 
  2.  * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
  3.  * Licensed under the GPL
  4.  */
  5.  
  6. #ifndef __UM_MMU_CONTEXT_H
  7. #define __UM_MMU_CONTEXT_H
  8.  
  9. #include "linux/sched.h"
  10. #include "choose-mode.h"
  11. #include "um_mmu.h"
  12.  
  13. #define get_mmu_context(task) do ; while(0)
  14. #define activate_context(tsk) do ; while(0)
  15.  
  16. #define deactivate_mm(tsk,mm)    do { } while (0)
  17.  
  18. extern void force_flush_all(void);
  19.  
  20. static inline void activate_mm(struct mm_struct *old, struct mm_struct *new)
  21. {
  22.     /*
  23.      * This is called by fs/exec.c and fs/aio.c. In the first case, for an
  24.      * exec, we don't need to do anything as we're called from userspace
  25.      * and thus going to use a new host PID. In the second, we're called
  26.      * from a kernel thread, and thus need to go doing the mmap's on the
  27.      * host. Since they're very expensive, we want to avoid that as far as
  28.      * possible.
  29.      */
  30.     if (old != new && (current->flags & PF_BORROWED_MM))
  31.         CHOOSE_MODE(force_flush_all(),
  32.                 switch_mm_skas(&new->context.skas.id));
  33. }
  34.  
  35. static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, 
  36.                  struct task_struct *tsk)
  37. {
  38.     unsigned cpu = smp_processor_id();
  39.  
  40.     if(prev != next){
  41.         cpu_clear(cpu, prev->cpu_vm_mask);
  42.         cpu_set(cpu, next->cpu_vm_mask);
  43.         if(next != &init_mm)
  44.             CHOOSE_MODE((void) 0, 
  45.                     switch_mm_skas(&next->context.skas.id));
  46.     }
  47. }
  48.  
  49. static inline void enter_lazy_tlb(struct mm_struct *mm, 
  50.                   struct task_struct *tsk)
  51. {
  52. }
  53.  
  54. extern int init_new_context_skas(struct task_struct *task, 
  55.                  struct mm_struct *mm);
  56.  
  57. static inline int init_new_context_tt(struct task_struct *task, 
  58.                       struct mm_struct *mm)
  59. {
  60.     return(0);
  61. }
  62.  
  63. static inline int init_new_context(struct task_struct *task, 
  64.                    struct mm_struct *mm)
  65. {
  66.     return(CHOOSE_MODE_PROC(init_new_context_tt, init_new_context_skas, 
  67.                 task, mm));
  68. }
  69.  
  70. extern void destroy_context_skas(struct mm_struct *mm);
  71.  
  72. static inline void destroy_context(struct mm_struct *mm)
  73. {
  74.     CHOOSE_MODE((void) 0, destroy_context_skas(mm));
  75. }
  76.  
  77. #endif
  78.  
  79. /*
  80.  * Overrides for Emacs so that we follow Linus's tabbing style.
  81.  * Emacs will notice this stuff at the end of the file and automatically
  82.  * adjust the settings for this buffer only.  This must remain at the end
  83.  * of the file.
  84.  * ---------------------------------------------------------------------------
  85.  * Local variables:
  86.  * c-file-style: "linux"
  87.  * End:
  88.  */
  89.