X-Git-Url: https://git.kernelconcepts.de/?a=blobdiff_plain;f=arch%2Farc%2Fmm%2Ffault.c;h=af63f4a13e605eda26bcb7de54595bda5ecad997;hb=cb1a14b95eee86d7e20bfa2c010aab77b021f62e;hp=d948e4e9d89c4ebe7e5676f449c9377b4fbe3535;hpb=3d3e66ba2ced6c5ba7d960f106ba2d3a4444c4ab;p=karo-tx-linux.git diff --git a/arch/arc/mm/fault.c b/arch/arc/mm/fault.c index d948e4e9d89c..af63f4a13e60 100644 --- a/arch/arc/mm/fault.c +++ b/arch/arc/mm/fault.c @@ -18,7 +18,14 @@ #include #include -static int handle_vmalloc_fault(unsigned long address) +/* + * kernel virtual address is required to implement vmalloc/pkmap/fixmap + * Refer to asm/processor.h for System Memory Map + * + * It simply copies the PMD entry (pointer to 2nd level page table or hugepage) + * from swapper pgdir to task pgdir. The 2nd level table/page is thus shared + */ +noinline static int handle_kernel_vaddr_fault(unsigned long address) { /* * Synchronize this task's top level page-table @@ -72,8 +79,8 @@ void do_page_fault(unsigned long address, struct pt_regs *regs) * only copy the information from the master page table, * nothing more. */ - if (address >= VMALLOC_START && address <= VMALLOC_END) { - ret = handle_vmalloc_fault(address); + if (address >= VMALLOC_START) { + ret = handle_kernel_vaddr_fault(address); if (unlikely(ret)) goto bad_area_nosemaphore; else