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

RE: [Xen-devel] Dom0 hypercall for adding and removing PCI devices



Isn't enough to first switch VT-d page table, and then flush IOTLB?
As long as RMRRs are kept same in two VT-d tables, and in any
time a valid entry (either in IOTLB or by walking) can be found, 
above sequence seems complete.

Thanks,
Kevin

>From: Keir Fraser
>Sent: 2008年7月24日 16:38
>
>Can the pagetable switch not be made atomic (i.e., so that the 
>RMRR regions
>appear continuously available throughout)? I'd have thought 
>that would just
>naturally happen.
>
>If creating/destroying RMRR mappings is part of the switch 
>operation, you'd
>have to destroy RMRR mappings in the dom0 table after the 
>switch, and create
>RMRR mappings in the fallback table before the switch. Or just 
>have RMRR
>mappings always mapped into all tables.
>
> -- Keir
>
>On 24/7/08 09:32, "Han, Weidong" <weidong.han@xxxxxxxxx> wrote:
>
>> We found USB (has RMRR) is firstly assigned to dom0, but 
>pci_bus_probe()
>> failed, then it was removed from dom0. The removing needs 
>switch to RMRR
>> VT-d page table. At the same time, BIOS was using its RMRR.
>> 
>> Randy (Weidong)
>> 
>> Keir Fraser wrote:
>>> If a device is assigned to a domain (in this case dom0) then that
>>> domain's VT-d pagetables will contain the RMRR mappings for that
>>> device. Hence BIOS can perform DMA in those RMRR-indicated regions
>>> without swapping to and fro between domain tables and fallback RMRR
>>> tables. The new fallback RMRR table would be just that -- a fallback
>>> table used for any device not currently assigned to any domain (and
>>> hence those devices should only have DMAs initiated by the BIOS, if
>>> at all). 
>>> 
>>>  -- Keir
>>> 
>>> On 24/7/08 09:20, "Han, Weidong" <weidong.han@xxxxxxxxx> wrote:
>>> 
>>>> I have another concern, when BIOS is initiating DMA operation using
>>>> RMRR, can we use RMRR VT-d page table to replace dom0 VT-d page
>>>> table? Does it result in some DMA failures?
>>>> 
>>>> Randy (weidong)
>>>> 
>>>> Han, Weidong wrote:
>>>>> Espen Skoglund wrote:
>>>>>> [Keir Fraser]
>>>>>>> On 23/7/08 10:26, "Han, Weidong" <weidong.han@xxxxxxxxx> wrote:
>>>>>>>>> So this would be one extra VT-d pagetable, for the 
>whole system,
>>>>>>>>> which would be the fallback location for RMRR mappings for
>>>>>>>>> devices which are currently not assigned to any domain? Thus
>>>>>>>>> allowing firmware to successfully initiate DMA operations on
>>>>>>>>> those devices? Sounds sensible.
>>>>>> 
>>>>>> Well, the VT-d page table for RMRR devices need not contain the
>>>>>> whole system memory---only those regions specified in the DMAR
>>>>>> tables. 
>>>>>> 
>>>>>>>> Is it possible that idle_domain owns the RMRR VT-d page table?
>>>>>> 
>>>>>>> If that's a convenient place to stash it then why not? 
>Either way,
>>>>>>> seems you're going to have it special-cased in the code as
>>>>>>> fallback owner for unassigned devices. It's possible that having
>>>>>>> it stashed in the idle domain will simply make the code more
>>>>>>> confusing. I'm not sure though.
>>>>>> 
>>>>>> Right.  I don't see any particular good reason to 
>associate it with
>>>>>> the idle domain.  As noted above, the page table need not even
>>>>>> cover the whole memory, and it will never change after being set
>>>>>> up at boot time.  If special case code is needed anyway, then one
>>>>>> might as well install a custom VT-d page table.
>>>>> 
>>>>> What does "custom VT-d page table" mean?
>>>>> 
>>>>> Due to domain id is not the same with DID field in context, we can
>>>>> reverse a DID for RMRR VT-d page table, it can avoid to associate
>>>>> with idle domain.
>>>>> 
>>>>> Currently we reassign the device from dom0 to target domain when
>>>>> assign a device, and return the device to dom0 when target domain
>>>>> tears down. It's not correct due to some devices may be 
>not assigned
>>>>> to any domain. Current device_assigned() also needs to be changed.
>>>>> Maybe it needs more changes on VT-d.
>>>>> 
>>>>> I have some concerns, maybe I missed something. Why did 
>you use dom0
>>>>> hypercall approach to replace original method? What's the main
>>>>> benefit? I also wonder it's suitable to wrap pci_bus_probe()
>>>>> function. 
>>>>> 
>>>>> Randy (Weidong)
>>>>> 
>>>>>> 
>>>>>> If supported by hardware, the extra page tables can even 
>be skipped
>>>>>> altogether and the device marked as having passthrough access.
>>>>>> That would give the RMRR device complete access to system memory,
>>>>>> though. 
>>>>>> 
>>>>>> eSk
>> 
>
>
>
>_______________________________________________
>Xen-devel mailing list
>Xen-devel@xxxxxxxxxxxxxxxxxxx
>http://lists.xensource.com/xen-devel
>

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