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

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



Exactly my thought.

 K.

On 24/7/08 09:43, "Tian, Kevin" <kevin.tian@xxxxxxxxx> wrote:

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