From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: patch "[PATCH] xen/swiotlb: Use page alignment for early buffer allocation." failed to apply to 3.1-stable tree Date: Fri, 16 Dec 2011 10:45:54 -0500 Message-ID: <20111216154554.GG31755@phenom.dumpdata.com> References: <13239908451694@kroah.org> <3E243B26F475504B9BB0BCC9728B0DA629E1AC69@USILMS110A.ca.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <3E243B26F475504B9BB0BCC9728B0DA629E1AC69@USILMS110A.ca.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: "Taylor, Neal E" Cc: "gregkh@suse.de" , "Kalev, Leonid" , xen-devel , "stable@vger.kernel.org" List-Id: xen-devel@lists.xenproject.org On Fri, Dec 16, 2011 at 12:58:55AM +0000, Taylor, Neal E wrote: > Konrad, > > This patch applies and compiles on 3.1.5 and 3.0.4. I'll test tomorrow. OK. I've tested it on 3.1.5 and 3.0.6 as well. If I recall you mentioned that you had tested the 3.0.4 + this patch yesterday (thought you probably had tons of debugging patches too). Is that you are testing a clean version of 3.0.4 with this patch? Or are you testing both trees on your box? Thanks! > > Neal > > diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c > index 8e964b9..5c8e445 100644 > --- a/drivers/xen/swiotlb-xen.c > +++ b/drivers/xen/swiotlb-xen.c > @@ -166,7 +166,8 @@ retry: > /* > * Get IO TLB memory from any location. > */ > - xen_io_tlb_start = alloc_bootmem(bytes); > + xen_io_tlb_start = alloc_bootmem_pages(PAGE_ALIGN(bytes)); > + > if (!xen_io_tlb_start) > panic("Cannot allocate SWIOTLB buffer"); > > -----Original Message----- > From: gregkh@suse.de [mailto:gregkh@suse.de] > Sent: Thursday, December 15, 2011 3:14 PM > To: konrad.wilk@oracle.com; Kalev, Leonid; Taylor, Neal E > Cc: stable@vger.kernel.org > Subject: patch "[PATCH] xen/swiotlb: Use page alignment for early buffer allocation." failed to apply to 3.1-stable tree > > > The patch below does not apply to the 3.1-stable tree. > If someone wants it applied there, or to any other stable or longterm > tree, then please email the backport, including the original git commit > id to . > > thanks, > > greg k-h > > ------------------ original commit in Linus's tree ------------------ > > >From 63a741757d15320a25ebf5778f8651cce2ed0611 Mon Sep 17 00:00:00 2001 > From: Konrad Rzeszutek Wilk > Date: Thu, 15 Dec 2011 11:28:46 -0500 > Subject: [PATCH] xen/swiotlb: Use page alignment for early buffer allocation. > > This fixes an odd bug found on a Dell PowerEdge 1850/0RC130 > (BIOS A05 01/09/2006) where all of the modules doing pci_set_dma_mask > would fail with: > > ata_piix 0000:00:1f.1: enabling device (0005 -> 0007) > ata_piix 0000:00:1f.1: can't derive routing for PCI INT A > ata_piix 0000:00:1f.1: BMDMA: failed to set dma mask, falling back to PIO > > The issue was the Xen-SWIOTLB was allocated such as that the end of > buffer was stradling a page (and also above 4GB). The fix was > spotted by Kalev Leonid which was to piggyback on git commit > e79f86b2ef9c0a8c47225217c1018b7d3d90101c "swiotlb: Use page alignment > for early buffer allocation" which: > > We could call free_bootmem_late() if swiotlb is not used, and > it will shrink to page alignment. > > So alloc them with page alignment at first, to avoid lose two pages > > And doing that fixes the outstanding issue. > > CC: stable@kernel.org > Suggested-by: "Kalev, Leonid" > Reported-and-Tested-by: "Taylor, Neal E" > Signed-off-by: Konrad Rzeszutek Wilk > > diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c > index 8e964b9..284798a 100644 > --- a/drivers/xen/swiotlb-xen.c > +++ b/drivers/xen/swiotlb-xen.c > @@ -166,7 +166,7 @@ retry: > /* > * Get IO TLB memory from any location. > */ > - xen_io_tlb_start = alloc_bootmem(bytes); > + xen_io_tlb_start = alloc_bootmem_pages(PAGE_ALIGN(bytes)); > if (!xen_io_tlb_start) { > m = "Cannot allocate Xen-SWIOTLB buffer!\n"; > goto error; > @@ -179,7 +179,7 @@ retry: > bytes, > xen_io_tlb_nslabs); > if (rc) { > - free_bootmem(__pa(xen_io_tlb_start), bytes); > + free_bootmem(__pa(xen_io_tlb_start), PAGE_ALIGN(bytes)); > m = "Failed to get contiguous memory for DMA from Xen!\n"\ > "You either: don't have the permissions, do not have"\ > " enough free memory under 4GB, or the hypervisor memory"\