--- zzzz-none-000/linux-3.10.107/arch/mips/mm/fault.c 2017-06-27 09:49:32.000000000 +0000 +++ vr9-7490-729/linux-3.10.107/arch/mips/mm/fault.c 2021-11-10 11:53:54.000000000 +0000 @@ -26,6 +26,16 @@ #include #include /* For VMALLOC_END */ #include +#if defined(CONFIG_NMI_ARBITER_WORKAROUND) +#include +#endif/*--- #if defined(CONFIG_NMI_ARBITER_WORKAROUND) ---*/ +#if defined(CONFIG_AVM_POWER) +#include +#endif/*--- #if defined(CONFIG_AVM_POWER) ---*/ + +#if defined(CONFIG_AVM_SIMPLE_PROFILING) +#include +#endif /*--- #if defined(CONFIG_AVM_SIMPLE_PROFILING) ---*/ /* * This routine handles page faults. It determines the address, @@ -148,7 +158,21 @@ * make sure we exit gracefully rather than endlessly redo * the fault. */ +#if defined(CONFIG_AVM_SIMPLE_PROFILING) + avm_simple_profiling_log(avm_profile_data_type_hw_irq_begin, (unsigned int)regs->cp0_epc, AVM_PROFILE_PAGE_FAULT_ID); +#endif/*--- #if defined(CONFIG_AVM_SIMPLE_PROFILING) ---*/ +#if defined(CONFIG_AVM_POWER) + avm_page_statistic_fault_get(); +#endif/*--- #if defined(CONFIG_AVM_POWER) ---*/ fault = handle_mm_fault(mm, vma, address, flags); +#if defined(CONFIG_AVM_POWER) + avm_page_statistic_fault_put(); +#endif/*--- #if defined(CONFIG_AVM_POWER) ---*/ + +#if defined(CONFIG_AVM_SIMPLE_PROFILING) + avm_simple_profiling_log(avm_profile_data_type_hw_irq_end, regs->cp0_epc, AVM_PROFILE_PAGE_FAULT_ID); +#endif/*--- #endif ---*//*--- #if defined(CONFIG_AVM_SIMPLE_PROFILING) ---*/ + if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) return; @@ -226,6 +250,10 @@ return; } +write_protect_die: +#if defined(CONFIG_NMI_ARBITER_WORKAROUND) + ath_workaround_nmi_stop(); +#endif/*--- #if defined(CONFIG_NMI_ARBITER_WORKAROUND) ---*/ /* * Oops. The kernel tried to access some bad page. We'll have to * terminate things with extreme prejudice. @@ -314,6 +342,12 @@ pte_k = pte_offset_kernel(pmd_k, address); if (!pte_present(*pte_k)) goto no_context; +#if defined(CONFIG_AVM_ENHANCED) + if(write && !pte_write(*pte_k)) { + printk(KERN_ALERT"----- VMALLOC-AREA WRITE-PROTECTED -----\n"); + goto write_protect_die; + } +#endif/*--- #if defined(CONFIG_AVM_ENHANCED) ---*/ return; } #endif