The patch titled

     uml: fault handler micro-cleanups

has been added to the -mm tree.  Its filename is

     uml-fault-handler-micro-cleanups.patch

Patches currently in -mm which might be from [EMAIL PROTECTED] are

comment-typo-fix.patch
shmem_populate-avoid-an-useless-check-and-some-comments.patch
add-swap-cache-mapping-comment.patch
remove-implied-vm_ops-check.patch
remove-stale-comment-from-swapfilec.patch
correct-_page_file-comment.patch
x86_64-remove-duplicated-sys_time64.patch
uml-rename-kconfig-files-to-be-like-the-other-arches.patch
ptrace-i386-fix-syscall-audit-interaction-with-singlestep.patch
uml-support-ptrace-adds-the-host-sysemu-support-for-uml-and-general-usage.patch
uml-support-reorganize-ptrace_sysemu-support.patch
uml-support-add-ptrace_sysemu_singlestep-option-to-i386.patch
sysemu-fix-sysaudit--singlestep-interaction.patch
uml-support-sysemu-slight-cleanup-and-speedup.patch
uml-workaround-gdb-problems-on-debugging.patch
uml-fix-sigwinch-handler-race-while-waiting-for-signals.patch
uml-fixes-performance-regression-in-activate_mm-and-thus-exec.patch
uml-fault-handler-micro-cleanups.patch



From: Paolo 'Blaisorblade' Giarrusso <[EMAIL PROTECTED]>

Avoid chomping low bits of address for functions doing it by themselves,
fix whitespace, add a correctness checking.

I did this for remap-file-pages protection support, it was useful on its
own too.

Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[EMAIL PROTECTED]>
Cc: Jeff Dike <[EMAIL PROTECTED]>
Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
---

 arch/um/kernel/trap_kern.c |   28 +++++++++++++---------------
 1 files changed, 13 insertions(+), 15 deletions(-)

diff -puN arch/um/kernel/trap_kern.c~uml-fault-handler-micro-cleanups 
arch/um/kernel/trap_kern.c
--- 25/arch/um/kernel/trap_kern.c~uml-fault-handler-micro-cleanups      Wed Aug 
17 14:53:28 2005
+++ 25-akpm/arch/um/kernel/trap_kern.c  Wed Aug 17 14:53:28 2005
@@ -26,6 +26,7 @@
 #include "mem.h"
 #include "mem_kern.h"
 
+/* Note this is constrained to return 0, -EFAULT, -EACCESS, -ENOMEM by segv(). 
*/
 int handle_page_fault(unsigned long address, unsigned long ip, 
                      int is_write, int is_user, int *code_out)
 {
@@ -35,7 +36,6 @@ int handle_page_fault(unsigned long addr
        pud_t *pud;
        pmd_t *pmd;
        pte_t *pte;
-       unsigned long page;
        int err = -EFAULT;
 
        *code_out = SEGV_MAPERR;
@@ -52,7 +52,7 @@ int handle_page_fault(unsigned long addr
        else if(expand_stack(vma, address)) 
                goto out;
 
- good_area:
+good_area:
        *code_out = SEGV_ACCERR;
        if(is_write && !(vma->vm_flags & VM_WRITE)) 
                goto out;
@@ -60,9 +60,8 @@ int handle_page_fault(unsigned long addr
         if(!(vma->vm_flags & (VM_READ | VM_EXEC)))
                 goto out;
 
-       page = address & PAGE_MASK;
        do {
- survive:
+survive:
                switch (handle_mm_fault(mm, vma, address, is_write)){
                case VM_FAULT_MINOR:
                        current->min_flt++;
@@ -79,16 +78,16 @@ int handle_page_fault(unsigned long addr
                default:
                        BUG();
                }
-               pgd = pgd_offset(mm, page);
-               pud = pud_offset(pgd, page);
-               pmd = pmd_offset(pud, page);
-               pte = pte_offset_kernel(pmd, page);
+               pgd = pgd_offset(mm, address);
+               pud = pud_offset(pgd, address);
+               pmd = pmd_offset(pud, address);
+               pte = pte_offset_kernel(pmd, address);
        } while(!pte_present(*pte));
        err = 0;
        *pte = pte_mkyoung(*pte);
        if(pte_write(*pte)) *pte = pte_mkdirty(*pte);
-       flush_tlb_page(vma, page);
- out:
+       flush_tlb_page(vma, address);
+out:
        up_read(&mm->mmap_sem);
        return(err);
 
@@ -144,19 +143,18 @@ unsigned long segv(struct faultinfo fi, 
                panic("Kernel mode fault at addr 0x%lx, ip 0x%lx", 
                      address, ip);
 
-       if(err == -EACCES){
+       if (err == -EACCES) {
                si.si_signo = SIGBUS;
                si.si_errno = 0;
                si.si_code = BUS_ADRERR;
                si.si_addr = (void *)address;
                 current->thread.arch.faultinfo = fi;
                force_sig_info(SIGBUS, &si, current);
-       }
-       else if(err == -ENOMEM){
+       } else if (err == -ENOMEM) {
                printk("VM: killing process %s\n", current->comm);
                do_exit(SIGKILL);
-       }
-       else {
+       } else {
+               BUG_ON(err != -EFAULT);
                si.si_signo = SIGSEGV;
                si.si_addr = (void *) address;
                 current->thread.arch.faultinfo = fi;
_
-
To unsubscribe from this list: send the line "unsubscribe mm-commits" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to