xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: "Jan Beulich" <JBeulich@novell.com>
To: Joseph Cihula <joseph.cihula@intel.com>
Cc: Shane Wang <shane.wang@intel.com>,
	Xen-devel <xen-devel@lists.xensource.com>,
	Gang Wei <gang.wei@intel.com>
Subject: RE: page fault in xmem_pool_alloc w/ TXT
Date: Fri, 25 Mar 2011 11:49:28 +0000	[thread overview]
Message-ID: <4D8C8F580200007800038565@vpn.id2.novell.com> (raw)
In-Reply-To: <4F65016F6CB04E49BFFA15D4F7B798D901607954F3@orsmsx506.amr.corp.intel.com>

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)?

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);
 }
 

  parent reply	other threads:[~2011-03-25 11:49 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-24 15:41 page fault in xmem_pool_alloc w/ TXT Cihula, Joseph
2011-03-24 16:02 ` Keir Fraser
2011-03-24 16:56 ` Jan Beulich
     [not found]   ` <4F65016F6CB04E49BFFA15D4F7B798D901607954F3@orsmsx506.amr.corp.intel.com>
2011-03-25 11:49     ` Jan Beulich [this message]
2011-03-25 15:34       ` Wei, Gang
2011-03-25 15:57       ` Cihula, Joseph

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4D8C8F580200007800038565@vpn.id2.novell.com \
    --to=jbeulich@novell.com \
    --cc=gang.wei@intel.com \
    --cc=joseph.cihula@intel.com \
    --cc=shane.wang@intel.com \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).