mmap.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:31k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * linux/mm/mmap.c
  3.  *
  4.  * Written by obz.
  5.  */
  6. #include <linux/slab.h>
  7. #include <linux/shm.h>
  8. #include <linux/mman.h>
  9. #include <linux/pagemap.h>
  10. #include <linux/swap.h>
  11. #include <linux/swapctl.h>
  12. #include <linux/smp_lock.h>
  13. #include <linux/init.h>
  14. #include <linux/file.h>
  15. #include <linux/fs.h>
  16. #include <linux/personality.h>
  17. #include <asm/uaccess.h>
  18. #include <asm/pgalloc.h>
  19. /*
  20.  * WARNING: the debugging will use recursive algorithms so never enable this
  21.  * unless you know what you are doing.
  22.  */
  23. #undef DEBUG_MM_RB
  24. /* description of effects of mapping type and prot in current implementation.
  25.  * this is due to the limited x86 page protection hardware.  The expected
  26.  * behavior is in parens:
  27.  *
  28.  * map_type prot
  29.  * PROT_NONE PROT_READ PROT_WRITE PROT_EXEC
  30.  * MAP_SHARED r: (no) no r: (yes) yes r: (no) yes r: (no) yes
  31.  * w: (no) no w: (no) no w: (yes) yes w: (no) no
  32.  * x: (no) no x: (no) yes x: (no) yes x: (yes) yes
  33.  *
  34.  * MAP_PRIVATE r: (no) no r: (yes) yes r: (no) yes r: (no) yes
  35.  * w: (no) no w: (no) no w: (copy) copy w: (no) no
  36.  * x: (no) no x: (no) yes x: (no) yes x: (yes) yes
  37.  *
  38.  */
  39. pgprot_t protection_map[16] = {
  40. __P000, __P001, __P010, __P011, __P100, __P101, __P110, __P111,
  41. __S000, __S001, __S010, __S011, __S100, __S101, __S110, __S111
  42. };
  43. int sysctl_overcommit_memory;
  44. int max_map_count = DEFAULT_MAX_MAP_COUNT;
  45. /* Check that a process has enough memory to allocate a
  46.  * new virtual mapping.
  47.  */
  48. int vm_enough_memory(long pages)
  49. {
  50. /* Stupid algorithm to decide if we have enough memory: while
  51.  * simple, it hopefully works in most obvious cases.. Easy to
  52.  * fool it, but this should catch most mistakes.
  53.  */
  54. /* 23/11/98 NJC: Somewhat less stupid version of algorithm,
  55.  * which tries to do "TheRightThing".  Instead of using half of
  56.  * (buffers+cache), use the minimum values.  Allow an extra 2%
  57.  * of num_physpages for safety margin.
  58.  */
  59. unsigned long free;
  60.         /* Sometimes we want to use more memory than we have. */
  61. if (sysctl_overcommit_memory)
  62.     return 1;
  63. /* The page cache contains buffer pages these days.. */
  64. free = atomic_read(&page_cache_size);
  65. free += nr_free_pages();
  66. free += nr_swap_pages;
  67. /*
  68.  * This double-counts: the nrpages are both in the page-cache
  69.  * and in the swapper space. At the same time, this compensates
  70.  * for the swap-space over-allocation (ie "nr_swap_pages" being
  71.  * too small.
  72.  */
  73. free += swapper_space.nrpages;
  74. /*
  75.  * The code below doesn't account for free space in the inode
  76.  * and dentry slab cache, slab cache fragmentation, inodes and
  77.  * dentries which will become freeable under VM load, etc.
  78.  * Lets just hope all these (complex) factors balance out...
  79.  */
  80. free += (dentry_stat.nr_unused * sizeof(struct dentry)) >> PAGE_SHIFT;
  81. free += (inodes_stat.nr_unused * sizeof(struct inode)) >> PAGE_SHIFT;
  82. return free > pages;
  83. }
  84. /* Remove one vm structure from the inode's i_mapping address space. */
  85. static inline void __remove_shared_vm_struct(struct vm_area_struct *vma)
  86. {
  87. struct file * file = vma->vm_file;
  88. if (file) {
  89. struct inode *inode = file->f_dentry->d_inode;
  90. if (vma->vm_flags & VM_DENYWRITE)
  91. atomic_inc(&inode->i_writecount);
  92. if(vma->vm_next_share)
  93. vma->vm_next_share->vm_pprev_share = vma->vm_pprev_share;
  94. *vma->vm_pprev_share = vma->vm_next_share;
  95. }
  96. }
  97. static inline void remove_shared_vm_struct(struct vm_area_struct *vma)
  98. {
  99. lock_vma_mappings(vma);
  100. __remove_shared_vm_struct(vma);
  101. unlock_vma_mappings(vma);
  102. }
  103. void lock_vma_mappings(struct vm_area_struct *vma)
  104. {
  105. struct address_space *mapping;
  106. mapping = NULL;
  107. if (vma->vm_file)
  108. mapping = vma->vm_file->f_dentry->d_inode->i_mapping;
  109. if (mapping)
  110. spin_lock(&mapping->i_shared_lock);
  111. }
  112. void unlock_vma_mappings(struct vm_area_struct *vma)
  113. {
  114. struct address_space *mapping;
  115. mapping = NULL;
  116. if (vma->vm_file)
  117. mapping = vma->vm_file->f_dentry->d_inode->i_mapping;
  118. if (mapping)
  119. spin_unlock(&mapping->i_shared_lock);
  120. }
  121. /*
  122.  *  sys_brk() for the most part doesn't need the global kernel
  123.  *  lock, except when an application is doing something nasty
  124.  *  like trying to un-brk an area that has already been mapped
  125.  *  to a regular file.  in this case, the unmapping will need
  126.  *  to invoke file system routines that need the global lock.
  127.  */
  128. asmlinkage unsigned long sys_brk(unsigned long brk)
  129. {
  130. unsigned long rlim, retval;
  131. unsigned long newbrk, oldbrk;
  132. struct mm_struct *mm = current->mm;
  133. down_write(&mm->mmap_sem);
  134. if (brk < mm->end_code)
  135. goto out;
  136. newbrk = PAGE_ALIGN(brk);
  137. oldbrk = PAGE_ALIGN(mm->brk);
  138. if (oldbrk == newbrk)
  139. goto set_brk;
  140. /* Always allow shrinking brk. */
  141. if (brk <= mm->brk) {
  142. if (!do_munmap(mm, newbrk, oldbrk-newbrk))
  143. goto set_brk;
  144. goto out;
  145. }
  146. /* Check against rlimit.. */
  147. rlim = current->rlim[RLIMIT_DATA].rlim_cur;
  148. if (rlim < RLIM_INFINITY && brk - mm->start_data > rlim)
  149. goto out;
  150. /* Check against existing mmap mappings. */
  151. if (find_vma_intersection(mm, oldbrk, newbrk+PAGE_SIZE))
  152. goto out;
  153. /* Check if we have enough memory.. */
  154. if (!vm_enough_memory((newbrk-oldbrk) >> PAGE_SHIFT))
  155. goto out;
  156. /* Ok, looks good - let it rip. */
  157. if (do_brk(oldbrk, newbrk-oldbrk) != oldbrk)
  158. goto out;
  159. set_brk:
  160. mm->brk = brk;
  161. out:
  162. retval = mm->brk;
  163. up_write(&mm->mmap_sem);
  164. return retval;
  165. }
  166. /* Combine the mmap "prot" and "flags" argument into one "vm_flags" used
  167.  * internally. Essentially, translate the "PROT_xxx" and "MAP_xxx" bits
  168.  * into "VM_xxx".
  169.  */
  170. static inline unsigned long calc_vm_flags(unsigned long prot, unsigned long flags)
  171. {
  172. #define _trans(x,bit1,bit2) 
  173. ((bit1==bit2)?(x&bit1):(x&bit1)?bit2:0)
  174. unsigned long prot_bits, flag_bits;
  175. prot_bits =
  176. _trans(prot, PROT_READ, VM_READ) |
  177. _trans(prot, PROT_WRITE, VM_WRITE) |
  178. _trans(prot, PROT_EXEC, VM_EXEC);
  179. flag_bits =
  180. _trans(flags, MAP_GROWSDOWN, VM_GROWSDOWN) |
  181. _trans(flags, MAP_DENYWRITE, VM_DENYWRITE) |
  182. _trans(flags, MAP_EXECUTABLE, VM_EXECUTABLE);
  183. return prot_bits | flag_bits;
  184. #undef _trans
  185. }
  186. #ifdef DEBUG_MM_RB
  187. static int browse_rb(rb_node_t * rb_node) {
  188. int i = 0;
  189. if (rb_node) {
  190. i++;
  191. i += browse_rb(rb_node->rb_left);
  192. i += browse_rb(rb_node->rb_right);
  193. }
  194. return i;
  195. }
  196. static void validate_mm(struct mm_struct * mm) {
  197. int bug = 0;
  198. int i = 0;
  199. struct vm_area_struct * tmp = mm->mmap;
  200. while (tmp) {
  201. tmp = tmp->vm_next;
  202. i++;
  203. }
  204. if (i != mm->map_count)
  205. printk("map_count %d vm_next %dn", mm->map_count, i), bug = 1;
  206. i = browse_rb(mm->mm_rb.rb_node);
  207. if (i != mm->map_count)
  208. printk("map_count %d rb %dn", mm->map_count, i), bug = 1;
  209. if (bug)
  210. BUG();
  211. }
  212. #else
  213. #define validate_mm(mm) do { } while (0)
  214. #endif
  215. static struct vm_area_struct * find_vma_prepare(struct mm_struct * mm, unsigned long addr,
  216. struct vm_area_struct ** pprev,
  217. rb_node_t *** rb_link, rb_node_t ** rb_parent)
  218. {
  219. struct vm_area_struct * vma;
  220. rb_node_t ** __rb_link, * __rb_parent, * rb_prev;
  221. __rb_link = &mm->mm_rb.rb_node;
  222. rb_prev = __rb_parent = NULL;
  223. vma = NULL;
  224. while (*__rb_link) {
  225. struct vm_area_struct *vma_tmp;
  226. __rb_parent = *__rb_link;
  227. vma_tmp = rb_entry(__rb_parent, struct vm_area_struct, vm_rb);
  228. if (vma_tmp->vm_end > addr) {
  229. vma = vma_tmp;
  230. if (vma_tmp->vm_start <= addr)
  231. return vma;
  232. __rb_link = &__rb_parent->rb_left;
  233. } else {
  234. rb_prev = __rb_parent;
  235. __rb_link = &__rb_parent->rb_right;
  236. }
  237. }
  238. *pprev = NULL;
  239. if (rb_prev)
  240. *pprev = rb_entry(rb_prev, struct vm_area_struct, vm_rb);
  241. *rb_link = __rb_link;
  242. *rb_parent = __rb_parent;
  243. return vma;
  244. }
  245. static inline void __vma_link_list(struct mm_struct * mm, struct vm_area_struct * vma, struct vm_area_struct * prev,
  246.    rb_node_t * rb_parent)
  247. {
  248. if (prev) {
  249. vma->vm_next = prev->vm_next;
  250. prev->vm_next = vma;
  251. } else {
  252. mm->mmap = vma;
  253. if (rb_parent)
  254. vma->vm_next = rb_entry(rb_parent, struct vm_area_struct, vm_rb);
  255. else
  256. vma->vm_next = NULL;
  257. }
  258. }
  259. static inline void __vma_link_rb(struct mm_struct * mm, struct vm_area_struct * vma,
  260.  rb_node_t ** rb_link, rb_node_t * rb_parent)
  261. {
  262. rb_link_node(&vma->vm_rb, rb_parent, rb_link);
  263. rb_insert_color(&vma->vm_rb, &mm->mm_rb);
  264. }
  265. static inline void __vma_link_file(struct vm_area_struct * vma)
  266. {
  267. struct file * file;
  268. file = vma->vm_file;
  269. if (file) {
  270. struct inode * inode = file->f_dentry->d_inode;
  271. struct address_space *mapping = inode->i_mapping;
  272. struct vm_area_struct **head;
  273. if (vma->vm_flags & VM_DENYWRITE)
  274. atomic_dec(&inode->i_writecount);
  275. head = &mapping->i_mmap;
  276. if (vma->vm_flags & VM_SHARED)
  277. head = &mapping->i_mmap_shared;
  278.       
  279. /* insert vma into inode's share list */
  280. if((vma->vm_next_share = *head) != NULL)
  281. (*head)->vm_pprev_share = &vma->vm_next_share;
  282. *head = vma;
  283. vma->vm_pprev_share = head;
  284. }
  285. }
  286. static void __vma_link(struct mm_struct * mm, struct vm_area_struct * vma,  struct vm_area_struct * prev,
  287.        rb_node_t ** rb_link, rb_node_t * rb_parent)
  288. {
  289. __vma_link_list(mm, vma, prev, rb_parent);
  290. __vma_link_rb(mm, vma, rb_link, rb_parent);
  291. __vma_link_file(vma);
  292. }
  293. static inline void vma_link(struct mm_struct * mm, struct vm_area_struct * vma, struct vm_area_struct * prev,
  294.     rb_node_t ** rb_link, rb_node_t * rb_parent)
  295. {
  296. lock_vma_mappings(vma);
  297. spin_lock(&mm->page_table_lock);
  298. __vma_link(mm, vma, prev, rb_link, rb_parent);
  299. spin_unlock(&mm->page_table_lock);
  300. unlock_vma_mappings(vma);
  301. mm->map_count++;
  302. validate_mm(mm);
  303. }
  304. static int vma_merge(struct mm_struct * mm, struct vm_area_struct * prev,
  305.      rb_node_t * rb_parent, unsigned long addr, unsigned long end, unsigned long vm_flags)
  306. {
  307. spinlock_t * lock = &mm->page_table_lock;
  308. if (!prev) {
  309. prev = rb_entry(rb_parent, struct vm_area_struct, vm_rb);
  310. goto merge_next;
  311. }
  312. if (prev->vm_end == addr && can_vma_merge(prev, vm_flags)) {
  313. struct vm_area_struct * next;
  314. spin_lock(lock);
  315. prev->vm_end = end;
  316. next = prev->vm_next;
  317. if (next && prev->vm_end == next->vm_start && can_vma_merge(next, vm_flags)) {
  318. prev->vm_end = next->vm_end;
  319. __vma_unlink(mm, next, prev);
  320. spin_unlock(lock);
  321. mm->map_count--;
  322. kmem_cache_free(vm_area_cachep, next);
  323. return 1;
  324. }
  325. spin_unlock(lock);
  326. return 1;
  327. }
  328. prev = prev->vm_next;
  329. if (prev) {
  330.  merge_next:
  331. if (!can_vma_merge(prev, vm_flags))
  332. return 0;
  333. if (end == prev->vm_start) {
  334. spin_lock(lock);
  335. prev->vm_start = addr;
  336. spin_unlock(lock);
  337. return 1;
  338. }
  339. }
  340. return 0;
  341. }
  342. unsigned long do_mmap_pgoff(struct file * file, unsigned long addr, unsigned long len,
  343. unsigned long prot, unsigned long flags, unsigned long pgoff)
  344. {
  345. struct mm_struct * mm = current->mm;
  346. struct vm_area_struct * vma, * prev;
  347. unsigned int vm_flags;
  348. int correct_wcount = 0;
  349. int error;
  350. rb_node_t ** rb_link, * rb_parent;
  351. if (file && (!file->f_op || !file->f_op->mmap))
  352. return -ENODEV;
  353. if ((len = PAGE_ALIGN(len)) == 0)
  354. return addr;
  355. if (len > TASK_SIZE)
  356. return -EINVAL;
  357. /* offset overflow? */
  358. if ((pgoff + (len >> PAGE_SHIFT)) < pgoff)
  359. return -EINVAL;
  360. /* Too many mappings? */
  361. if (mm->map_count > max_map_count)
  362. return -ENOMEM;
  363. /* Obtain the address to map to. we verify (or select) it and ensure
  364.  * that it represents a valid section of the address space.
  365.  */
  366. addr = get_unmapped_area(file, addr, len, pgoff, flags);
  367. if (addr & ~PAGE_MASK)
  368. return addr;
  369. /* Do simple checking here so the lower-level routines won't have
  370.  * to. we assume access permissions have been handled by the open
  371.  * of the memory object, so we don't do any here.
  372.  */
  373. vm_flags = calc_vm_flags(prot,flags) | mm->def_flags | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC;
  374. /* mlock MCL_FUTURE? */
  375. if (vm_flags & VM_LOCKED) {
  376. unsigned long locked = mm->locked_vm << PAGE_SHIFT;
  377. locked += len;
  378. if (locked > current->rlim[RLIMIT_MEMLOCK].rlim_cur)
  379. return -EAGAIN;
  380. }
  381. if (file) {
  382. switch (flags & MAP_TYPE) {
  383. case MAP_SHARED:
  384. if ((prot & PROT_WRITE) && !(file->f_mode & FMODE_WRITE))
  385. return -EACCES;
  386. /* Make sure we don't allow writing to an append-only file.. */
  387. if (IS_APPEND(file->f_dentry->d_inode) && (file->f_mode & FMODE_WRITE))
  388. return -EACCES;
  389. /* make sure there are no mandatory locks on the file. */
  390. if (locks_verify_locked(file->f_dentry->d_inode))
  391. return -EAGAIN;
  392. vm_flags |= VM_SHARED | VM_MAYSHARE;
  393. if (!(file->f_mode & FMODE_WRITE))
  394. vm_flags &= ~(VM_MAYWRITE | VM_SHARED);
  395. /* fall through */
  396. case MAP_PRIVATE:
  397. if (!(file->f_mode & FMODE_READ))
  398. return -EACCES;
  399. break;
  400. default:
  401. return -EINVAL;
  402. }
  403. } else {
  404. vm_flags |= VM_SHARED | VM_MAYSHARE;
  405. switch (flags & MAP_TYPE) {
  406. default:
  407. return -EINVAL;
  408. case MAP_PRIVATE:
  409. vm_flags &= ~(VM_SHARED | VM_MAYSHARE);
  410. /* fall through */
  411. case MAP_SHARED:
  412. break;
  413. }
  414. }
  415. /* Clear old maps */
  416. munmap_back:
  417. vma = find_vma_prepare(mm, addr, &prev, &rb_link, &rb_parent);
  418. if (vma && vma->vm_start < addr + len) {
  419. if (do_munmap(mm, addr, len))
  420. return -ENOMEM;
  421. goto munmap_back;
  422. }
  423. /* Check against address space limit. */
  424. if ((mm->total_vm << PAGE_SHIFT) + len
  425.     > current->rlim[RLIMIT_AS].rlim_cur)
  426. return -ENOMEM;
  427. /* Private writable mapping? Check memory availability.. */
  428. if ((vm_flags & (VM_SHARED | VM_WRITE)) == VM_WRITE &&
  429.     !(flags & MAP_NORESERVE)  &&
  430.     !vm_enough_memory(len >> PAGE_SHIFT))
  431. return -ENOMEM;
  432. /* Can we just expand an old anonymous mapping? */
  433. if (!file && !(vm_flags & VM_SHARED) && rb_parent)
  434. if (vma_merge(mm, prev, rb_parent, addr, addr + len, vm_flags))
  435. goto out;
  436. /* Determine the object being mapped and call the appropriate
  437.  * specific mapper. the address has already been validated, but
  438.  * not unmapped, but the maps are removed from the list.
  439.  */
  440. vma = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
  441. if (!vma)
  442. return -ENOMEM;
  443. vma->vm_mm = mm;
  444. vma->vm_start = addr;
  445. vma->vm_end = addr + len;
  446. vma->vm_flags = vm_flags;
  447. vma->vm_page_prot = protection_map[vm_flags & 0x0f];
  448. vma->vm_ops = NULL;
  449. vma->vm_pgoff = pgoff;
  450. vma->vm_file = NULL;
  451. vma->vm_private_data = NULL;
  452. vma->vm_raend = 0;
  453. if (file) {
  454. error = -EINVAL;
  455. if (vm_flags & (VM_GROWSDOWN|VM_GROWSUP))
  456. goto free_vma;
  457. if (vm_flags & VM_DENYWRITE) {
  458. error = deny_write_access(file);
  459. if (error)
  460. goto free_vma;
  461. correct_wcount = 1;
  462. }
  463. vma->vm_file = file;
  464. get_file(file);
  465. error = file->f_op->mmap(file, vma);
  466. if (error)
  467. goto unmap_and_free_vma;
  468. } else if (flags & MAP_SHARED) {
  469. error = shmem_zero_setup(vma);
  470. if (error)
  471. goto free_vma;
  472. }
  473. /* Can addr have changed??
  474.  *
  475.  * Answer: Yes, several device drivers can do it in their
  476.  *         f_op->mmap method. -DaveM
  477.  */
  478. if (addr != vma->vm_start) {
  479. /*
  480.  * It is a bit too late to pretend changing the virtual
  481.  * area of the mapping, we just corrupted userspace
  482.  * in the do_munmap, so FIXME (not in 2.4 to avoid breaking
  483.  * the driver API).
  484.  */
  485. struct vm_area_struct * stale_vma;
  486. /* Since addr changed, we rely on the mmap op to prevent 
  487.  * collisions with existing vmas and just use find_vma_prepare 
  488.  * to update the tree pointers.
  489.  */
  490. addr = vma->vm_start;
  491. stale_vma = find_vma_prepare(mm, addr, &prev,
  492. &rb_link, &rb_parent);
  493. /*
  494.  * Make sure the lowlevel driver did its job right.
  495.  */
  496. if (unlikely(stale_vma && stale_vma->vm_start < vma->vm_end)) {
  497. printk(KERN_ERR "buggy mmap operation: [<%p>]n",
  498. file ? file->f_op->mmap : NULL);
  499. BUG();
  500. }
  501. }
  502. vma_link(mm, vma, prev, rb_link, rb_parent);
  503. if (correct_wcount)
  504. atomic_inc(&file->f_dentry->d_inode->i_writecount);
  505. out:
  506. mm->total_vm += len >> PAGE_SHIFT;
  507. if (vm_flags & VM_LOCKED) {
  508. mm->locked_vm += len >> PAGE_SHIFT;
  509. make_pages_present(addr, addr + len);
  510. }
  511. return addr;
  512. unmap_and_free_vma:
  513. if (correct_wcount)
  514. atomic_inc(&file->f_dentry->d_inode->i_writecount);
  515. vma->vm_file = NULL;
  516. fput(file);
  517. /* Undo any partial mapping done by a device driver. */
  518. zap_page_range(mm, vma->vm_start, vma->vm_end - vma->vm_start);
  519. free_vma:
  520. kmem_cache_free(vm_area_cachep, vma);
  521. return error;
  522. }
  523. /* Get an address range which is currently unmapped.
  524.  * For shmat() with addr=0.
  525.  *
  526.  * Ugly calling convention alert:
  527.  * Return value with the low bits set means error value,
  528.  * ie
  529.  * if (ret & ~PAGE_MASK)
  530.  * error = ret;
  531.  *
  532.  * This function "knows" that -ENOMEM has the bits set.
  533.  */
  534. #ifndef HAVE_ARCH_UNMAPPED_AREA
  535. static inline unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags)
  536. {
  537. struct vm_area_struct *vma;
  538. if (len > TASK_SIZE)
  539. return -ENOMEM;
  540. if (addr) {
  541. addr = PAGE_ALIGN(addr);
  542. vma = find_vma(current->mm, addr);
  543. if (TASK_SIZE - len >= addr &&
  544.     (!vma || addr + len <= vma->vm_start))
  545. return addr;
  546. }
  547. addr = PAGE_ALIGN(TASK_UNMAPPED_BASE);
  548. for (vma = find_vma(current->mm, addr); ; vma = vma->vm_next) {
  549. /* At this point:  (!vma || addr < vma->vm_end). */
  550. if (TASK_SIZE - len < addr)
  551. return -ENOMEM;
  552. if (!vma || addr + len <= vma->vm_start)
  553. return addr;
  554. addr = vma->vm_end;
  555. }
  556. }
  557. #else
  558. extern unsigned long arch_get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
  559. #endif
  560. unsigned long get_unmapped_area(struct file *file, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags)
  561. {
  562. if (flags & MAP_FIXED) {
  563. if (addr > TASK_SIZE - len)
  564. return -ENOMEM;
  565. if (addr & ~PAGE_MASK)
  566. return -EINVAL;
  567. return addr;
  568. }
  569. if (file && file->f_op && file->f_op->get_unmapped_area)
  570. return file->f_op->get_unmapped_area(file, addr, len, pgoff, flags);
  571. return arch_get_unmapped_area(file, addr, len, pgoff, flags);
  572. }
  573. /* Look up the first VMA which satisfies  addr < vm_end,  NULL if none. */
  574. struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long addr)
  575. {
  576. struct vm_area_struct *vma = NULL;
  577. if (mm) {
  578. /* Check the cache first. */
  579. /* (Cache hit rate is typically around 35%.) */
  580. vma = mm->mmap_cache;
  581. if (!(vma && vma->vm_end > addr && vma->vm_start <= addr)) {
  582. rb_node_t * rb_node;
  583. rb_node = mm->mm_rb.rb_node;
  584. vma = NULL;
  585. while (rb_node) {
  586. struct vm_area_struct * vma_tmp;
  587. vma_tmp = rb_entry(rb_node, struct vm_area_struct, vm_rb);
  588. if (vma_tmp->vm_end > addr) {
  589. vma = vma_tmp;
  590. if (vma_tmp->vm_start <= addr)
  591. break;
  592. rb_node = rb_node->rb_left;
  593. } else
  594. rb_node = rb_node->rb_right;
  595. }
  596. if (vma)
  597. mm->mmap_cache = vma;
  598. }
  599. }
  600. return vma;
  601. }
  602. /* Same as find_vma, but also return a pointer to the previous VMA in *pprev. */
  603. struct vm_area_struct * find_vma_prev(struct mm_struct * mm, unsigned long addr,
  604.       struct vm_area_struct **pprev)
  605. {
  606. if (mm) {
  607. /* Go through the RB tree quickly. */
  608. struct vm_area_struct * vma;
  609. rb_node_t * rb_node, * rb_last_right, * rb_prev;
  610. rb_node = mm->mm_rb.rb_node;
  611. rb_last_right = rb_prev = NULL;
  612. vma = NULL;
  613. while (rb_node) {
  614. struct vm_area_struct * vma_tmp;
  615. vma_tmp = rb_entry(rb_node, struct vm_area_struct, vm_rb);
  616. if (vma_tmp->vm_end > addr) {
  617. vma = vma_tmp;
  618. rb_prev = rb_last_right;
  619. if (vma_tmp->vm_start <= addr)
  620. break;
  621. rb_node = rb_node->rb_left;
  622. } else {
  623. rb_last_right = rb_node;
  624. rb_node = rb_node->rb_right;
  625. }
  626. }
  627. if (vma) {
  628. if (vma->vm_rb.rb_left) {
  629. rb_prev = vma->vm_rb.rb_left;
  630. while (rb_prev->rb_right)
  631. rb_prev = rb_prev->rb_right;
  632. }
  633. *pprev = NULL;
  634. if (rb_prev)
  635. *pprev = rb_entry(rb_prev, struct vm_area_struct, vm_rb);
  636. if ((rb_prev ? (*pprev)->vm_next : mm->mmap) != vma)
  637. BUG();
  638. return vma;
  639. }
  640. }
  641. *pprev = NULL;
  642. return NULL;
  643. }
  644. struct vm_area_struct * find_extend_vma(struct mm_struct * mm, unsigned long addr)
  645. {
  646. struct vm_area_struct * vma;
  647. unsigned long start;
  648. addr &= PAGE_MASK;
  649. vma = find_vma(mm,addr);
  650. if (!vma)
  651. return NULL;
  652. if (vma->vm_start <= addr)
  653. return vma;
  654. if (!(vma->vm_flags & VM_GROWSDOWN))
  655. return NULL;
  656. start = vma->vm_start;
  657. if (expand_stack(vma, addr))
  658. return NULL;
  659. if (vma->vm_flags & VM_LOCKED) {
  660. make_pages_present(addr, start);
  661. }
  662. return vma;
  663. }
  664. /* Normal function to fix up a mapping
  665.  * This function is the default for when an area has no specific
  666.  * function.  This may be used as part of a more specific routine.
  667.  * This function works out what part of an area is affected and
  668.  * adjusts the mapping information.  Since the actual page
  669.  * manipulation is done in do_mmap(), none need be done here,
  670.  * though it would probably be more appropriate.
  671.  *
  672.  * By the time this function is called, the area struct has been
  673.  * removed from the process mapping list, so it needs to be
  674.  * reinserted if necessary.
  675.  *
  676.  * The 4 main cases are:
  677.  *    Unmapping the whole area
  678.  *    Unmapping from the start of the segment to a point in it
  679.  *    Unmapping from an intermediate point to the end
  680.  *    Unmapping between to intermediate points, making a hole.
  681.  *
  682.  * Case 4 involves the creation of 2 new areas, for each side of
  683.  * the hole.  If possible, we reuse the existing area rather than
  684.  * allocate a new one, and the return indicates whether the old
  685.  * area was reused.
  686.  */
  687. static struct vm_area_struct * unmap_fixup(struct mm_struct *mm, 
  688. struct vm_area_struct *area, unsigned long addr, size_t len, 
  689. struct vm_area_struct *extra)
  690. {
  691. struct vm_area_struct *mpnt;
  692. unsigned long end = addr + len;
  693. area->vm_mm->total_vm -= len >> PAGE_SHIFT;
  694. if (area->vm_flags & VM_LOCKED)
  695. area->vm_mm->locked_vm -= len >> PAGE_SHIFT;
  696. /* Unmapping the whole area. */
  697. if (addr == area->vm_start && end == area->vm_end) {
  698. if (area->vm_ops && area->vm_ops->close)
  699. area->vm_ops->close(area);
  700. if (area->vm_file)
  701. fput(area->vm_file);
  702. kmem_cache_free(vm_area_cachep, area);
  703. return extra;
  704. }
  705. /* Work out to one of the ends. */
  706. if (end == area->vm_end) {
  707. /*
  708.  * here area isn't visible to the semaphore-less readers
  709.  * so we don't need to update it under the spinlock.
  710.  */
  711. area->vm_end = addr;
  712. lock_vma_mappings(area);
  713. spin_lock(&mm->page_table_lock);
  714. } else if (addr == area->vm_start) {
  715. area->vm_pgoff += (end - area->vm_start) >> PAGE_SHIFT;
  716. /* same locking considerations of the above case */
  717. area->vm_start = end;
  718. lock_vma_mappings(area);
  719. spin_lock(&mm->page_table_lock);
  720. } else {
  721. /* Unmapping a hole: area->vm_start < addr <= end < area->vm_end */
  722. /* Add end mapping -- leave beginning for below */
  723. mpnt = extra;
  724. extra = NULL;
  725. mpnt->vm_mm = area->vm_mm;
  726. mpnt->vm_start = end;
  727. mpnt->vm_end = area->vm_end;
  728. mpnt->vm_page_prot = area->vm_page_prot;
  729. mpnt->vm_flags = area->vm_flags;
  730. mpnt->vm_raend = 0;
  731. mpnt->vm_ops = area->vm_ops;
  732. mpnt->vm_pgoff = area->vm_pgoff + ((end - area->vm_start) >> PAGE_SHIFT);
  733. mpnt->vm_file = area->vm_file;
  734. mpnt->vm_private_data = area->vm_private_data;
  735. if (mpnt->vm_file)
  736. get_file(mpnt->vm_file);
  737. if (mpnt->vm_ops && mpnt->vm_ops->open)
  738. mpnt->vm_ops->open(mpnt);
  739. area->vm_end = addr; /* Truncate area */
  740. /* Because mpnt->vm_file == area->vm_file this locks
  741.  * things correctly.
  742.  */
  743. lock_vma_mappings(area);
  744. spin_lock(&mm->page_table_lock);
  745. __insert_vm_struct(mm, mpnt);
  746. }
  747. __insert_vm_struct(mm, area);
  748. spin_unlock(&mm->page_table_lock);
  749. unlock_vma_mappings(area);
  750. return extra;
  751. }
  752. /*
  753.  * Try to free as many page directory entries as we can,
  754.  * without having to work very hard at actually scanning
  755.  * the page tables themselves.
  756.  *
  757.  * Right now we try to free page tables if we have a nice
  758.  * PGDIR-aligned area that got free'd up. We could be more
  759.  * granular if we want to, but this is fast and simple,
  760.  * and covers the bad cases.
  761.  *
  762.  * "prev", if it exists, points to a vma before the one
  763.  * we just free'd - but there's no telling how much before.
  764.  */
  765. static void free_pgtables(struct mm_struct * mm, struct vm_area_struct *prev,
  766. unsigned long start, unsigned long end)
  767. {
  768. unsigned long first = start & PGDIR_MASK;
  769. unsigned long last = end + PGDIR_SIZE - 1;
  770. unsigned long start_index, end_index;
  771. if (!prev) {
  772. prev = mm->mmap;
  773. if (!prev)
  774. goto no_mmaps;
  775. if (prev->vm_end > start) {
  776. if (last > prev->vm_start)
  777. last = prev->vm_start;
  778. goto no_mmaps;
  779. }
  780. }
  781. for (;;) {
  782. struct vm_area_struct *next = prev->vm_next;
  783. if (next) {
  784. if (next->vm_start < start) {
  785. prev = next;
  786. continue;
  787. }
  788. if (last > next->vm_start)
  789. last = next->vm_start;
  790. }
  791. if (prev->vm_end > first)
  792. first = prev->vm_end + PGDIR_SIZE - 1;
  793. break;
  794. }
  795. no_mmaps:
  796. /*
  797.  * If the PGD bits are not consecutive in the virtual address, the
  798.  * old method of shifting the VA >> by PGDIR_SHIFT doesn't work.
  799.  */
  800. start_index = pgd_index(first);
  801. end_index = pgd_index(last);
  802. if (end_index > start_index) {
  803. clear_page_tables(mm, start_index, end_index - start_index);
  804. flush_tlb_pgtables(mm, first & PGDIR_MASK, last & PGDIR_MASK);
  805. }
  806. }
  807. /* Munmap is split into 2 main parts -- this part which finds
  808.  * what needs doing, and the areas themselves, which do the
  809.  * work.  This now handles partial unmappings.
  810.  * Jeremy Fitzhardine <jeremy@sw.oz.au>
  811.  */
  812. int do_munmap(struct mm_struct *mm, unsigned long addr, size_t len)
  813. {
  814. struct vm_area_struct *mpnt, *prev, **npp, *free, *extra;
  815. if ((addr & ~PAGE_MASK) || addr > TASK_SIZE || len > TASK_SIZE-addr)
  816. return -EINVAL;
  817. if ((len = PAGE_ALIGN(len)) == 0)
  818. return -EINVAL;
  819. /* Check if this memory area is ok - put it on the temporary
  820.  * list if so..  The checks here are pretty simple --
  821.  * every area affected in some way (by any overlap) is put
  822.  * on the list.  If nothing is put on, nothing is affected.
  823.  */
  824. mpnt = find_vma_prev(mm, addr, &prev);
  825. if (!mpnt)
  826. return 0;
  827. /* we have  addr < mpnt->vm_end  */
  828. if (mpnt->vm_start >= addr+len)
  829. return 0;
  830. /* If we'll make "hole", check the vm areas limit */
  831. if ((mpnt->vm_start < addr && mpnt->vm_end > addr+len)
  832.     && mm->map_count >= max_map_count)
  833. return -ENOMEM;
  834. /*
  835.  * We may need one additional vma to fix up the mappings ... 
  836.  * and this is the last chance for an easy error exit.
  837.  */
  838. extra = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
  839. if (!extra)
  840. return -ENOMEM;
  841. npp = (prev ? &prev->vm_next : &mm->mmap);
  842. free = NULL;
  843. spin_lock(&mm->page_table_lock);
  844. for ( ; mpnt && mpnt->vm_start < addr+len; mpnt = *npp) {
  845. *npp = mpnt->vm_next;
  846. mpnt->vm_next = free;
  847. free = mpnt;
  848. rb_erase(&mpnt->vm_rb, &mm->mm_rb);
  849. }
  850. mm->mmap_cache = NULL; /* Kill the cache. */
  851. spin_unlock(&mm->page_table_lock);
  852. /* Ok - we have the memory areas we should free on the 'free' list,
  853.  * so release them, and unmap the page range..
  854.  * If the one of the segments is only being partially unmapped,
  855.  * it will put new vm_area_struct(s) into the address space.
  856.  * In that case we have to be careful with VM_DENYWRITE.
  857.  */
  858. while ((mpnt = free) != NULL) {
  859. unsigned long st, end, size;
  860. struct file *file = NULL;
  861. free = free->vm_next;
  862. st = addr < mpnt->vm_start ? mpnt->vm_start : addr;
  863. end = addr+len;
  864. end = end > mpnt->vm_end ? mpnt->vm_end : end;
  865. size = end - st;
  866. if (mpnt->vm_flags & VM_DENYWRITE &&
  867.     (st != mpnt->vm_start || end != mpnt->vm_end) &&
  868.     (file = mpnt->vm_file) != NULL) {
  869. atomic_dec(&file->f_dentry->d_inode->i_writecount);
  870. }
  871. remove_shared_vm_struct(mpnt);
  872. mm->map_count--;
  873. zap_page_range(mm, st, size);
  874. /*
  875.  * Fix the mapping, and free the old area if it wasn't reused.
  876.  */
  877. extra = unmap_fixup(mm, mpnt, st, size, extra);
  878. if (file)
  879. atomic_inc(&file->f_dentry->d_inode->i_writecount);
  880. }
  881. validate_mm(mm);
  882. /* Release the extra vma struct if it wasn't used */
  883. if (extra)
  884. kmem_cache_free(vm_area_cachep, extra);
  885. free_pgtables(mm, prev, addr, addr+len);
  886. return 0;
  887. }
  888. asmlinkage long sys_munmap(unsigned long addr, size_t len)
  889. {
  890. int ret;
  891. struct mm_struct *mm = current->mm;
  892. down_write(&mm->mmap_sem);
  893. ret = do_munmap(mm, addr, len);
  894. up_write(&mm->mmap_sem);
  895. return ret;
  896. }
  897. /*
  898.  *  this is really a simplified "do_mmap".  it only handles
  899.  *  anonymous maps.  eventually we may be able to do some
  900.  *  brk-specific accounting here.
  901.  */
  902. unsigned long do_brk(unsigned long addr, unsigned long len)
  903. {
  904. struct mm_struct * mm = current->mm;
  905. struct vm_area_struct * vma, * prev;
  906. unsigned long flags;
  907. rb_node_t ** rb_link, * rb_parent;
  908. len = PAGE_ALIGN(len);
  909. if (!len)
  910. return addr;
  911. /*
  912.  * mlock MCL_FUTURE?
  913.  */
  914. if (mm->def_flags & VM_LOCKED) {
  915. unsigned long locked = mm->locked_vm << PAGE_SHIFT;
  916. locked += len;
  917. if (locked > current->rlim[RLIMIT_MEMLOCK].rlim_cur)
  918. return -EAGAIN;
  919. }
  920. /*
  921.  * Clear old maps.  this also does some error checking for us
  922.  */
  923.  munmap_back:
  924. vma = find_vma_prepare(mm, addr, &prev, &rb_link, &rb_parent);
  925. if (vma && vma->vm_start < addr + len) {
  926. if (do_munmap(mm, addr, len))
  927. return -ENOMEM;
  928. goto munmap_back;
  929. }
  930. /* Check against address space limits *after* clearing old maps... */
  931. if ((mm->total_vm << PAGE_SHIFT) + len
  932.     > current->rlim[RLIMIT_AS].rlim_cur)
  933. return -ENOMEM;
  934. if (mm->map_count > max_map_count)
  935. return -ENOMEM;
  936. if (!vm_enough_memory(len >> PAGE_SHIFT))
  937. return -ENOMEM;
  938. flags = VM_DATA_DEFAULT_FLAGS | mm->def_flags;
  939. /* Can we just expand an old anonymous mapping? */
  940. if (rb_parent && vma_merge(mm, prev, rb_parent, addr, addr + len, flags))
  941. goto out;
  942. /*
  943.  * create a vma struct for an anonymous mapping
  944.  */
  945. vma = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
  946. if (!vma)
  947. return -ENOMEM;
  948. vma->vm_mm = mm;
  949. vma->vm_start = addr;
  950. vma->vm_end = addr + len;
  951. vma->vm_flags = flags;
  952. vma->vm_page_prot = protection_map[flags & 0x0f];
  953. vma->vm_ops = NULL;
  954. vma->vm_pgoff = 0;
  955. vma->vm_file = NULL;
  956. vma->vm_private_data = NULL;
  957. vma_link(mm, vma, prev, rb_link, rb_parent);
  958. out:
  959. mm->total_vm += len >> PAGE_SHIFT;
  960. if (flags & VM_LOCKED) {
  961. mm->locked_vm += len >> PAGE_SHIFT;
  962. make_pages_present(addr, addr + len);
  963. }
  964. return addr;
  965. }
  966. /* Build the RB tree corresponding to the VMA list. */
  967. void build_mmap_rb(struct mm_struct * mm)
  968. {
  969. struct vm_area_struct * vma;
  970. rb_node_t ** rb_link, * rb_parent;
  971. mm->mm_rb = RB_ROOT;
  972. rb_link = &mm->mm_rb.rb_node;
  973. rb_parent = NULL;
  974. for (vma = mm->mmap; vma; vma = vma->vm_next) {
  975. __vma_link_rb(mm, vma, rb_link, rb_parent);
  976. rb_parent = &vma->vm_rb;
  977. rb_link = &rb_parent->rb_right;
  978. }
  979. }
  980. /* Release all mmaps. */
  981. void exit_mmap(struct mm_struct * mm)
  982. {
  983. struct vm_area_struct * mpnt;
  984. release_segments(mm);
  985. spin_lock(&mm->page_table_lock);
  986. mpnt = mm->mmap;
  987. mm->mmap = mm->mmap_cache = NULL;
  988. mm->mm_rb = RB_ROOT;
  989. mm->rss = 0;
  990. spin_unlock(&mm->page_table_lock);
  991. mm->total_vm = 0;
  992. mm->locked_vm = 0;
  993. flush_cache_mm(mm);
  994. while (mpnt) {
  995. struct vm_area_struct * next = mpnt->vm_next;
  996. unsigned long start = mpnt->vm_start;
  997. unsigned long end = mpnt->vm_end;
  998. unsigned long size = end - start;
  999. if (mpnt->vm_ops) {
  1000. if (mpnt->vm_ops->close)
  1001. mpnt->vm_ops->close(mpnt);
  1002. }
  1003. mm->map_count--;
  1004. remove_shared_vm_struct(mpnt);
  1005. zap_page_range(mm, start, size);
  1006. if (mpnt->vm_file)
  1007. fput(mpnt->vm_file);
  1008. kmem_cache_free(vm_area_cachep, mpnt);
  1009. mpnt = next;
  1010. }
  1011. /* This is just debugging */
  1012. if (mm->map_count)
  1013. BUG();
  1014. clear_page_tables(mm, FIRST_USER_PGD_NR, USER_PTRS_PER_PGD);
  1015. flush_tlb_mm(mm);
  1016. }
  1017. /* Insert vm structure into process list sorted by address
  1018.  * and into the inode's i_mmap ring.  If vm_file is non-NULL
  1019.  * then the i_shared_lock must be held here.
  1020.  */
  1021. void __insert_vm_struct(struct mm_struct * mm, struct vm_area_struct * vma)
  1022. {
  1023. struct vm_area_struct * __vma, * prev;
  1024. rb_node_t ** rb_link, * rb_parent;
  1025. __vma = find_vma_prepare(mm, vma->vm_start, &prev, &rb_link, &rb_parent);
  1026. if (__vma && __vma->vm_start < vma->vm_end)
  1027. BUG();
  1028. __vma_link(mm, vma, prev, rb_link, rb_parent);
  1029. mm->map_count++;
  1030. validate_mm(mm);
  1031. }
  1032. void insert_vm_struct(struct mm_struct * mm, struct vm_area_struct * vma)
  1033. {
  1034. struct vm_area_struct * __vma, * prev;
  1035. rb_node_t ** rb_link, * rb_parent;
  1036. __vma = find_vma_prepare(mm, vma->vm_start, &prev, &rb_link, &rb_parent);
  1037. if (__vma && __vma->vm_start < vma->vm_end)
  1038. BUG();
  1039. vma_link(mm, vma, prev, rb_link, rb_parent);
  1040. validate_mm(mm);
  1041. }