--- zzzz-none-000/linux-2.6.39.4/arch/arm/mm/fault.c 2011-08-03 19:43:28.000000000 +0000 +++ puma6-atom-6490-729/linux-2.6.39.4/arch/arm/mm/fault.c 2021-11-10 13:38:14.000000000 +0000 @@ -9,7 +9,7 @@ * published by the Free Software Foundation. */ #include -#include + #include #include #include @@ -23,6 +23,12 @@ #include #include #include +#if defined(CONFIG_AVM_SIMPLE_PROFILING) +#include +#endif/*--- #if defined(CONFIG_AVM_SIMPLE_PROFILING) ---*/ +#if defined(CONFIG_AVM_POWER) +#include +#endif /*--- #if defined(CONFIG_AVM_POWER) ---*/ #include "fault.h" @@ -256,7 +262,13 @@ * If for any reason at all we couldn't handle the fault, make * sure we exit gracefully rather than endlessly redo the fault. */ +#if defined(CONFIG_AVM_POWER) + avm_page_statistic_fault_get(); +#endif/*--- #if defined(CONFIG_AVM_POWER) ---*/ fault = handle_mm_fault(mm, vma, addr & PAGE_MASK, (fsr & FSR_WRITE) ? FAULT_FLAG_WRITE : 0); +#if defined(CONFIG_AVM_POWER) + avm_page_statistic_fault_put(); +#endif/*--- #if defined(CONFIG_AVM_POWER) ---*/ if (unlikely(fault & VM_FAULT_ERROR)) return fault; if (fault & VM_FAULT_MAJOR) @@ -279,6 +291,14 @@ struct mm_struct *mm; int fault, sig, code; +#if defined(CONFIG_AVM_SIMPLE_PROFILING) +#if defined(avm_simple_profiling_enter_irq_context) + avm_simple_profiling_enter_irq_context(regs->ARM_pc, regs->ARM_lr); +#else/*--- #if defined(avm_simple_profiling_enter_irq_context) ---*/ + avm_simple_profiling_enter_irqcontext(regs->ARM_pc); +#endif/*--- #else ---*//*--- #if defined(avm_simple_profiling_enter_irq_context) ---*/ +#endif/*--- #if defined(CONFIG_AVM_SIMPLE_PROFILING) ---*/ + if (notify_page_fault(regs, fsr)) return 0; @@ -315,7 +335,13 @@ #endif } +#if defined(CONFIG_AVM_SIMPLE_PROFILING) + avm_simple_profiling_log(avm_profile_data_type_hw_irq_begin, (unsigned int)regs->ARM_pc, AVM_PROFILE_PAGE_FAULT_ID); +#endif/*--- #if defined(CONFIG_AVM_SIMPLE_PROFILING) ---*/ fault = __do_page_fault(mm, addr, fsr, tsk); +#if defined(CONFIG_AVM_SIMPLE_PROFILING) + avm_simple_profiling_log(avm_profile_data_type_hw_irq_end, (unsigned int)regs->ARM_pc, AVM_PROFILE_PAGE_FAULT_ID); +#endif/*--- #if defined(CONFIG_AVM_SIMPLE_PROFILING) ---*/ up_read(&mm->mmap_sem); perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, 0, regs, addr); @@ -409,6 +435,14 @@ if (addr < TASK_SIZE) return do_page_fault(addr, fsr, regs); +#if defined(CONFIG_AVM_SIMPLE_PROFILING) +#if defined(avm_simple_profiling_enter_irq_context) + avm_simple_profiling_enter_irq_context(regs->ARM_pc, regs->ARM_lr); +#else/*--- #if defined(avm_simple_profiling_enter_irq_context) ---*/ + avm_simple_profiling_enter_irqcontext(regs->ARM_pc); +#endif/*--- #else ---*//*--- #if defined(avm_simple_profiling_enter_irq_context) ---*/ +#endif/*--- #if defined(CONFIG_AVM_SIMPLE_PROFILING) ---*/ + if (user_mode(regs)) goto bad_area;