ARM: 8840/1: use a raw_spinlock_t in unwind
[linux-2.6-block.git] / mm / mprotect.c
index 6d331620b9e539747d703556be892a75eae65352..36cb358db1702d689a45b8514c987fe83b953242 100644 (file)
@@ -167,11 +167,12 @@ static inline unsigned long change_pmd_range(struct vm_area_struct *vma,
                pgprot_t newprot, int dirty_accountable, int prot_numa)
 {
        pmd_t *pmd;
-       struct mm_struct *mm = vma->vm_mm;
        unsigned long next;
        unsigned long pages = 0;
        unsigned long nr_huge_updates = 0;
-       unsigned long mni_start = 0;
+       struct mmu_notifier_range range;
+
+       range.start = 0;
 
        pmd = pmd_offset(pud, addr);
        do {
@@ -183,9 +184,9 @@ static inline unsigned long change_pmd_range(struct vm_area_struct *vma,
                        goto next;
 
                /* invoke the mmu notifier if the pmd is populated */
-               if (!mni_start) {
-                       mni_start = addr;
-                       mmu_notifier_invalidate_range_start(mm, mni_start, end);
+               if (!range.start) {
+                       mmu_notifier_range_init(&range, vma->vm_mm, addr, end);
+                       mmu_notifier_invalidate_range_start(&range);
                }
 
                if (is_swap_pmd(*pmd) || pmd_trans_huge(*pmd) || pmd_devmap(*pmd)) {
@@ -214,8 +215,8 @@ next:
                cond_resched();
        } while (pmd++, addr = next, addr != end);
 
-       if (mni_start)
-               mmu_notifier_invalidate_range_end(mm, mni_start, end);
+       if (range.start)
+               mmu_notifier_invalidate_range_end(&range);
 
        if (nr_huge_updates)
                count_vm_numa_events(NUMA_HUGE_PTE_UPDATES, nr_huge_updates);