[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] I cannot get any message from domU by console / pv_ops domU kernel crashes with xen_create_contiguous_region failed
On Tue, Dec 22, 2009 at 11:19:19AM -0500, Konrad Rzeszutek Wilk wrote: > On Tue, Dec 22, 2009 at 04:09:36PM +0000, Ian Campbell wrote: > > On Tue, 2009-12-22 at 15:47 +0000, Konrad Rzeszutek Wilk wrote: > > > > I thought it used to be that you could only (successfully) make order>0 > > > > increase_reservation or mem_exchange hypercalls if you had I/O > > > > privileges? Has this changed? > > > > > > I am looking at the 3.4 code I am not seeing any I/O privileges check. > > > > > > I did not even know that those existed actually - could you give me an > > > idea > > > when was the last time you saw it? > > > > In xen-unstable multipage_allocation_permitted is called from > > memory_exchange() and increase_reservation() and is defined as > > #define multipage_allocation_permitted(d, order) \ > > (((order) <= 9) || /* allow 2MB superpages */ \ > > !rangeset_is_empty((d)->iomem_caps) || \ > > !rangeset_is_empty((d)->arch.ioport_caps)) > > > > The ((order) <= 9) || is new and isn't present in the 3.4 tree, > > previously you would have had to add a passthrough device to cause one > > of the other rangesets to become non-empty. > > AAh, and since the exchange of memory is done in small chunks we pass > underneath the radar even if did not have the passthrough device set. > > Ian, thanks for finding the culprit. Let me roll out a patch that > will do what was done in the past (ie, turn SWIOTLB for DomU only > when iommu=soft was passed in) as a fix. Jeremy, Please consider this patch to the PV-OPS tree. [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> diff --git a/arch/x86/xen/pci-swiotlb.c b/arch/x86/xen/pci-swiotlb.c index ecdbfe2..7fdfccc 100644 --- a/arch/x86/xen/pci-swiotlb.c +++ b/arch/x86/xen/pci-swiotlb.c @@ -960,7 +960,7 @@ 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 +984,16 @@ static struct dma_map_ops xen_swiotlb_dma_ops = { void __init xen_swiotlb_init(void) { - if (xen_domain()) { + int use_swiotlb = 0; + + if (xen_initial_domain()) + use_swiotlb = 1; + + /* For PV guest, only if iommu=soft is passed in. */ + if (xen_pv_domain() && !xen_initial_domain() && swiotlb) + use_swiotlb = 1; + + if (use_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; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |