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

[Xen-devel] Intel IOMMU: Assigning IGD device: 00:02.1 on some machines, causes Xen to freeze for >2mins because of RMRR mappings


  • To: xen-devel@xxxxxxxxxxxxxxxxxxx
  • From: Tom Rotenberg <tom.rotenberg@xxxxxxxxx>
  • Date: Sun, 29 Nov 2009 19:56:20 +0200
  • Cc: "Han, Weidong" <weidong.han@xxxxxxxxx>
  • Delivery-date: Sun, 29 Nov 2009 09:56:43 -0800
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:cc:content-type; b=q24upSBpILHyFAi2MHiR34NGgfkRk3DxxSEHyeA2tB96YWMKfHFdU/qdliq+75amwF MAECOHy9ICBgiFIAgLlS9QizjUoNOBpTbEvxwhIEc7Ke3Knf3M3S1T4Uaq6c2l0q91sh aYj8+kkbOAD5/l98V5B9rSLNYPD3ktJeqL1TQ=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

Hi All,

I am using a Dell E6400 machine, with IGD (Intel graphics device),
which i'm trying to pass-through into a domU with Windows XP. When i
assign only the 00:02.0 device, it seems to work ok, but when i try to
assign the 00:02.1 device, the whole machine seems to freeze form more
then 2 mins, causing a lot of messgaes in dom0, such as: SATA doesn't
respond, etc.

After some analysis i made, i discovered the followings:
* When calling the (Intel) iommu_assign_device, it checks if the
device has any details in the RMRR table, and if so it calls the
'iommu_prepare_rmrr_dev()' function.
* The device 00:02.1 has an RMRR information, which details the whole
area between:  0x7dc00000 to 0x80000000  (it contains ~9000 pages)
* For each such page, Xen calls the 'intel_iommu_map_page()' function.
This causes the hypercall to take a lot of time to process, and this
makes dom0 to stop getting responds from devices, such as SATA, etc,,
which may lead to a whole system  crash.

My question are:
1. Can this hypercall be in some way preemptive, so it won't stuck the
whole system (i noticed that there are other hypercalls, which are
preemptive) ?
2. Why can't the mapping of the pages, be done in batches of pages,
instead of mapping each page in a separate call to
'intel_iommu_map_page()' ?
3. i noticed that for USB devices, the code there ignores the USB
RMRR... can this be done also for the 00:02.1 device?

Tom

_______________________________________________
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®.