[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, 2009-12-22 at 16:59 +0000, Konrad Rzeszutek Wilk wrote:
> 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) {

How about just 
          if (xen_pv_domain() && (xen_initial_domain() || swiotlb))
Or depending on how/where swiotlb gets set (i.e. if it is set IFF
xen_pv_domain) simply:
          if (xen_initial_domain() || swiotlb)

Ian.


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