if(err == -EACCES){ 
if (err == -EACCES) { 
unsigned long segv(struct faultinfo fi, unsigned long ip, int is_user, void *sc){	struct siginfo si;	void *catcher;	int err;        int is_write = FAULT_WRITE(fi);        unsigned long address = FAULT_ADDRESS(fi);        if(!is_user && (address >= start_vm) && (address < end_vm)){                flush_tlb_kernel_vm();                return(0);        }	else if(current->mm == NULL)		panic("Segfault with no mm");	err = handle_page_fault(address, ip, is_write, is_user, &si.si_code);	catcher = current->thread.fault_catcher;	if(!err)		return(0);	else if(catcher != NULL){		current->thread.fault_addr = (void *) address;		do_longjmp(catcher, 1);	} 	else if(current->thread.fault_addr != NULL)		panic("fault_addr set but no fault catcher");        else if(!is_user && arch_fixup(ip, sc))		return(0); 	if(!is_user) 		panic("Kernel mode fault at addr 0x%lx, ip 0x%lx", 		      address, ip);	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){		printk("VM: killing process %s\n", current->comm);		do_exit(SIGKILL);	}	else {		si.si_signo = SIGSEGV;		si.si_addr = (void *) address;                current->thread.arch.faultinfo = fi;		force_sig_info(SIGSEGV, &si, current);	}	return(0);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/3b52166cf72f0826c6d8fa0541c7d4ae39c5a146/trap_kern.c/clean/arch/um/kernel/trap_kern.c