|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86: add a new SMP bring up way for tboot case
Jan Beulich wrote on 2012-01-05:
>>>> On 05.01.12 at 15:53, "Wei, Gang" <gang.wei@xxxxxxxxx> 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 <joseph.cihula@xxxxxxxxx>
>> Signed-off-by: Shane Wang <shane.wang@xxxxxxxxx>
>> Signed-off-by: Gang Wei <gang.wei@xxxxxxxxx>
>>
>> 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
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |