--- zzzz-none-000/linux-2.6.39.4/arch/x86/mm/fault.c 2011-08-03 19:43:28.000000000 +0000 +++ puma6-atom-6490-729/linux-2.6.39.4/arch/x86/mm/fault.c 2021-11-10 13:38:14.000000000 +0000 @@ -17,6 +17,13 @@ #include /* pgd_*(), ... */ #include /* kmemcheck_*(), ... */ +#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) ---*/ + /* * Page fault error code bits: * @@ -973,6 +980,14 @@ /* Get the faulting address: */ address = read_cr2(); +#if defined(CONFIG_AVM_SIMPLE_PROFILING) +#if defined(avm_simple_profiling_enter_irq_context) + avm_simple_profiling_enter_irq_context((unsigned int)instruction_pointer(regs), regs->bp); +#else/*--- #if defined(avm_simple_profiling_enter_irq_context) ---*/ + avm_simple_profiling_enter_irqcontext((unsigned int)instruction_pointer(regs)); +#endif/*--- #else ---*//*--- #if defined(avm_simple_profiling_enter_irq_context) ---*/ +#endif/*--- #if defined(CONFIG_AVM_SIMPLE_PROFILING) ---*/ + /* * Detect and handle instructions that would cause a page fault for * both a tracked kernel page and a userspace page. @@ -981,9 +996,9 @@ kmemcheck_hide(regs); prefetchw(&mm->mmap_sem); - if (unlikely(kmmio_fault(regs, address))) + if (unlikely(kmmio_fault(regs, address))) { return; - + } /* * We fault-in kernel-space virtual memory on-demand. The * 'reference' page table is init_mm.pgd. @@ -1130,7 +1145,19 @@ * 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)instruction_pointer(regs), 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, (unsigned int)instruction_pointer(regs), AVM_PROFILE_PAGE_FAULT_ID); +#endif/*--- #if defined(CONFIG_AVM_SIMPLE_PROFILING) ---*/ if (unlikely(fault & VM_FAULT_ERROR)) { mm_fault_error(regs, error_code, address, fault);