Make generic TLB shootdown friendlier to non-x86 architectures
[opensuse:kernel.git] / mm / memory.c
1 /*
2  *  linux/mm/memory.c
3  *
4  *  Copyright (C) 1991, 1992, 1993, 1994  Linus Torvalds
5  */
6
7 /*
8  * demand-loading started 01.12.91 - seems it is high on the list of
9  * things wanted, and it should be easy to implement. - Linus
10  */
11
12 /*
13  * Ok, demand-loading was easy, shared pages a little bit tricker. Shared
14  * pages started 02.12.91, seems to work. - Linus.
15  *
16  * Tested sharing by executing about 30 /bin/sh: under the old kernel it
17  * would have taken more than the 6M I have free, but it worked well as
18  * far as I could see.
19  *
20  * Also corrected some "invalidate()"s - I wasn't doing enough of them.
21  */
22
23 /*
24  * Real VM (paging to/from disk) started 18.12.91. Much more work and
25  * thought has to go into this. Oh, well..
26  * 19.12.91  -  works, somewhat. Sometimes I get faults, don't know why.
27  *              Found it. Everything seems to work now.
28  * 20.12.91  -  Ok, making the swap-device changeable like the root.
29  */
30
31 /*
32  * 05.04.94  -  Multi-page memory management added for v1.1.
33  *              Idea by Alex Bligh (alex@cconcepts.co.uk)
34  *
35  * 16.07.99  -  Support of BIGMEM added by Gerhard Wichert, Siemens AG
36  *              (Gerhard.Wichert@pdb.siemens.de)
37  */
38
39 #include <linux/mm.h>
40 #include <linux/mman.h>
41 #include <linux/swap.h>
42 #include <linux/smp_lock.h>
43 #include <linux/swapctl.h>
44 #include <linux/iobuf.h>
45 #include <linux/highmem.h>
46 #include <linux/pagemap.h>
47
48 #include <asm/pgalloc.h>
49 #include <asm/uaccess.h>
50 #include <asm/tlb.h>
51 #include <asm/tlbflush.h>
52
53 unsigned long max_mapnr;
54 unsigned long num_physpages;
55 void * high_memory;
56 struct page *highmem_start_page;
57
58 /*
59  * We special-case the C-O-W ZERO_PAGE, because it's such
60  * a common occurrence (no need to read the page to know
61  * that it's zero - better for the cache and memory subsystem).
62  */
63 static inline void copy_cow_page(struct page * from, struct page * to, unsigned long address)
64 {
65         if (from == ZERO_PAGE(address)) {
66                 clear_user_highpage(to, address);
67                 return;
68         }
69         copy_user_highpage(to, from, address);
70 }
71
72 mem_map_t * mem_map;
73
74 /*
75  * Note: this doesn't free the actual pages themselves. That
76  * has been handled earlier when unmapping all the memory regions.
77  */
78 static inline void free_one_pmd(mmu_gather_t *tlb, pmd_t * dir)
79 {
80         struct page *pte;
81
82         if (pmd_none(*dir))
83                 return;
84         if (pmd_bad(*dir)) {
85                 pmd_ERROR(*dir);
86                 pmd_clear(dir);
87                 return;
88         }
89         pte = pmd_page(*dir);
90         pmd_clear(dir);
91         pte_free_tlb(tlb, pte);
92 }
93
94 static inline void free_one_pgd(mmu_gather_t *tlb, pgd_t * dir)
95 {
96         int j;
97         pmd_t * pmd;
98
99         if (pgd_none(*dir))
100                 return;
101         if (pgd_bad(*dir)) {
102                 pgd_ERROR(*dir);
103                 pgd_clear(dir);
104                 return;
105         }
106         pmd = pmd_offset(dir, 0);
107         pgd_clear(dir);
108         for (j = 0; j < PTRS_PER_PMD ; j++) {
109                 prefetchw(pmd+j+(PREFETCH_STRIDE/16));
110                 free_one_pmd(tlb, pmd+j);
111         }
112         pmd_free_tlb(tlb, pmd);
113 }
114
115 /*
116  * This function clears all user-level page tables of a process - this
117  * is needed by execve(), so that old pages aren't in the way.
118  *
119  * Must be called with pagetable lock held.
120  */
121 void clear_page_tables(mmu_gather_t *tlb, unsigned long first, int nr)
122 {
123         pgd_t * page_dir = tlb->mm->pgd;
124
125         page_dir += first;
126         do {
127                 free_one_pgd(tlb, page_dir);
128                 page_dir++;
129         } while (--nr);
130
131         /* keep the page table cache within bounds */
132         check_pgt_cache();
133 }
134
135 pte_t * pte_alloc_map(struct mm_struct *mm, pmd_t *pmd, unsigned long address)
136 {
137         if (!pmd_present(*pmd)) {
138                 struct page *new;
139
140                 spin_unlock(&mm->page_table_lock);
141                 new = pte_alloc_one(mm, address);
142                 spin_lock(&mm->page_table_lock);
143                 if (!new)
144                         return NULL;
145
146                 /*
147                  * Because we dropped the lock, we should re-check the
148                  * entry, as somebody else could have populated it..
149                  */
150                 if (pmd_present(*pmd)) {
151                         pte_free(new);
152                         goto out;
153                 }
154                 pmd_populate(mm, pmd, new);
155         }
156 out:
157         if (pmd_present(*pmd))
158                 return pte_offset_map(pmd, address);
159         return NULL;
160 }
161
162 pte_t * pte_alloc_kernel(struct mm_struct *mm, pmd_t *pmd, unsigned long address)
163 {
164         if (!pmd_present(*pmd)) {
165                 pte_t *new;
166
167                 spin_unlock(&mm->page_table_lock);
168                 new = pte_alloc_one_kernel(mm, address);
169                 spin_lock(&mm->page_table_lock);
170                 if (!new)
171                         return NULL;
172
173                 /*
174                  * Because we dropped the lock, we should re-check the
175                  * entry, as somebody else could have populated it..
176                  */
177                 if (pmd_present(*pmd)) {
178                         pte_free_kernel(new);
179                         goto out;
180                 }
181                 pmd_populate_kernel(mm, pmd, new);
182         }
183 out:
184         return pte_offset_kernel(pmd, address);
185 }
186 #define PTE_TABLE_MASK  ((PTRS_PER_PTE-1) * sizeof(pte_t))
187 #define PMD_TABLE_MASK  ((PTRS_PER_PMD-1) * sizeof(pmd_t))
188
189 /*
190  * copy one vm_area from one task to the other. Assumes the page tables
191  * already present in the new task to be cleared in the whole range
192  * covered by this vma.
193  *
194  * 08Jan98 Merged into one routine from several inline routines to reduce
195  *         variable count and make things faster. -jj
196  *
197  * dst->page_table_lock is held on entry and exit,
198  * but may be dropped within pmd_alloc() and pte_alloc_map().
199  */
200 int copy_page_range(struct mm_struct *dst, struct mm_struct *src,
201                         struct vm_area_struct *vma)
202 {
203         pgd_t * src_pgd, * dst_pgd;
204         unsigned long address = vma->vm_start;
205         unsigned long end = vma->vm_end;
206         unsigned long cow = (vma->vm_flags & (VM_SHARED | VM_MAYWRITE)) == VM_MAYWRITE;
207
208         src_pgd = pgd_offset(src, address)-1;
209         dst_pgd = pgd_offset(dst, address)-1;
210
211         for (;;) {
212                 pmd_t * src_pmd, * dst_pmd;
213
214                 src_pgd++; dst_pgd++;
215                 
216                 /* copy_pmd_range */
217                 
218                 if (pgd_none(*src_pgd))
219                         goto skip_copy_pmd_range;
220                 if (pgd_bad(*src_pgd)) {
221                         pgd_ERROR(*src_pgd);
222                         pgd_clear(src_pgd);
223 skip_copy_pmd_range:    address = (address + PGDIR_SIZE) & PGDIR_MASK;
224                         if (!address || (address >= end))
225                                 goto out;
226                         continue;
227                 }
228
229                 src_pmd = pmd_offset(src_pgd, address);
230                 dst_pmd = pmd_alloc(dst, dst_pgd, address);
231                 if (!dst_pmd)
232                         goto nomem;
233
234                 do {
235                         pte_t * src_pte, * dst_pte;
236                 
237                         /* copy_pte_range */
238                 
239                         if (pmd_none(*src_pmd))
240                                 goto skip_copy_pte_range;
241                         if (pmd_bad(*src_pmd)) {
242                                 pmd_ERROR(*src_pmd);
243                                 pmd_clear(src_pmd);
244 skip_copy_pte_range:            address = (address + PMD_SIZE) & PMD_MASK;
245                                 if (address >= end)
246                                         goto out;
247                                 goto cont_copy_pmd_range;
248                         }
249
250                         dst_pte = pte_alloc_map(dst, dst_pmd, address);
251                         if (!dst_pte)
252                                 goto nomem;
253                         spin_lock(&src->page_table_lock);                       
254                         src_pte = pte_offset_map_nested(src_pmd, address);
255                         do {
256                                 pte_t pte = *src_pte;
257                                 struct page *ptepage;
258                                 unsigned long pfn;
259                                 
260                                 /* copy_one_pte */
261
262                                 if (pte_none(pte))
263                                         goto cont_copy_pte_range_noset;
264                                 if (!pte_present(pte)) {
265                                         swap_duplicate(pte_to_swp_entry(pte));
266                                         goto cont_copy_pte_range;
267                                 }
268                                 pfn = pte_pfn(pte);
269                                 if (!pfn_valid(pfn))
270                                         goto cont_copy_pte_range;
271                                 ptepage = pfn_to_page(pfn);
272                                 if (PageReserved(ptepage))
273                                         goto cont_copy_pte_range;
274
275                                 /* If it's a COW mapping, write protect it both in the parent and the child */
276                                 if (cow && pte_write(pte)) {
277                                         ptep_set_wrprotect(src_pte);
278                                         pte = *src_pte;
279                                 }
280
281                                 /* If it's a shared mapping, mark it clean in the child */
282                                 if (vma->vm_flags & VM_SHARED)
283                                         pte = pte_mkclean(pte);
284                                 pte = pte_mkold(pte);
285                                 get_page(ptepage);
286                                 dst->rss++;
287
288 cont_copy_pte_range:            set_pte(dst_pte, pte);
289 cont_copy_pte_range_noset:      address += PAGE_SIZE;
290                                 if (address >= end) {
291                                         pte_unmap_nested(src_pte);
292                                         pte_unmap(dst_pte);
293                                         goto out_unlock;
294                                 }
295                                 src_pte++;
296                                 dst_pte++;
297                         } while ((unsigned long)src_pte & PTE_TABLE_MASK);
298                         pte_unmap_nested(src_pte-1);
299                         pte_unmap(dst_pte-1);
300                         spin_unlock(&src->page_table_lock);
301                 
302 cont_copy_pmd_range:    src_pmd++;
303                         dst_pmd++;
304                 } while ((unsigned long)src_pmd & PMD_TABLE_MASK);
305         }
306 out_unlock:
307         spin_unlock(&src->page_table_lock);
308 out:
309         return 0;
310 nomem:
311         return -ENOMEM;
312 }
313
314 /*
315  * Return indicates whether a page was freed so caller can adjust rss
316  */
317 static inline void forget_pte(pte_t page)
318 {
319         if (!pte_none(page)) {
320                 printk("forget_pte: old mapping existed!\n");
321                 BUG();
322         }
323 }
324
325 static void zap_pte_range(mmu_gather_t *tlb, pmd_t * pmd, unsigned long address, unsigned long size)
326 {
327         unsigned long offset;
328         pte_t *ptep;
329
330         if (pmd_none(*pmd))
331                 return;
332         if (pmd_bad(*pmd)) {
333                 pmd_ERROR(*pmd);
334                 pmd_clear(pmd);
335                 return;
336         }
337         ptep = pte_offset_map(pmd, address);
338         offset = address & ~PMD_MASK;
339         if (offset + size > PMD_SIZE)
340                 size = PMD_SIZE - offset;
341         size &= PAGE_MASK;
342         for (offset=0; offset < size; ptep++, offset += PAGE_SIZE) {
343                 pte_t pte = *ptep;
344                 if (pte_none(pte))
345                         continue;
346                 if (pte_present(pte)) {
347                         unsigned long pfn = pte_pfn(pte);
348
349                         pte_clear(ptep);
350                         pfn = pte_pfn(pte);
351                         tlb_remove_tlb_entry(tlb, pte, address+offset);
352                         if (pfn_valid(pfn)) {
353                                 struct page *page = pfn_to_page(pfn);
354                                 if (!PageReserved(page)) {
355                                         if (pte_dirty(pte))
356                                                 set_page_dirty(page);
357                                         tlb->freed++;
358                                         tlb_remove_page(tlb, page);
359                                 }
360                         }
361                 } else {
362                         free_swap_and_cache(pte_to_swp_entry(pte));
363                         pte_clear(ptep);
364                 }
365         }
366         pte_unmap(ptep-1);
367 }
368
369 static void zap_pmd_range(mmu_gather_t *tlb, pgd_t * dir, unsigned long address, unsigned long size)
370 {
371         pmd_t * pmd;
372         unsigned long end;
373
374         if (pgd_none(*dir))
375                 return;
376         if (pgd_bad(*dir)) {
377                 pgd_ERROR(*dir);
378                 pgd_clear(dir);
379                 return;
380         }
381         pmd = pmd_offset(dir, address);
382         end = address + size;
383         if (end > ((address + PGDIR_SIZE) & PGDIR_MASK))
384                 end = ((address + PGDIR_SIZE) & PGDIR_MASK);
385         do {
386                 zap_pte_range(tlb, pmd, address, end - address);
387                 address = (address + PMD_SIZE) & PMD_MASK; 
388                 pmd++;
389         } while (address < end);
390 }
391
392 void unmap_page_range(mmu_gather_t *tlb, struct vm_area_struct *vma, unsigned long address, unsigned long end)
393 {
394         pgd_t * dir;
395
396         if (address >= end)
397                 BUG();
398         dir = pgd_offset(vma->vm_mm, address);
399         tlb_start_vma(tlb, vma);
400         do {
401                 zap_pmd_range(tlb, dir, address, end - address);
402                 address = (address + PGDIR_SIZE) & PGDIR_MASK;
403                 dir++;
404         } while (address && (address < end));
405         tlb_end_vma(tlb, vma);
406 }
407
408 /*
409  * remove user pages in a given range.
410  */
411 void zap_page_range(struct vm_area_struct *vma, unsigned long address, unsigned long size)
412 {
413         struct mm_struct *mm = vma->vm_mm;
414         mmu_gather_t *tlb;
415         pgd_t * dir;
416         unsigned long start = address, end = address + size;
417
418         dir = pgd_offset(mm, address);
419
420         /*
421          * This is a long-lived spinlock. That's fine.
422          * There's no contention, because the page table
423          * lock only protects against kswapd anyway, and
424          * even if kswapd happened to be looking at this
425          * process we _want_ it to get stuck.
426          */
427         if (address >= end)
428                 BUG();
429         spin_lock(&mm->page_table_lock);
430         flush_cache_range(vma, address, end);
431
432         tlb = tlb_gather_mmu(mm);
433         unmap_page_range(tlb, vma, address, end);
434         tlb_finish_mmu(tlb, start, end);
435         spin_unlock(&mm->page_table_lock);
436 }
437
438 /*
439  * Do a quick page-table lookup for a single page. 
440  */
441 static struct page * follow_page(struct mm_struct *mm, unsigned long address, int write) 
442 {
443         pgd_t *pgd;
444         pmd_t *pmd;
445         pte_t *ptep, pte;
446         unsigned long pfn;
447
448         pgd = pgd_offset(mm, address);
449         if (pgd_none(*pgd) || pgd_bad(*pgd))
450                 goto out;
451
452         pmd = pmd_offset(pgd, address);
453         if (pmd_none(*pmd) || pmd_bad(*pmd))
454                 goto out;
455
456         preempt_disable();
457         ptep = pte_offset_map(pmd, address);
458         if (!ptep) {
459                 preempt_enable();
460                 goto out;
461         }
462
463         pte = *ptep;
464         pte_unmap(ptep);
465         preempt_enable();
466         if (pte_present(pte)) {
467                 if (!write ||
468                     (pte_write(pte) && pte_dirty(pte))) {
469                         pfn = pte_pfn(pte);
470                         if (pfn_valid(pfn))
471                                 return pfn_to_page(pfn);
472                 }
473         }
474
475 out:
476         return 0;
477 }
478
479 /* 
480  * Given a physical address, is there a useful struct page pointing to
481  * it?  This may become more complex in the future if we start dealing
482  * with IO-aperture pages in kiobufs.
483  */
484
485 static inline struct page * get_page_map(struct page *page)
486 {
487         return page;
488 }
489
490 int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, unsigned long start,
491                 int len, int write, int force, struct page **pages, struct vm_area_struct **vmas)
492 {
493         int i;
494         unsigned int flags;
495
496         /* 
497          * Require read or write permissions.
498          * If 'force' is set, we only require the "MAY" flags.
499          */
500         flags = write ? (VM_WRITE | VM_MAYWRITE) : (VM_READ | VM_MAYREAD);
501         flags &= force ? (VM_MAYREAD | VM_MAYWRITE) : (VM_READ | VM_WRITE);
502         i = 0;
503         
504
505         do {
506                 struct vm_area_struct * vma;
507
508                 vma = find_extend_vma(mm, start);
509
510                 if ( !vma || !(flags & vma->vm_flags) )
511                         return i ? : -EFAULT;
512
513                 spin_lock(&mm->page_table_lock);
514                 do {
515                         struct page *map;
516                         while (!(map = follow_page(mm, start, write))) {
517                                 spin_unlock(&mm->page_table_lock);
518                                 switch (handle_mm_fault(mm, vma, start, write)) {
519                                 case 1:
520                                         tsk->min_flt++;
521                                         break;
522                                 case 2:
523                                         tsk->maj_flt++;
524                                         break;
525                                 case 0:
526                                         if (i) return i;
527                                         return -EFAULT;
528                                 default:
529                                         if (i) return i;
530                                         return -ENOMEM;
531                                 }
532                                 spin_lock(&mm->page_table_lock);
533                         }
534                         if (pages) {
535                                 pages[i] = get_page_map(map);
536                                 /* FIXME: call the correct function,
537                                  * depending on the type of the found page
538                                  */
539                                 if (pages[i])
540                                         page_cache_get(pages[i]);
541                         }
542                         if (vmas)
543                                 vmas[i] = vma;
544                         i++;
545                         start += PAGE_SIZE;
546                         len--;
547                 } while(len && start < vma->vm_end);
548                 spin_unlock(&mm->page_table_lock);
549         } while(len);
550         return i;
551 }
552
553 /*
554  * Force in an entire range of pages from the current process's user VA,
555  * and pin them in physical memory.  
556  */
557 #define dprintk(x...)
558
559 int map_user_kiobuf(int rw, struct kiobuf *iobuf, unsigned long va, size_t len)
560 {
561         int pgcount, err;
562         struct mm_struct *      mm;
563         
564         /* Make sure the iobuf is not already mapped somewhere. */
565         if (iobuf->nr_pages)
566                 return -EINVAL;
567
568         mm = current->mm;
569         dprintk ("map_user_kiobuf: begin\n");
570         
571         pgcount = (va + len + PAGE_SIZE - 1)/PAGE_SIZE - va/PAGE_SIZE;
572         /* mapping 0 bytes is not permitted */
573         if (!pgcount) BUG();
574         err = expand_kiobuf(iobuf, pgcount);
575         if (err)
576                 return err;
577
578         iobuf->locked = 0;
579         iobuf->offset = va & (PAGE_SIZE-1);
580         iobuf->length = len;
581         
582         /* Try to fault in all of the necessary pages */
583         down_read(&mm->mmap_sem);
584         /* rw==READ means read from disk, write into memory area */
585         err = get_user_pages(current, mm, va, pgcount,
586                         (rw==READ), 0, iobuf->maplist, NULL);
587         up_read(&mm->mmap_sem);
588         if (err < 0) {
589                 unmap_kiobuf(iobuf);
590                 dprintk ("map_user_kiobuf: end %d\n", err);
591                 return err;
592         }
593         iobuf->nr_pages = err;
594         while (pgcount--) {
595                 /* FIXME: flush superflous for rw==READ,
596                  * probably wrong function for rw==WRITE
597                  */
598                 flush_dcache_page(iobuf->maplist[pgcount]);
599         }
600         dprintk ("map_user_kiobuf: end OK\n");
601         return 0;
602 }
603
604 /*
605  * Mark all of the pages in a kiobuf as dirty 
606  *
607  * We need to be able to deal with short reads from disk: if an IO error
608  * occurs, the number of bytes read into memory may be less than the
609  * size of the kiobuf, so we have to stop marking pages dirty once the
610  * requested byte count has been reached.
611  */
612
613 void mark_dirty_kiobuf(struct kiobuf *iobuf, int bytes)
614 {
615         int index, offset, remaining;
616         struct page *page;
617         
618         index = iobuf->offset >> PAGE_SHIFT;
619         offset = iobuf->offset & ~PAGE_MASK;
620         remaining = bytes;
621         if (remaining > iobuf->length)
622                 remaining = iobuf->length;
623         
624         while (remaining > 0 && index < iobuf->nr_pages) {
625                 page = iobuf->maplist[index];
626                 
627                 if (!PageReserved(page))
628                         SetPageDirty(page);
629
630                 remaining -= (PAGE_SIZE - offset);
631                 offset = 0;
632                 index++;
633         }
634 }
635
636 /*
637  * Unmap all of the pages referenced by a kiobuf.  We release the pages,
638  * and unlock them if they were locked. 
639  */
640
641 void unmap_kiobuf (struct kiobuf *iobuf) 
642 {
643         int i;
644         struct page *map;
645         
646         for (i = 0; i < iobuf->nr_pages; i++) {
647                 map = iobuf->maplist[i];
648                 if (map) {
649                         if (iobuf->locked)
650                                 unlock_page(map);
651                         /* FIXME: cache flush missing for rw==READ
652                          * FIXME: call the correct reference counting function
653                          */
654                         page_cache_release(map);
655                 }
656         }
657         
658         iobuf->nr_pages = 0;
659         iobuf->locked = 0;
660 }
661
662
663 /*
664  * Lock down all of the pages of a kiovec for IO.
665  *
666  * If any page is mapped twice in the kiovec, we return the error -EINVAL.
667  *
668  * The optional wait parameter causes the lock call to block until all
669  * pages can be locked if set.  If wait==0, the lock operation is
670  * aborted if any locked pages are found and -EAGAIN is returned.
671  */
672
673 int lock_kiovec(int nr, struct kiobuf *iovec[], int wait)
674 {
675         struct kiobuf *iobuf;
676         int i, j;
677         struct page *page, **ppage;
678         int doublepage = 0;
679         int repeat = 0;
680         
681  repeat:
682         
683         for (i = 0; i < nr; i++) {
684                 iobuf = iovec[i];
685
686                 if (iobuf->locked)
687                         continue;
688
689                 ppage = iobuf->maplist;
690                 for (j = 0; j < iobuf->nr_pages; ppage++, j++) {
691                         page = *ppage;
692                         if (!page)
693                                 continue;
694                         
695                         if (TestSetPageLocked(page)) {
696                                 while (j--) {
697                                         struct page *tmp = *--ppage;
698                                         if (tmp)
699                                                 unlock_page(tmp);
700                                 }
701                                 goto retry;
702                         }
703                 }
704                 iobuf->locked = 1;
705         }
706
707         return 0;
708         
709  retry:
710         
711         /* 
712          * We couldn't lock one of the pages.  Undo the locking so far,
713          * wait on the page we got to, and try again.  
714          */
715         
716         unlock_kiovec(nr, iovec);
717         if (!wait)
718                 return -EAGAIN;
719         
720         /* 
721          * Did the release also unlock the page we got stuck on?
722          */
723         if (!PageLocked(page)) {
724                 /* 
725                  * If so, we may well have the page mapped twice
726                  * in the IO address range.  Bad news.  Of
727                  * course, it _might_ just be a coincidence,
728                  * but if it happens more than once, chances
729                  * are we have a double-mapped page. 
730                  */
731                 if (++doublepage >= 3) 
732                         return -EINVAL;
733                 
734                 /* Try again...  */
735                 wait_on_page_locked(page);
736         }
737         
738         if (++repeat < 16)
739                 goto repeat;
740         return -EAGAIN;
741 }
742
743 /*
744  * Unlock all of the pages of a kiovec after IO.
745  */
746
747 int unlock_kiovec(int nr, struct kiobuf *iovec[])
748 {
749         struct kiobuf *iobuf;
750         int i, j;
751         struct page *page, **ppage;
752         
753         for (i = 0; i < nr; i++) {
754                 iobuf = iovec[i];
755
756                 if (!iobuf->locked)
757                         continue;
758                 iobuf->locked = 0;
759                 
760                 ppage = iobuf->maplist;
761                 for (j = 0; j < iobuf->nr_pages; ppage++, j++) {
762                         page = *ppage;
763                         if (!page)
764                                 continue;
765                         unlock_page(page);
766                 }
767         }
768         return 0;
769 }
770
771 static inline void zeromap_pte_range(pte_t * pte, unsigned long address,
772                                      unsigned long size, pgprot_t prot)
773 {
774         unsigned long end;
775
776         address &= ~PMD_MASK;
777         end = address + size;
778         if (end > PMD_SIZE)
779                 end = PMD_SIZE;
780         do {
781                 pte_t zero_pte = pte_wrprotect(mk_pte(ZERO_PAGE(address), prot));
782                 pte_t oldpage = ptep_get_and_clear(pte);
783                 set_pte(pte, zero_pte);
784                 forget_pte(oldpage);
785                 address += PAGE_SIZE;
786                 pte++;
787         } while (address && (address < end));
788 }
789
790 static inline int zeromap_pmd_range(struct mm_struct *mm, pmd_t * pmd, unsigned long address,
791                                     unsigned long size, pgprot_t prot)
792 {
793         unsigned long end;
794
795         address &= ~PGDIR_MASK;
796         end = address + size;
797         if (end > PGDIR_SIZE)
798                 end = PGDIR_SIZE;
799         do {
800                 pte_t * pte = pte_alloc_map(mm, pmd, address);
801                 if (!pte)
802                         return -ENOMEM;
803                 zeromap_pte_range(pte, address, end - address, prot);
804                 pte_unmap(pte);
805                 address = (address + PMD_SIZE) & PMD_MASK;
806                 pmd++;
807         } while (address && (address < end));
808         return 0;
809 }
810
811 int zeromap_page_range(struct vm_area_struct *vma, unsigned long address, unsigned long size, pgprot_t prot)
812 {
813         int error = 0;
814         pgd_t * dir;
815         unsigned long beg = address;
816         unsigned long end = address + size;
817         struct mm_struct *mm = vma->vm_mm;
818
819         dir = pgd_offset(mm, address);
820         flush_cache_range(vma, beg, end);
821         if (address >= end)
822                 BUG();
823
824         spin_lock(&mm->page_table_lock);
825         do {
826                 pmd_t *pmd = pmd_alloc(mm, dir, address);
827                 error = -ENOMEM;
828                 if (!pmd)
829                         break;
830                 error = zeromap_pmd_range(mm, pmd, address, end - address, prot);
831                 if (error)
832                         break;
833                 address = (address + PGDIR_SIZE) & PGDIR_MASK;
834                 dir++;
835         } while (address && (address < end));
836         flush_tlb_range(vma, beg, end);
837         spin_unlock(&mm->page_table_lock);
838         return error;
839 }
840
841 /*
842  * maps a range of physical memory into the requested pages. the old
843  * mappings are removed. any references to nonexistent pages results
844  * in null mappings (currently treated as "copy-on-access")
845  */
846 static inline void remap_pte_range(pte_t * pte, unsigned long address, unsigned long size,
847         unsigned long phys_addr, pgprot_t prot)
848 {
849         unsigned long end;
850         unsigned long pfn;
851
852         address &= ~PMD_MASK;
853         end = address + size;
854         if (end > PMD_SIZE)
855                 end = PMD_SIZE;
856         pfn = phys_addr >> PAGE_SHIFT;
857         do {
858                 pte_t oldpage = ptep_get_and_clear(pte);
859
860                 if (!pfn_valid(pfn) || PageReserved(pfn_to_page(pfn)))
861                         set_pte(pte, pfn_pte(pfn, prot));
862                 forget_pte(oldpage);
863                 address += PAGE_SIZE;
864                 pfn++;
865                 pte++;
866         } while (address && (address < end));
867 }
868
869 static inline int remap_pmd_range(struct mm_struct *mm, pmd_t * pmd, unsigned long address, unsigned long size,
870         unsigned long phys_addr, pgprot_t prot)
871 {
872         unsigned long end;
873
874         address &= ~PGDIR_MASK;
875         end = address + size;
876         if (end > PGDIR_SIZE)
877                 end = PGDIR_SIZE;
878         phys_addr -= address;
879         do {
880                 pte_t * pte = pte_alloc_map(mm, pmd, address);
881                 if (!pte)
882                         return -ENOMEM;
883                 remap_pte_range(pte, address, end - address, address + phys_addr, prot);
884                 pte_unmap(pte);
885                 address = (address + PMD_SIZE) & PMD_MASK;
886                 pmd++;
887         } while (address && (address < end));
888         return 0;
889 }
890
891 /*  Note: this is only safe if the mm semaphore is held when called. */
892 int remap_page_range(struct vm_area_struct *vma, unsigned long from, unsigned long phys_addr, unsigned long size, pgprot_t prot)
893 {
894         int error = 0;
895         pgd_t * dir;
896         unsigned long beg = from;
897         unsigned long end = from + size;
898         struct mm_struct *mm = vma->vm_mm;
899
900         phys_addr -= from;
901         dir = pgd_offset(mm, from);
902         flush_cache_range(vma, beg, end);
903         if (from >= end)
904                 BUG();
905
906         spin_lock(&mm->page_table_lock);
907         do {
908                 pmd_t *pmd = pmd_alloc(mm, dir, from);
909                 error = -ENOMEM;
910                 if (!pmd)
911                         break;
912                 error = remap_pmd_range(mm, pmd, from, end - from, phys_addr + from, prot);
913                 if (error)
914                         break;
915                 from = (from + PGDIR_SIZE) & PGDIR_MASK;
916                 dir++;
917         } while (from && (from < end));
918         flush_tlb_range(vma, beg, end);
919         spin_unlock(&mm->page_table_lock);
920         return error;
921 }
922
923 /*
924  * Establish a new mapping:
925  *  - flush the old one
926  *  - update the page tables
927  *  - inform the TLB about the new one
928  *
929  * We hold the mm semaphore for reading and vma->vm_mm->page_table_lock
930  */
931 static inline void establish_pte(struct vm_area_struct * vma, unsigned long address, pte_t *page_table, pte_t entry)
932 {
933         set_pte(page_table, entry);
934         flush_tlb_page(vma, address);
935         update_mmu_cache(vma, address, entry);
936 }
937
938 /*
939  * We hold the mm semaphore for reading and vma->vm_mm->page_table_lock
940  */
941 static inline void break_cow(struct vm_area_struct * vma, struct page * new_page, unsigned long address, 
942                 pte_t *page_table)
943 {
944         flush_page_to_ram(new_page);
945         flush_cache_page(vma, address);
946         establish_pte(vma, address, page_table, pte_mkwrite(pte_mkdirty(mk_pte(new_page, vma->vm_page_prot))));
947 }
948
949 /*
950  * This routine handles present pages, when users try to write
951  * to a shared page. It is done by copying the page to a new address
952  * and decrementing the shared-page counter for the old page.
953  *
954  * Goto-purists beware: the only reason for goto's here is that it results
955  * in better assembly code.. The "default" path will see no jumps at all.
956  *
957  * Note that this routine assumes that the protection checks have been
958  * done by the caller (the low-level page fault routine in most cases).
959  * Thus we can safely just mark it writable once we've done any necessary
960  * COW.
961  *
962  * We also mark the page dirty at this point even though the page will
963  * change only once the write actually happens. This avoids a few races,
964  * and potentially makes it more efficient.
965  *
966  * We hold the mm semaphore and the page_table_lock on entry and exit
967  * with the page_table_lock released.
968  */
969 static int do_wp_page(struct mm_struct *mm, struct vm_area_struct * vma,
970         unsigned long address, pte_t *page_table, pmd_t *pmd, pte_t pte)
971 {
972         struct page *old_page, *new_page;
973         unsigned long pfn = pte_pfn(pte);
974
975         if (!pfn_valid(pfn))
976                 goto bad_wp_page;
977         old_page = pfn_to_page(pfn);
978
979         if (!TestSetPageLocked(old_page)) {
980                 int reuse = can_share_swap_page(old_page);
981                 unlock_page(old_page);
982                 if (reuse) {
983                         flush_cache_page(vma, address);
984                         establish_pte(vma, address, page_table, pte_mkyoung(pte_mkdirty(pte_mkwrite(pte))));
985                         pte_unmap(page_table);
986                         spin_unlock(&mm->page_table_lock);
987                         return 1;       /* Minor fault */
988                 }
989         }
990         pte_unmap(page_table);
991
992         /*
993          * Ok, we need to copy. Oh, well..
994          */
995         page_cache_get(old_page);
996         spin_unlock(&mm->page_table_lock);
997
998         new_page = alloc_page(GFP_HIGHUSER);
999         if (!new_page)
1000                 goto no_mem;
1001         copy_cow_page(old_page,new_page,address);
1002
1003         /*
1004          * Re-check the pte - we dropped the lock
1005          */
1006         spin_lock(&mm->page_table_lock);
1007         page_table = pte_offset_map(pmd, address);
1008         if (pte_same(*page_table, pte)) {
1009                 if (PageReserved(old_page))
1010                         ++mm->rss;
1011                 break_cow(vma, new_page, address, page_table);
1012                 lru_cache_add(new_page);
1013
1014                 /* Free the old page.. */
1015                 new_page = old_page;
1016         }
1017         pte_unmap(page_table);
1018         spin_unlock(&mm->page_table_lock);
1019         page_cache_release(new_page);
1020         page_cache_release(old_page);
1021         return 1;       /* Minor fault */
1022
1023 bad_wp_page:
1024         pte_unmap(page_table);
1025         spin_unlock(&mm->page_table_lock);
1026         printk(KERN_ERR "do_wp_page: bogus page at address %08lx\n", address);
1027         return -1;
1028 no_mem:
1029         page_cache_release(old_page);
1030         return -1;
1031 }
1032
1033 static void vmtruncate_list(list_t *head, unsigned long pgoff)
1034 {
1035         unsigned long start, end, len, diff;
1036         struct vm_area_struct *vma;
1037         list_t *curr;
1038
1039         list_for_each(curr, head) {
1040                 vma = list_entry(curr, struct vm_area_struct, shared);
1041                 start = vma->vm_start;
1042                 end = vma->vm_end;
1043                 len = end - start;
1044
1045                 /* mapping wholly truncated? */
1046                 if (vma->vm_pgoff >= pgoff) {
1047                         zap_page_range(vma, start, len);
1048                         continue;
1049                 }
1050
1051                 /* mapping wholly unaffected? */
1052                 len = len >> PAGE_SHIFT;
1053                 diff = pgoff - vma->vm_pgoff;
1054                 if (diff >= len)
1055                         continue;
1056
1057                 /* Ok, partially affected.. */
1058                 start += diff << PAGE_SHIFT;
1059                 len = (len - diff) << PAGE_SHIFT;
1060                 zap_page_range(vma, start, len);
1061         }
1062 }
1063
1064 /*
1065  * Handle all mappings that got truncated by a "truncate()"
1066  * system call.
1067  *
1068  * NOTE! We have to be ready to update the memory sharing
1069  * between the file and the memory map for a potential last
1070  * incomplete page.  Ugly, but necessary.
1071  */
1072 int vmtruncate(struct inode * inode, loff_t offset)
1073 {
1074         unsigned long pgoff;
1075         struct address_space *mapping = inode->i_mapping;
1076         unsigned long limit;
1077
1078         if (inode->i_size < offset)
1079                 goto do_expand;
1080         inode->i_size = offset;
1081         spin_lock(&mapping->i_shared_lock);
1082         if (list_empty(&mapping->i_mmap) && list_empty(&mapping->i_mmap_shared))
1083                 goto out_unlock;
1084
1085         pgoff = (offset + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
1086         if (!list_empty(&mapping->i_mmap))
1087                 vmtruncate_list(&mapping->i_mmap, pgoff);
1088         if (!list_empty(&mapping->i_mmap_shared))
1089                 vmtruncate_list(&mapping->i_mmap_shared, pgoff);
1090
1091 out_unlock:
1092         spin_unlock(&mapping->i_shared_lock);
1093         truncate_inode_pages(mapping, offset);
1094         goto out_truncate;
1095
1096 do_expand:
1097         limit = current->rlim[RLIMIT_FSIZE].rlim_cur;
1098         if (limit != RLIM_INFINITY) {
1099                 if (inode->i_size >= limit) {
1100                         send_sig(SIGXFSZ, current, 0);
1101                         goto out;
1102                 }
1103                 if (offset > limit) {
1104                         send_sig(SIGXFSZ, current, 0);
1105                         offset = limit;
1106                 }
1107         }
1108         inode->i_size = offset;
1109
1110 out_truncate:
1111         if (inode->i_op && inode->i_op->truncate)
1112                 inode->i_op->truncate(inode);
1113 out:
1114         return 0;
1115 }
1116
1117 /* 
1118  * Primitive swap readahead code. We simply read an aligned block of
1119  * (1 << page_cluster) entries in the swap area. This method is chosen
1120  * because it doesn't cost us any seek time.  We also make sure to queue
1121  * the 'original' request together with the readahead ones...  
1122  */
1123 void swapin_readahead(swp_entry_t entry)
1124 {
1125         int i, num;
1126         struct page *new_page;
1127         unsigned long offset;
1128
1129         /*
1130          * Get the number of handles we should do readahead io to.
1131          */
1132         num = valid_swaphandles(entry, &offset);
1133         for (i = 0; i < num; offset++, i++) {
1134                 /* Ok, do the async read-ahead now */
1135                 new_page = read_swap_cache_async(SWP_ENTRY(SWP_TYPE(entry), offset));
1136                 if (!new_page)
1137                         break;
1138                 page_cache_release(new_page);
1139         }
1140         return;
1141 }
1142
1143 /*
1144  * We hold the mm semaphore and the page_table_lock on entry and
1145  * should release the pagetable lock on exit..
1146  */
1147 static int do_swap_page(struct mm_struct * mm,
1148         struct vm_area_struct * vma, unsigned long address,
1149         pte_t *page_table, pmd_t *pmd, pte_t orig_pte, int write_access)
1150 {
1151         struct page *page;
1152         swp_entry_t entry = pte_to_swp_entry(orig_pte);
1153         pte_t pte;
1154         int ret = 1;
1155
1156         pte_unmap(page_table);
1157         spin_unlock(&mm->page_table_lock);
1158         page = lookup_swap_cache(entry);
1159         if (!page) {
1160                 swapin_readahead(entry);
1161                 page = read_swap_cache_async(entry);
1162                 if (!page) {
1163                         /*
1164                          * Back out if somebody else faulted in this pte while
1165                          * we released the page table lock.
1166                          */
1167                         int retval;
1168                         spin_lock(&mm->page_table_lock);
1169                         page_table = pte_offset_map(pmd, address);
1170                         retval = pte_same(*page_table, orig_pte) ? -1 : 1;
1171                         pte_unmap(page_table);
1172                         spin_unlock(&mm->page_table_lock);
1173                         return retval;
1174                 }
1175
1176                 /* Had to read the page from swap area: Major fault */
1177                 ret = 2;
1178         }
1179
1180         lock_page(page);
1181
1182         /*
1183          * Back out if somebody else faulted in this pte while we
1184          * released the page table lock.
1185          */
1186         spin_lock(&mm->page_table_lock);
1187         page_table = pte_offset_map(pmd, address);
1188         if (!pte_same(*page_table, orig_pte)) {
1189                 pte_unmap(page_table);
1190                 spin_unlock(&mm->page_table_lock);
1191                 unlock_page(page);
1192                 page_cache_release(page);
1193                 return 1;
1194         }
1195
1196         /* The page isn't present yet, go ahead with the fault. */
1197                 
1198         swap_free(entry);
1199         if (vm_swap_full())
1200                 remove_exclusive_swap_page(page);
1201
1202         mm->rss++;
1203         pte = mk_pte(page, vma->vm_page_prot);
1204         if (write_access && can_share_swap_page(page))
1205                 pte = pte_mkdirty(pte_mkwrite(pte));
1206         unlock_page(page);
1207
1208         flush_page_to_ram(page);
1209         flush_icache_page(vma, page);
1210         set_pte(page_table, pte);
1211
1212         /* No need to invalidate - it was non-present before */
1213         update_mmu_cache(vma, address, pte);
1214         pte_unmap(page_table);
1215         spin_unlock(&mm->page_table_lock);
1216         return ret;
1217 }
1218
1219 /*
1220  * We are called with the MM semaphore and page_table_lock
1221  * spinlock held to protect against concurrent faults in
1222  * multithreaded programs. 
1223  */
1224 static int do_anonymous_page(struct mm_struct * mm, struct vm_area_struct * vma, pte_t *page_table, pmd_t *pmd, int write_access, unsigned long addr)
1225 {
1226         pte_t entry;
1227
1228         /* Read-only mapping of ZERO_PAGE. */
1229         entry = pte_wrprotect(mk_pte(ZERO_PAGE(addr), vma->vm_page_prot));
1230
1231         /* ..except if it's a write access */
1232         if (write_access) {
1233                 struct page *page;
1234
1235                 /* Allocate our own private page. */
1236                 pte_unmap(page_table);
1237                 spin_unlock(&mm->page_table_lock);
1238
1239                 page = alloc_page(GFP_HIGHUSER);
1240                 if (!page)
1241                         goto no_mem;
1242                 clear_user_highpage(page, addr);
1243
1244                 spin_lock(&mm->page_table_lock);
1245                 page_table = pte_offset_map(pmd, addr);
1246
1247                 if (!pte_none(*page_table)) {
1248                         pte_unmap(page_table);
1249                         page_cache_release(page);
1250                         spin_unlock(&mm->page_table_lock);
1251                         return 1;
1252                 }
1253                 mm->rss++;
1254                 flush_page_to_ram(page);
1255                 entry = pte_mkwrite(pte_mkdirty(mk_pte(page, vma->vm_page_prot)));
1256                 lru_cache_add(page);
1257         }
1258
1259         set_pte(page_table, entry);
1260         pte_unmap(page_table);
1261
1262         /* No need to invalidate - it was non-present before */
1263         update_mmu_cache(vma, addr, entry);
1264         spin_unlock(&mm->page_table_lock);
1265         return 1;       /* Minor fault */
1266
1267 no_mem:
1268         return -1;
1269 }
1270
1271 /*
1272  * do_no_page() tries to create a new page mapping. It aggressively
1273  * tries to share with existing pages, but makes a separate copy if
1274  * the "write_access" parameter is true in order to avoid the next
1275  * page fault.
1276  *
1277  * As this is called only for pages that do not currently exist, we
1278  * do not need to flush old virtual caches or the TLB.
1279  *
1280  * This is called with the MM semaphore held and the page table
1281  * spinlock held. Exit with the spinlock released.
1282  */
1283 static int do_no_page(struct mm_struct * mm, struct vm_area_struct * vma,
1284         unsigned long address, int write_access, pte_t *page_table, pmd_t *pmd)
1285 {
1286         struct page * new_page;
1287         pte_t entry;
1288
1289         if (!vma->vm_ops || !vma->vm_ops->nopage)
1290                 return do_anonymous_page(mm, vma, page_table, pmd, write_access, address);
1291         pte_unmap(page_table);
1292         spin_unlock(&mm->page_table_lock);
1293
1294         new_page = vma->vm_ops->nopage(vma, address & PAGE_MASK, 0);
1295
1296         if (new_page == NULL)   /* no page was available -- SIGBUS */
1297                 return 0;
1298         if (new_page == NOPAGE_OOM)
1299                 return -1;
1300
1301         /*
1302          * Should we do an early C-O-W break?
1303          */
1304         if (write_access && !(vma->vm_flags & VM_SHARED)) {
1305                 struct page * page = alloc_page(GFP_HIGHUSER);
1306                 if (!page) {
1307                         page_cache_release(new_page);
1308                         return -1;
1309                 }
1310                 copy_user_highpage(page, new_page, address);
1311                 page_cache_release(new_page);
1312                 lru_cache_add(page);
1313                 new_page = page;
1314         }
1315
1316         spin_lock(&mm->page_table_lock);
1317         page_table = pte_offset_map(pmd, address);
1318
1319         /*
1320          * This silly early PAGE_DIRTY setting removes a race
1321          * due to the bad i386 page protection. But it's valid
1322          * for other architectures too.
1323          *
1324          * Note that if write_access is true, we either now have
1325          * an exclusive copy of the page, or this is a shared mapping,
1326          * so we can make it writable and dirty to avoid having to
1327          * handle that later.
1328          */
1329         /* Only go through if we didn't race with anybody else... */
1330         if (pte_none(*page_table)) {
1331                 ++mm->rss;
1332                 flush_page_to_ram(new_page);
1333                 flush_icache_page(vma, new_page);
1334                 entry = mk_pte(new_page, vma->vm_page_prot);
1335                 if (write_access)
1336                         entry = pte_mkwrite(pte_mkdirty(entry));
1337                 set_pte(page_table, entry);
1338                 pte_unmap(page_table);
1339         } else {
1340                 /* One of our sibling threads was faster, back out. */
1341                 pte_unmap(page_table);
1342                 page_cache_release(new_page);
1343                 spin_unlock(&mm->page_table_lock);
1344                 return 1;
1345         }
1346
1347         /* no need to invalidate: a not-present page shouldn't be cached */
1348         update_mmu_cache(vma, address, entry);
1349         spin_unlock(&mm->page_table_lock);
1350         return 2;       /* Major fault */
1351 }
1352
1353 /*
1354  * These routines also need to handle stuff like marking pages dirty
1355  * and/or accessed for architectures that don't do it in hardware (most
1356  * RISC architectures).  The early dirtying is also good on the i386.
1357  *
1358  * There is also a hook called "update_mmu_cache()" that architectures
1359  * with external mmu caches can use to update those (ie the Sparc or
1360  * PowerPC hashed page tables that act as extended TLBs).
1361  *
1362  * Note the "page_table_lock". It is to protect against kswapd removing
1363  * pages from under us. Note that kswapd only ever _removes_ pages, never
1364  * adds them. As such, once we have noticed that the page is not present,
1365  * we can drop the lock early.
1366  *
1367  * The adding of pages is protected by the MM semaphore (which we hold),
1368  * so we don't need to worry about a page being suddenly been added into
1369  * our VM.
1370  *
1371  * We enter with the pagetable spinlock held, we are supposed to
1372  * release it when done.
1373  */
1374 static inline int handle_pte_fault(struct mm_struct *mm,
1375         struct vm_area_struct * vma, unsigned long address,
1376         int write_access, pte_t *pte, pmd_t *pmd)
1377 {
1378         pte_t entry;
1379
1380         entry = *pte;
1381         if (!pte_present(entry)) {
1382                 /*
1383                  * If it truly wasn't present, we know that kswapd
1384                  * and the PTE updates will not touch it later. So
1385                  * drop the lock.
1386                  */
1387                 if (pte_none(entry))
1388                         return do_no_page(mm, vma, address, write_access, pte, pmd);
1389                 return do_swap_page(mm, vma, address, pte, pmd, entry, write_access);
1390         }
1391
1392         if (write_access) {
1393                 if (!pte_write(entry))
1394                         return do_wp_page(mm, vma, address, pte, pmd, entry);
1395
1396                 entry = pte_mkdirty(entry);
1397         }
1398         entry = pte_mkyoung(entry);
1399         establish_pte(vma, address, pte, entry);
1400         pte_unmap(pte);
1401         spin_unlock(&mm->page_table_lock);
1402         return 1;
1403 }
1404
1405 /*
1406  * By the time we get here, we already hold the mm semaphore
1407  */
1408 int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct * vma,
1409         unsigned long address, int write_access)
1410 {
1411         pgd_t *pgd;
1412         pmd_t *pmd;
1413
1414         current->state = TASK_RUNNING;
1415         pgd = pgd_offset(mm, address);
1416
1417         /*
1418          * We need the page table lock to synchronize with kswapd
1419          * and the SMP-safe atomic PTE updates.
1420          */
1421         spin_lock(&mm->page_table_lock);
1422         pmd = pmd_alloc(mm, pgd, address);
1423
1424         if (pmd) {
1425                 pte_t * pte = pte_alloc_map(mm, pmd, address);
1426                 if (pte)
1427                         return handle_pte_fault(mm, vma, address, write_access, pte, pmd);
1428         }
1429         spin_unlock(&mm->page_table_lock);
1430         return -1;
1431 }
1432
1433 /*
1434  * Allocate page middle directory.
1435  *
1436  * We've already handled the fast-path in-line, and we own the
1437  * page table lock.
1438  *
1439  * On a two-level page table, this ends up actually being entirely
1440  * optimized away.
1441  */
1442 pmd_t *__pmd_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
1443 {
1444         pmd_t *new;
1445
1446         spin_unlock(&mm->page_table_lock);
1447         new = pmd_alloc_one(mm, address);
1448         spin_lock(&mm->page_table_lock);
1449         if (!new)
1450                 return NULL;
1451
1452         /*
1453          * Because we dropped the lock, we should re-check the
1454          * entry, as somebody else could have populated it..
1455          */
1456         if (pgd_present(*pgd)) {
1457                 pmd_free(new);
1458                 goto out;
1459         }
1460         pgd_populate(mm, pgd, new);
1461 out:
1462         return pmd_offset(pgd, address);
1463 }
1464
1465 int make_pages_present(unsigned long addr, unsigned long end)
1466 {
1467         int ret, len, write;
1468         struct vm_area_struct * vma;
1469
1470         vma = find_vma(current->mm, addr);
1471         write = (vma->vm_flags & VM_WRITE) != 0;
1472         if (addr >= end)
1473                 BUG();
1474         if (end > vma->vm_end)
1475                 BUG();
1476         len = (end+PAGE_SIZE-1)/PAGE_SIZE-addr/PAGE_SIZE;
1477         ret = get_user_pages(current, current->mm, addr,
1478                         len, write, 0, NULL, NULL);
1479         return ret == len ? 0 : -1;
1480 }
1481
1482 /* 
1483  * Map a vmalloc()-space virtual address to the physical page.
1484  */
1485 struct page * vmalloc_to_page(void * vmalloc_addr)
1486 {
1487         unsigned long addr = (unsigned long) vmalloc_addr;
1488         struct page *page = NULL;
1489         pgd_t *pgd = pgd_offset_k(addr);
1490         pmd_t *pmd;
1491         pte_t *ptep, pte;
1492   
1493         if (!pgd_none(*pgd)) {
1494                 pmd = pmd_offset(pgd, addr);
1495                 if (!pmd_none(*pmd)) {
1496                         preempt_disable();
1497                         ptep = pte_offset_map(pmd, addr);
1498                         pte = *ptep;
1499                         if (pte_present(pte))
1500                                 page = pte_page(pte);
1501                         pte_unmap(ptep);
1502                         preempt_enable();
1503                 }
1504         }
1505         return page;
1506 }