Isaku Yamahata wrote:
> Could you elaborate on the concrete issue which you're seeing?
> I guess the issue occurs when passed through pci device
> is unplugged. But in that case, the region was occupied by
> the device so that qemu haven't seen io on the area anyway.
For assigning a device to a hvm domain, all mmio regions of the pci device
should be mapped in p2m table, but a corner case is that accessing some
pages(for example, vector table in msi-x's bar) in one region maybe need route
to qemu and emulate the corresponding logic in qemu. In that case, we have to
remove the mapping for the specified pages in p2m, and let accessing these
pages intercepted by hyperviosr and forward the io requests to qemu. But
zap_domain_page_one can't intilziate the mmio p2m entries for hvm domain.
Clear ? :-)
> And why GPFN_LOW_MMIO independently of addr? Shouldn't it be aware
> of io_ranges[]?
For the low mmio ranges (3G-3.5G), we can use the fixed mfn GPFN_LOW_MMIO
combined with ASSIGN_io to indicate whether the p2m entries are mmio ranges.
You may refer to io_ranges and it also use the fixed GPFN_LOW_MMIO to intialize
p2m entries for low mmio range.
Xiantao
>
> On Tue, Mar 03, 2009 at 03:14:02PM +0800, Zhang, Xiantao wrote:
>> PATCH: Fix the logic when deassign the mmio ranges for vti-domain.
>>
>> When de-assign the mmio range, it should resume its original value
>> for p2m value, otherwise, it may fail to determin mmio range's type.
>>
>> Signed-off-by: Xiantao Zhang <xiantao.zhang@xxxxxxxxx>
>>
>> diff -r 67f2e14613ef xen/arch/ia64/xen/mm.c
>> --- a/xen/arch/ia64/xen/mm.c Tue Feb 10 13:47:02 2009 +0800
>> +++ b/xen/arch/ia64/xen/mm.c Tue Mar 03 15:04:54 2009 +0800
>> @@ -1508,8 +1508,14 @@ deassign_domain_mmio_page(struct domain
>> return -EINVAL; }
>>
>> - for (; addr < end; addr += PAGE_SIZE )
>> - zap_domain_page_one(d, addr, 0, INVALID_MFN);
>> + for (; addr < end; addr += PAGE_SIZE ) {
>> + if (is_hvm_domain(d))
>> + __assign_domain_page(d, addr, GPFN_LOW_MMIO <<
>> PAGE_SHIFT, +
>> ASSIGN_writable |
>> ASSIGN_io); + else + zap_domain_page_one(d, addr, 0,
>> INVALID_MFN); + } +
>> return 0;
>> }
>>
>
>> _______________________________________________
>> Xen-ia64-devel mailing list
>> Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
>> http://lists.xensource.com/xen-ia64-devel
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
|