From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Can I specify a physical memory region for a domU Date: Thu, 8 Sep 2011 14:12:05 -0400 Message-ID: <20110908181205.GA19078@dumpdata.com> References: <20110908125920.GC28591@dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Eric Camachat Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org On Thu, Sep 08, 2011 at 10:22:01AM -0700, Eric Camachat wrote: > On Thu, Sep 8, 2011 at 5:59 AM, Konrad Rzeszutek Wilk > wrote: > > On Wed, Sep 07, 2011 at 05:47:46PM -0700, Eric Camachat wrote: > >> Hi, > >> > >> I am porting our drivers to XEN's PV domU (with PV PCI passthrouth), I > > > > Use the DMA API that Linux provides (I presume that is what you meant > > by PV DomU), and use the dma_alloc_coherent to set your regions. > > That's what I thought before. We use a shared DMA region for multiple hardware. > Maybe I can dma_alloc_coherent for 1st and the others use the same region. You can definitly try it. Or use the dmapool API to get a shared pool of coherent memory. > I will try it. > > > > > Also pass in 'iommu=soft' on your Linux command line to enable the > > Xen SWIOTLB DMA system. > > > >> have to allocate a memory block and tell the hardware to access it. > >> But the hardware can address 32-bit only, so I want dedicate a region > >> of memory that below 2GB for the domU only. > > > > Uh, don't you mean 4GB? - 32bit is up to 4GB. > > The hardware uses 32-bit addressing, but the system will crash if I > assigned above 2GB address to it. Ha! so buggy hardware.. or you are not using the XEn-SWIOTLB but something else. > So, 4GB from hardware spec, 2GB from my test. I am looking into that. Make sure you set pci_set_consistent_dma_mask(dev, DMA_BIT_MASK(31)); on top of pci_set_dma_mask(dev, DMA_BIT_MASK(31)); in your driver.