Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:Maintenance:114
xen.openSUSE_Evergreen_11.4
23804-x86-IPI-counts.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 23804-x86-IPI-counts.patch of Package xen.openSUSE_Evergreen_11.4
# HG changeset patch # User Kevin Tian <kevin.tian@intel.com> # Date 1314800303 -3600 # Node ID 42d76c68b2bfbedee3e5f79d32344e14bce48b0f # Parent 51983821efa4db4040ae1c5063a4404791597699 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> --- a/xen/arch/x86/apic.c +++ b/xen/arch/x86/apic.c @@ -1327,6 +1327,7 @@ fastcall void smp_apic_timer_interrupt(s struct cpu_user_regs *old_regs = set_irq_regs(regs); ack_APIC_irq(); perfc_incr(apic_timer); + this_cpu(irq_count)++; raise_softirq(TIMER_SOFTIRQ); set_irq_regs(old_regs); } @@ -1339,6 +1340,7 @@ fastcall void smp_spurious_interrupt(str unsigned long v; struct cpu_user_regs *old_regs = set_irq_regs(regs); + this_cpu(irq_count)++; irq_enter(); /* * Check if this really is a spurious interrupt and ACK it @@ -1365,6 +1367,7 @@ fastcall void smp_error_interrupt(struct unsigned long v, v1; struct cpu_user_regs *old_regs = set_irq_regs(regs); + this_cpu(irq_count)++; irq_enter(); /* First tickle the hardware, only then report what went on. -- REW */ v = apic_read(APIC_ESR); @@ -1397,6 +1400,7 @@ fastcall void smp_pmu_apic_interrupt(str { struct cpu_user_regs *old_regs = set_irq_regs(regs); ack_APIC_irq(); + this_cpu(irq_count)++; hvm_do_pmu_interrupt(regs); set_irq_regs(old_regs); } --- a/xen/arch/x86/cpu/mcheck/mce_intel.c +++ b/xen/arch/x86/cpu/mcheck/mce_intel.c @@ -83,6 +83,7 @@ static void (*vendor_thermal_interrupt)( fastcall void smp_thermal_interrupt(struct cpu_user_regs *regs) { struct cpu_user_regs *old_regs = set_irq_regs(regs); + this_cpu(irq_count)++; irq_enter(); vendor_thermal_interrupt(regs); irq_exit(); @@ -977,6 +978,7 @@ fastcall void smp_cmci_interrupt(struct struct cpu_user_regs *old_regs = set_irq_regs(regs); ack_APIC_irq(); + this_cpu(irq_count)++; irq_enter(); mctc = mcheck_mca_logout( --- a/xen/arch/x86/io_apic.c +++ b/xen/arch/x86/io_apic.c @@ -533,6 +533,7 @@ fastcall void smp_irq_move_cleanup_inter struct cpu_user_regs *old_regs = set_irq_regs(regs); ack_APIC_irq(); + this_cpu(irq_count)++; irq_enter(); me = smp_processor_id(); --- a/xen/arch/x86/smp.c +++ b/xen/arch/x86/smp.c @@ -210,6 +210,7 @@ fastcall void smp_invalidate_interrupt(v { ack_APIC_irq(); perfc_incr(ipis); + this_cpu(irq_count)++; irq_enter(); if ( !__sync_lazy_execstate() || (flush_flags & (FLUSH_TLB_GLOBAL | FLUSH_CACHE)) ) @@ -375,6 +376,7 @@ fastcall void smp_event_check_interrupt( 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); } @@ -411,6 +413,7 @@ fastcall void smp_call_function_interrup ack_APIC_irq(); perfc_incr(ipis); + this_cpu(irq_count)++; __smp_call_function_interrupt(); set_irq_regs(old_regs); }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor