OK. Then restoring DMAR is not necessary before S3.
But I am thinking whether we need to hide DMAR again after S3 resume.
Thanks.
Shane
Keir Fraser wrote on 2011-01-10:
> On 10/01/2011 03:32, "Wang, Shane" <shane.wang@xxxxxxxxx> wrote:
>
>> Put the code for hidding and restoring DMAR table from tboot into
>> Xen in order to fix S3 broken issue with TXT launch.
>
> We already do this in arch/x86/acpi/power.c:enter_state(). Since
> enter_state() is in the call stack of tboot_shutdown(), via
> tboot_sleep(), this patch is unnecessary. In fact
> acpi_dmar_reinstate() is not idempotent, so I actually think this patch takes
> a reinstated DMAR and breaks its checksum!
>
> -- Keir
>
>> Signed-off-by: Shane Wang <shane.wang@xxxxxxxxx>
>>
>> diff -r 946d84529a07 xen/arch/x86/tboot.c
>> --- a/xen/arch/x86/tboot.c Sat Jan 08 11:07:18 2011 +0000
>> +++ b/xen/arch/x86/tboot.c Wed Jan 12 01:37:14 2011 +0800
>> @@ -352,6 +352,9 @@ void tboot_shutdown(uint32_t shutdown_ty
>>
>> /* if this is S3 then set regions to MAC */
>> if ( shutdown_type == TB_SHUTDOWN_S3 ) {
>> + /* restore DMAR table */
>> + acpi_dmar_reinstate();
>> +
>> /*
>> * Xen regions for tboot to MAC
>> */
>> @@ -484,6 +487,7 @@ int tboot_s3_resume(void) int
>> tboot_s3_resume(void) {
>> vmac_t mac;
>> + int ret = 0;
>>
>> if ( !tboot_in_measured_env() )
>> return 0;
>> @@ -492,22 +496,30 @@ int tboot_s3_resume(void)
>> tboot_gen_xenheap_integrity(g_tboot_shared->s3_key, &mac);
>> printk("MAC for xenheap before S3 is: 0x%08"PRIx64"\n",
>> xenheap_mac); printk("MAC for xenheap after S3 is:
>> 0x%08"PRIx64"\n", mac);
>> - if ( mac != xenheap_mac )
>> - return -1;
>> + if ( mac != xenheap_mac ) {
>> + ret = -1;
>> + goto exit;
>> + }
>>
>> tboot_gen_frametable_integrity(g_tboot_shared->s3_key, &mac);
>> printk("MAC for frametable before S3 is: 0x%08"PRIx64"\n",
>> frametable_mac); printk("MAC for frametable after S3 is:
>> 0x%08"PRIx64"\n", mac);
>> - if ( mac != frametable_mac )
>> - return -2;
>> + if ( mac != frametable_mac ) {
>> + ret = -2;
>> + goto exit;
>> + }
>>
>> tboot_gen_domain_integrity(g_tboot_shared->s3_key, &mac);
>> printk("MAC for domains before S3 is: 0x%08"PRIx64"\n",
>> domain_mac); printk("MAC for domains after S3 is:
>> 0x%08"PRIx64"\n", mac);
>> - if ( mac != domain_mac )
>> - return -3;
>> + if ( mac != domain_mac ) {
>> + ret = -3;
>> + goto exit;
>> + }
>>
>> - return 0;
>> +exit:
>> + acpi_dmar_zap();
>> + return ret;
>> }
>>
>> /*
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|