|
|
|
|
|
|
|
|
|
|
xen-devel
[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)
cpuidle_mwait_fix.patch
Description: cpuidle_mwait_fix.patch
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|