📄 00000031.htm
字号:
+ } <BR> } <BR> <BR> /* <BR>--- linux-2.4.0-test8/fs/inode.c Thu Aug 24 21:07:23 2000 <BR>+++ linux-akpm/fs/inode.c Tue Sep 12 19:36:55 2000 <BR>@@ -200,7 +200,7 @@ <BR> spin_unlock(&inode_lock); <BR> <BR> write_inode(inode, sync); <BR>- <BR>+ conditional_schedule(); /* kupdate: sync_old_inodes() */ <BR> spin_lock(&inode_lock); <BR> inode->i_state &= ~I_LOCK; <BR> wake_up(&inode->i_wait); <BR>--- linux-2.4.0-test8/mm/memory.c Sat Sep 9 16:19:30 2000 <BR>+++ linux-akpm/mm/memory.c Tue Sep 12 19:36:55 2000 <BR>@@ -243,6 +243,7 @@ <BR> goto out; <BR> src_pte++; <BR> dst_pte++; <BR>+ conditional_schedule(); /* sys_fork(), with a large shm seg */ <BR> } while ((unsigned long)src_pte & PTE_TABLE_MASK); <BR> <BR> cont_copy_pmd_range: src_pmd++; <BR>@@ -347,7 +348,7 @@ <BR> /* <BR> * remove user pages in a given range. <BR> */ <BR>-void zap_page_range(struct mm_struct *mm, unsigned long address, <BR>unsigned long size) <BR>+static void do_zap_page_range(struct mm_struct *mm, unsigned long <BR>address, unsigned long size) <BR> { <BR> pgd_t * dir; <BR> unsigned long end = address + size; <BR>@@ -381,6 +382,25 @@ <BR> mm->rss = 0; <BR> } <BR> <BR>+#define MAX_ZAP_BYTES 256*PAGE_SIZE <BR>+ <BR>+void zap_page_range(struct mm_struct *mm, unsigned long address, <BR>unsigned long size, int actions) <BR>+{ <BR>+ while (size) { <BR>+ unsigned long chunk = size; <BR>+ if (actions & ZPR_COND_RESCHED && chunk > MAX_ZAP_BYTES) <BR>+ chunk = MAX_ZAP_BYTES; <BR>+ if (actions & ZPR_FLUSH_CACHE) <BR>+ flush_cache_range(mm, address, address + chunk); <BR>+ do_zap_page_range(mm, address, chunk); <BR>+ if (actions & ZPR_FLUSH_TLB) <BR>+ flush_tlb_range(mm, address, address + chunk); <BR>+ if (actions & ZPR_COND_RESCHED) <BR>+ conditional_schedule(); <BR>+ address += chunk; <BR>+ size -= chunk; <BR>+ } <BR>+} <BR> <BR> /* <BR> * Do a quick page-table lookup for a single page. <BR>@@ -936,9 +956,7 @@ <BR> <BR> /* mapping wholly truncated? */ <BR> if (mpnt->vm_pgoff >= pgoff) { <BR>- flush_cache_range(mm, start, end); <BR>- zap_page_range(mm, start, len); <BR>- flush_tlb_range(mm, start, end); <BR>+ zap_page_range(mm, start, len, ZPR_FLUSH_CACHE|ZPR_FLUSH_TLB); <BR> continue; <BR> } <BR> <BR>@@ -955,9 +973,7 @@ <BR> partial_clear(mpnt, start); <BR> start = (start + ~PAGE_MASK) & PAGE_MASK; <BR> } <BR>- flush_cache_range(mm, start, end); <BR>- zap_page_range(mm, start, len); <BR>- flush_tlb_range(mm, start, end); <BR>+ zap_page_range(mm, start, len, ZPR_FLUSH_CACHE|ZPR_FLUSH_TLB); <BR> } while ((mpnt = mpnt->vm_next_share) != NULL); <BR> } <BR> <BR>@@ -1239,7 +1255,9 @@ <BR> <BR> pgd = pgd_offset(mm, address); <BR> pmd = pmd_alloc(pgd, address); <BR>- <BR>+ <BR>+ conditional_schedule(); /* Pinning down many physical pages (kiobufs, <BR> mlockall) */ <BR>+ <BR> if (pmd) { <BR> pte_t * pte = pte_alloc(pmd, address); <BR> if (pte) <BR>--- linux-2.4.0-test8/mm/mmap.c Sat Sep 9 16:19:30 2000 <BR>+++ linux-akpm/mm/mmap.c Tue Sep 12 19:36:55 2000 <BR>@@ -337,9 +337,8 @@ <BR> vma->vm_file = NULL; <BR> fput(file); <BR> /* Undo any partial mapping done by a device driver. */ <BR>- flush_cache_range(mm, vma->vm_start, vma->vm_end); <BR>- zap_page_range(mm, vma->vm_start, vma->vm_end - vma->vm_start); <BR>- flush_tlb_range(mm, vma->vm_start, vma->vm_end); <BR>+ zap_page_range(mm, vma->vm_start, vma->vm_end - vma->vm_start, <BR>+ ZPR_FLUSH_CACHE|ZPR_FLUSH_TLB); <BR> free_vma: <BR> kmem_cache_free(vm_area_cachep, vma); <BR> return error; <BR>@@ -708,10 +707,8 @@ <BR> } <BR> remove_shared_vm_struct(mpnt); <BR> mm->map_count--; <BR>- <BR>- flush_cache_range(mm, st, end); <BR>- zap_page_range(mm, st, size); <BR>- flush_tlb_range(mm, st, end); <BR>+ zap_page_range(mm, st, size, <BR>+ ZPR_FLUSH_CACHE|ZPR_FLUSH_TLB|ZPR_COND_RESCHED); /* sys_munmap() <BR>*/ <BR> <BR> /* <BR> * Fix the mapping, and free the old area if it wasn't reused. <BR>@@ -861,8 +858,7 @@ <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -