[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] [xen/swiotlb] Enable Xen-SWIOTLB only if running in privileged domain or if in non-privileged with iommu=soft.
Previous to this patch we would unconditionally enable Xen-SWIOTLB if running in PV context. That does not work with Xen 3.4.2 as it has a security check to disable exchanging of MFNs if no PCI devices have been passed through. In 4.0 there is an additional check to allow 2MB super-pages - we accidentally circumvented that by exchanging pages under the 2MB chunk size even without any PCI devices passed through. Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> --- arch/x86/xen/pci-swiotlb.c | 6 ++++-- drivers/pci/xen-pcifront.c | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/arch/x86/xen/pci-swiotlb.c b/arch/x86/xen/pci-swiotlb.c index ecdbfe2..6195eb9 100644 --- a/arch/x86/xen/pci-swiotlb.c +++ b/arch/x86/xen/pci-swiotlb.c @@ -960,7 +960,8 @@ xen_swiotlb_fixup(void *buf, size_t size, unsigned long nslabs) dma_bits); } while (rc && dma_bits++ < max_dma_bits); if (rc) - panic(KERN_ERR "xen_create_contiguous_region failed\n"); + panic(KERN_ERR "xen_create_contiguous_region failed: " + "rc: %d\n", rc); i += slabs; } while(i < nslabs); @@ -984,7 +985,8 @@ static struct dma_map_ops xen_swiotlb_dma_ops = { void __init xen_swiotlb_init(void) { - if (xen_domain()) { + /* For PV guest, only if iommu=soft is passed in. */ + if (xen_pv_domain() && (xen_initial_domain() || swiotlb)) { printk(KERN_INFO "PCI-DMA: Using Xen software bounce buffering for IO (Xen-SWIOTLB)\n"); xen_swiotlb_init_with_default_size(64 * (1<<20)); /* default to 64MB */ dma_ops = &xen_swiotlb_dma_ops; diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c index cc3b51b..3436202 100644 --- a/drivers/pci/xen-pcifront.c +++ b/drivers/pci/xen-pcifront.c @@ -1052,6 +1052,8 @@ static void __init_refok pcifront_backend_changed(struct xenbus_device *xdev, case XenbusStateInitWait: case XenbusStateInitialised: case XenbusStateClosed: + dev_warn(&xdev->dev, "Device is in %d state. Need to change " + "state on the privileged domain.\n", be_state); break; case XenbusStateConnected: -- 1.6.2.5 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |