--- zzzz-none-000/linux-2.6.39.4/arch/x86/kernel/smp.c 2011-08-03 19:43:28.000000000 +0000 +++ puma6-atom-6490-729/linux-2.6.39.4/arch/x86/kernel/smp.c 2021-11-10 13:38:14.000000000 +0000 @@ -28,6 +28,12 @@ #include #include #include +#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) ---*/ /* * Some notes on x86 processor bugs affecting SMP operation: * @@ -211,8 +217,22 @@ { ack_APIC_irq(); irq_enter(); +#if defined(CONFIG_AVM_POWER) + avm_cpu_wait_end(); /*--- auch wenn es wait_irqoff gibt: trotzdem aufrufen, um system-load-Ausgabe zu triggern ---*/ +#endif/*--- #if defined(CONFIG_AVM_POWER) ---*/ +#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) ---*/ + avm_simple_profiling_log(avm_profile_data_type_hw_irq_begin, (unsigned int)smp_call_function_interrupt, 0x101); +#endif/*--- #if defined(CONFIG_AVM_SIMPLE_PROFILING) ---*/ generic_smp_call_function_interrupt(); inc_irq_stat(irq_call_count); +#if defined(CONFIG_AVM_SIMPLE_PROFILING) + avm_simple_profiling_log(avm_profile_data_type_hw_irq_end, (unsigned int)smp_call_function_interrupt, 0x101); +#endif/*--- #if defined(CONFIG_AVM_SIMPLE_PROFILING) ---*/ irq_exit(); } @@ -220,8 +240,22 @@ { ack_APIC_irq(); irq_enter(); +#if defined(CONFIG_AVM_POWER) + avm_cpu_wait_end(); /*--- auch wenn es wait_irqoff gibt: trotzdem aufrufen, um system-load-Ausgabe zu triggern ---*/ +#endif/*--- #if defined(CONFIG_AVM_POWER) ---*/ +#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) ---*/ + avm_simple_profiling_log(avm_profile_data_type_hw_irq_begin, (unsigned int)smp_call_function_single_interrupt, 0x102); +#endif/*--- #if defined(CONFIG_AVM_SIMPLE_PROFILING) ---*/ generic_smp_call_function_single_interrupt(); inc_irq_stat(irq_call_count); +#if defined(CONFIG_AVM_SIMPLE_PROFILING) + avm_simple_profiling_log(avm_profile_data_type_hw_irq_end, (unsigned int)smp_call_function_single_interrupt, 0x102); +#endif/*--- #if defined(CONFIG_AVM_SIMPLE_PROFILING) ---*/ irq_exit(); }