if ((ea > USER_END) || (! mm))
if (! mm)
int hash_page(unsigned long ea, unsigned long access, unsigned long trap){	void *pgdir;	unsigned long vsid;	struct mm_struct *mm;	pte_t *ptep;	int ret;	int user_region = 0;	int local = 0;	cpumask_t tmp; 	switch (REGION_ID(ea)) {	case USER_REGION_ID:		user_region = 1;		mm = current->mm;		if ((ea > USER_END) || (! mm))			return 1;		vsid = get_vsid(mm->context.id, ea);		break;	case IO_REGION_ID:		if (ea > IMALLOC_END)			return 1;		mm = &ioremap_mm;		vsid = get_kernel_vsid(ea);		break;	case VMALLOC_REGION_ID:		if (ea > VMALLOC_END)			return 1;		mm = &init_mm;		vsid = get_kernel_vsid(ea);		break;#if 0	case KERNEL_REGION_ID:		/*		 * Should never get here - entire 0xC0... region is bolted.		 * Send the problem up to do_page_fault 		 */#endif	default:		/* Not a valid range		 * Send the problem up to do_page_fault 		 */		return 1;		break;	}	pgdir = mm->pgd;	if (pgdir == NULL)		return 1;	tmp = cpumask_of_cpu(smp_processor_id());	if (user_region && cpus_equal(mm->cpu_vm_mask, tmp))		local = 1;	/* Is this a huge page ? */	if (unlikely(in_hugepage_area(mm->context, ea)))		ret = hash_huge_page(mm, access, ea, vsid, local);	else {		ptep = find_linux_pte(pgdir, ea);		if (ptep == NULL)			return 1;		ret = __hash_page(ea, access, vsid, ptep, trap, local);	}	return ret;}