[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] RE: "monitor"-ed address and IPI reduction
Wei, Gang wrote: > Jan Beulich wrote: >> What is the point of specifying "current" as the address to monitor? > > You provide a good point. The original purpose to monitor "current" > is to avoid accidentally wakeup while relying on ipi for waking up > mechanism. > >> The memory location of interest really is >> irq_stat[cpu].__softirq_pending, and if that was used it would then >> also be possible to actually avoid sending IPIs when monitor/mwait >> are in use, as is being done on Linux. > > I agree that we can have a try on this. Waking up cpu by mem write > should be more efficient for monitor/mwait case. Here is a patch to monitor "sortirq_pending" instead of "current". The IPI reduction part may be a bit complex, can we hold it for post-4.0? Jimmy --------------------------- CPUIDLE: monitor "sortirq_pending" instead of "current" Signed-off-by: Yu Ke <ke.yu@xxxxxxxxx> Signed-off-by: Wei Gang <gang.wei@xxxxxxxxx> diff -r 132ac04cbdba xen/arch/x86/acpi/cpu_idle.c --- a/xen/arch/x86/acpi/cpu_idle.c Tue Mar 09 18:18:19 2010 +0000 +++ b/xen/arch/x86/acpi/cpu_idle.c Wed Mar 10 11:23:14 2010 +0800 @@ -142,9 +142,13 @@ static void acpi_safe_halt(void) static void mwait_idle_with_hints(unsigned long eax, unsigned long ecx) { - __monitor((void *)current, 0, 0); + int cpu = smp_processor_id(); + + __monitor((void *)&softirq_pending(cpu), 0, 0); + smp_mb(); - __mwait(eax, ecx); + if ( !softirq_pending(cpu) ) + __mwait(eax, ecx); } static void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx *cx) Attachment:
cpuidle_mwait_fix.patch _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |