Jan Beulich wrote onĀ 2012-01-05:
>>>> On 05.01.12 at 15:53, "Wei, Gang" <[email protected]> wrote:
>> tboot may be trying to put APs waiting in MWAIT loops before launching Xen.
>> Xen could check the new flag field in v6 tboot shared page for the
>> hint. If TB_FLAG_AP_WAKE_SUPPORT bit in flag field is set, Xen BSP
>> have to write the monitored memory(g_tboot_shared->ap_wake_trigger)
>> to bring APs out of MWAIT loops. The sipi vector should be written
>> in g_tboot_shared->ap_wake_addr before waking up APs.
>>
>> Signed-off-by: Joseph Cihula <[email protected]>
>> Signed-off-by: Shane Wang <[email protected]>
>> Signed-off-by: Gang Wei <[email protected]>
>>
>> diff -r cbf1ce3afd74 xen/arch/x86/smpboot.c
>> --- a/xen/arch/x86/smpboot.c Sat Dec 31 16:18:55 2011 +0800
>> +++ b/xen/arch/x86/smpboot.c Sat Dec 31 18:50:14 2011 +0800
>> @@ -586,7 +586,9 @@
>> smpboot_setup_warm_reset_vector(start_eip);
>>
>> /* Starting actual IPI sequence... */
>> - boot_error = wakeup_secondary_cpu(apicid, start_eip);
>> + boot_error = tboot_wake_ap(apicid, start_eip);
>
> As tboot.h is being included here anyway, it would seem more clean to
> me to guard the call with tboot_in_measured_env() here rather than in
> the called function.
Ok, to be updated in next version.
>> + if ( boot_error )
>> + boot_error = wakeup_secondary_cpu(apicid, start_eip);
>>
>> if ( !boot_error )
>> {
>> diff -r cbf1ce3afd74 xen/arch/x86/tboot.c
>> --- a/xen/arch/x86/tboot.c Sat Dec 31 16:18:55 2011 +0800
>> +++ b/xen/arch/x86/tboot.c Sat Dec 31 18:50:14 2011 +0800
>> @@ -123,6 +123,10 @@
>> printk(" shutdown_entry: 0x%08x\n",
>> tboot_shared->shutdown_entry); printk(" tboot_base: 0x%08x\n",
>> tboot_shared->tboot_base); printk(" tboot_size: 0x%x\n",
>> tboot_shared->tboot_size);
>> + if ( tboot_shared->version >= 5 )
>> + printk(" num_in_wfs: %u\n", tboot_shared->num_in_wfs);
>
> You're printing this field, but aren't making any other use of it?
This field is just used by Linux kernel. I will remove this printk.
>> + if ( tboot_shared->version >= 6 )
>> + printk(" flags: 0x%08x\n", tboot_shared->flags);
>>
>> /* these will be needed by tboot_protect_mem_regions() and/or
>> tboot_parse_dmar_table(), so get them now */ @@ -529,6
> +533,19
>> @@
>> panic("Memory integrity was lost on resume (%d)\n", error); }
>> +int tboot_wake_ap(int apicid, unsigned long sipi_vec) {
>> + if ( tboot_in_measured_env() && g_tboot_shared->version >= 6 &&
>> + (g_tboot_shared->flags & TB_FLAG_AP_WAKE_SUPPORT) )
>> + {
>> + printk("waking AP %d w/ monitor write\n", apicid);
>
> Please, no once-per-CPU printk()-s, especially if they don't depend on
> per-CPU properties.
Ok, remove it in next version.
>> + g_tboot_shared->ap_wake_addr = sipi_vec;
>> + g_tboot_shared->ap_wake_trigger = apicid;
>> + return 0;
>> + }
>> + return -1;
>> +}
>> +
>> /*
>> * Local variables:
>> * mode: C
Thanks for comments.
Jimmy
------------------------------------------------------------------------------
Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex
infrastructure or vast IT resources to deliver seamless, secure access to
virtual desktops. With this all-in-one solution, easily deploy virtual
desktops for less than the cost of PCs and save 60% on VDI infrastructure
costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox
_______________________________________________
tboot-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tboot-devel