[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [Xen-devel] page fault in xmem_pool_alloc w/ TXT



Jan Beulich wrote on 2011-03-25:
> This appears to be caused by that changset's change to
> xen/drivers/passthrough/vtd/dmar.c - I didn't notice that
> tboot_parse_dmar_table() would call acpi_parse_dmar() on a copy of the
> table rather than the original, and I also can't see why it needs to
> do so. Just not freeing the table copy should at least get the crash
> resolved, but the zapping then still wouldn't work. Me agreeing to
> reverting that part of the change needs explanation why things need to
> be done this way (i.e. why, if Dom0 can find the real table anyway,
> Xen can't use it directly), and would perhaps force quite a bit of
> code back out of .init.*, which I'd really like to avoid. Plus, this
> code in
> tboot_parse_dmar_table() looks more like a hack currently.
> 
> Hmm, wait - an apparently simple alternative might be to have
> acpi_parse_dmar() or acpi_dmar_init() do what get_dmar() did before
> (rather than simply using acpi_parse_dmar()'s input to store into
> dmar_table). Could you give the patch below a try (I kept the
> disabling of IRQs, but I don't think that is necessary anymore)?

I applied this patch on c/s 23013 and tested, it makes things working again.

BTW, just looked into the code before 23013, the original acpi_dmar_reinstate() 
should never work because acpi_get_table(ACPI_SIG_DMAR, 0, &dmar_table) could 
not find the dmar table after it was zapped during the booting. That may be 
reason why tboot S3 don't work recently. I haven't verified whether tboot S3 is 
working after apply this patch yet, and may give it a try next week.

Jimmy

> 
> Jan
> 
> --- a/xen/drivers/passthrough/vtd/dmar.c
> +++ b/xen/drivers/passthrough/vtd/dmar.c
> @@ -673,7 +673,6 @@ static int __init acpi_parse_dmar(struct
>      u8 dmar_host_address_width;
>      int ret = 0;
> -    dmar_table = table;
>      dmar = (struct acpi_table_dmar *)table;
>      
>      if ( !iommu_enabled )
> @@ -762,6 +761,13 @@ out:
> 
>  int __init acpi_dmar_init(void)
>  {
> +    unsigned long flags;
> +
> +    /* Disabling IRQs avoids cross-CPU TLB flush in map_pages_to_xen(). */
> +    local_irq_save(flags);
> +    acpi_get_table(ACPI_SIG_DMAR, 0, &dmar_table);
> +    local_irq_restore(flags);
> +
>      return parse_dmar_table(acpi_parse_dmar);
>  }
>



Jimmy



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.