/* Handle a fault on the vmalloc or module mapping area  */
static noinline int vmalloc_fault(unsigned long address)
/* Handle a fault on the vmalloc or module mapping area  */
static noinline int vmalloc_fault(unsigned long address)
{
	pgd_t *pgd_k;
	pmd_t *pmd_k;
	pte_t *pte_k;
	if (!(address >= VMALLOC_START && address < P3_ADDR_MAX))
		return -1;
	pgd_k = get_TTB();
	pmd_k = vmalloc_sync_one(pgd_k, address);
	if (!pmd_k)
		return -1;
	pte_k = pte_offset_kernel(pmd_k, address);
	if (!pte_present(*pte_k))
		return -1;
	return 0;
}