Pull kmalloc into release branch
[pandora-kernel.git] / arch / powerpc / mm / tlb_32.c
index 6c3dc3c..925ff70 100644 (file)
@@ -23,7 +23,6 @@
  *
  */
 
-#include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/mm.h>
 #include <linux/init.h>
@@ -42,7 +41,7 @@ void flush_hash_entry(struct mm_struct *mm, pte_t *ptep, unsigned long addr)
 
        if (Hash != 0) {
                ptephys = __pa(ptep) & PAGE_MASK;
-               flush_hash_pages(mm->context, addr, ptephys, 1);
+               flush_hash_pages(mm->context.id, addr, ptephys, 1);
        }
 }
 
@@ -102,7 +101,7 @@ static void flush_range(struct mm_struct *mm, unsigned long start,
        pmd_t *pmd;
        unsigned long pmd_end;
        int count;
-       unsigned int ctx = mm->context;
+       unsigned int ctx = mm->context.id;
 
        if (Hash == 0) {
                _tlbia();
@@ -149,6 +148,12 @@ void flush_tlb_mm(struct mm_struct *mm)
                return;
        }
 
+       /*
+        * It is safe to go down the mm's list of vmas when called
+        * from dup_mmap, holding mmap_sem.  It would also be safe from
+        * unmap_region or exit_mmap, but not from vmtruncate on SMP -
+        * but it seems dup_mmap is the only SMP case which gets here.
+        */
        for (mp = mm->mmap; mp != NULL; mp = mp->vm_next)
                flush_range(mp->vm_mm, mp->vm_start, mp->vm_end);
        FINISH_FLUSH;
@@ -166,7 +171,7 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long vmaddr)
        mm = (vmaddr < TASK_SIZE)? vma->vm_mm: &init_mm;
        pmd = pmd_offset(pgd_offset(mm, vmaddr), vmaddr);
        if (!pmd_none(*pmd))
-               flush_hash_pages(mm->context, vmaddr, pmd_val(*pmd), 1);
+               flush_hash_pages(mm->context.id, vmaddr, pmd_val(*pmd), 1);
        FINISH_FLUSH;
 }