aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/smp.c
diff options
context:
space:
mode:
authorKevin Tian <kevin.tian@intel.com>2011-08-31 15:18:23 +0100
committerKevin Tian <kevin.tian@intel.com>2011-08-31 15:18:23 +0100
commita81d0ee933c35323f32269dad37977934b6cbb28 (patch)
tree1202c69e945e73341870451b43622fa35408763a /xen/arch/x86/smp.c
parent2f4c78e40fd1a9a6d4039dff42ecb37ba8087f99 (diff)
downloadxen-a81d0ee933c35323f32269dad37977934b6cbb28.tar.gz
xen-a81d0ee933c35323f32269dad37977934b6cbb28.tar.bz2
xen-a81d0ee933c35323f32269dad37977934b6cbb28.zip
x86: add irq count for IPIs
such count is useful to assist decision make in cpuidle governor, while w/o this patch only device interrupts through do_IRQ is currently counted. Signed-off-by: Kevin Tian <kevin.tian@intel.com>
Diffstat (limited to 'xen/arch/x86/smp.c')
-rw-r--r--xen/arch/x86/smp.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/xen/arch/x86/smp.c b/xen/arch/x86/smp.c
index 2f527079cd..3edebf3df1 100644
--- a/xen/arch/x86/smp.c
+++ b/xen/arch/x86/smp.c
@@ -221,6 +221,7 @@ fastcall void smp_invalidate_interrupt(void)
{
ack_APIC_irq();
perfc_incr(ipis);
+ this_cpu(irq_count)++;
irq_enter();
if ( !__sync_local_execstate() ||
(flush_flags & (FLUSH_TLB_GLOBAL | FLUSH_CACHE)) )
@@ -385,6 +386,7 @@ fastcall void smp_event_check_interrupt(struct cpu_user_regs *regs)
struct cpu_user_regs *old_regs = set_irq_regs(regs);
ack_APIC_irq();
perfc_incr(ipis);
+ this_cpu(irq_count)++;
set_irq_regs(old_regs);
}
@@ -421,6 +423,7 @@ fastcall void smp_call_function_interrupt(struct cpu_user_regs *regs)
ack_APIC_irq();
perfc_incr(ipis);
+ this_cpu(irq_count)++;
__smp_call_function_interrupt();
set_irq_regs(old_regs);
}