# HG changeset patch
# User Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
# Date 1231232732 -32400
# Node ID 8df294a89a362305b3349937aaed65d76b3b81da
# Parent 29a0ecb8a711b28afab72839b57c35571391db14
[IA64] Fix some IPF Xen VT-d bugs.
In arch_domain_create(): when xen creates Dom0, need_iommu(d) is false,
so iommu_domain_init() is not invoked, as a result, eventually iommu is
not enabled properly.
Note: d->need_iommu is set to 1 only by assign_device() which is never
called for dom0. And it is called via XEN_DOMCTL_assign_device hypercall.
In IA64 Xen, physdev_map_pirq()/physdev_unmap_pirq() are kept dummy since
we don't support MSI in IA64 Xen now, but here they shouldn't return
-ENOSYS because xend invokes them (the x86 version of them is necessary
for x86 Xen); in IPF Xen if they return -ENOSYS, xend would disallow us
to create IPF HVM guest with devices assigned. Here They can return 0 instead.
Signed-off-by: Dexuan Cui <dexuan.cui@xxxxxxxxx>
---
xen/arch/ia64/xen/domain.c | 6 ++----
xen/arch/ia64/xen/hypercall.c | 10 +++++++---
2 files changed, 9 insertions(+), 7 deletions(-)
diff -r 29a0ecb8a711 -r 8df294a89a36 xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c Mon Jan 05 14:13:38 2009 +0900
+++ b/xen/arch/ia64/xen/domain.c Tue Jan 06 18:05:32 2009 +0900
@@ -602,10 +602,8 @@ int arch_domain_create(struct domain *d,
if ((d->arch.mm.pgd = pgd_alloc(&d->arch.mm)) == NULL)
goto fail_nomem;
- if ( iommu_enabled && (is_hvm_domain(d) || need_iommu(d)) ){
- if(iommu_domain_init(d) != 0)
- goto fail_iommu;
- }
+ if(iommu_domain_init(d) != 0)
+ goto fail_iommu;
/*
* grant_table_create() can't fully initialize grant table for domain
diff -r 29a0ecb8a711 -r 8df294a89a36 xen/arch/ia64/xen/hypercall.c
--- a/xen/arch/ia64/xen/hypercall.c Mon Jan 05 14:13:38 2009 +0900
+++ b/xen/arch/ia64/xen/hypercall.c Tue Jan 06 18:05:32 2009 +0900
@@ -466,16 +466,20 @@ iosapic_guest_write(
/*
- * XXX We don't support MSI for PCI passthrough, so just return ENOSYS
+ * XXX: We don't support MSI for PCI passthrough at present, so make the
+ * following 2 functions dummy for now. They shouldn't return -ENOSYS
+ * because xend invokes them (the x86 version of them is necessary for
+ * x86 Xen); if they return -ENOSYS, xend would disallow us to create
+ * IPF HVM guest with devices assigned so here they can return 0.
*/
static int physdev_map_pirq(struct physdev_map_pirq *map)
{
- return -ENOSYS;
+ return 0;
}
static int physdev_unmap_pirq(struct physdev_unmap_pirq *unmap)
{
- return -ENOSYS;
+ return 0;
}
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|