]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/asm-s390/tlbflush.h
ipc: uninline some code from util.h
[linux-2.6-omap-h63xx.git] / include / asm-s390 / tlbflush.h
index a69bd2490d52ceeb1af02f94dd0ba40eb958c593..70fa5ae581801b8a112edc0f71dfc9c9770ed83b 100644 (file)
@@ -42,11 +42,11 @@ static inline void __tlb_flush_global(void)
 /*
  * Flush all tlb entries of a page table on all cpus.
  */
-static inline void __tlb_flush_idte(pgd_t *pgd)
+static inline void __tlb_flush_idte(unsigned long asce)
 {
        asm volatile(
                "       .insn   rrf,0xb98e0000,0,%0,%1,0"
-               : : "a" (2048), "a" (__pa(pgd) & PAGE_MASK) : "cc" );
+               : : "a" (2048), "a" (asce) : "cc" );
 }
 
 static inline void __tlb_flush_mm(struct mm_struct * mm)
@@ -61,11 +61,11 @@ static inline void __tlb_flush_mm(struct mm_struct * mm)
         * only ran on the local cpu.
         */
        if (MACHINE_HAS_IDTE) {
-               pgd_t *shadow_pgd = get_shadow_table(mm->pgd);
+               pgd_t *shadow = get_shadow_table(mm->pgd);
 
-               if (shadow_pgd)
-                       __tlb_flush_idte(shadow_pgd);
-               __tlb_flush_idte(mm->pgd);
+               if (shadow)
+                       __tlb_flush_idte((unsigned long) shadow | mm->context);
+               __tlb_flush_idte((unsigned long) mm->pgd | mm->context);
                return;
        }
        preempt_disable();
@@ -106,9 +106,23 @@ static inline void __tlb_flush_mm_cond(struct mm_struct * mm)
  */
 #define flush_tlb()                            do { } while (0)
 #define flush_tlb_all()                                do { } while (0)
-#define flush_tlb_mm(mm)                       __tlb_flush_mm_cond(mm)
 #define flush_tlb_page(vma, addr)              do { } while (0)
-#define flush_tlb_range(vma, start, end)       __tlb_flush_mm_cond(mm)
-#define flush_tlb_kernel_range(start, end)     __tlb_flush_mm(&init_mm)
+
+static inline void flush_tlb_mm(struct mm_struct *mm)
+{
+       __tlb_flush_mm_cond(mm);
+}
+
+static inline void flush_tlb_range(struct vm_area_struct *vma,
+                                  unsigned long start, unsigned long end)
+{
+       __tlb_flush_mm_cond(vma->vm_mm);
+}
+
+static inline void flush_tlb_kernel_range(unsigned long start,
+                                         unsigned long end)
+{
+       __tlb_flush_mm(&init_mm);
+}
 
 #endif /* _S390_TLBFLUSH_H */