From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <54CFA836.6010309@cogentembedded.com> Date: Mon, 02 Feb 2015 19:39:18 +0300 From: Sergei Shtylyov MIME-Version: 1.0 To: Jiri Slaby , Tim Chen CC: "H. Peter Anvin" , Akinobu Mita , Mathias Nyman , Andi Kleen , Ingo Molnar , Andrew Morton , Marek Szyprowski , Thomas Gleixner , linux-kernel@vger.kernel.org, x86@kernel.org, linux-usb@vger.kernel.org, stable Subject: Re: [PATCH] pci-dma: Fix x86 dma_alloc_coherent to fully clear all pages returned References: <1422647641.9530.2.camel@schen9-desk2.jf.intel.com> <54CBF1A0.9080005@cogentembedded.com> <1422654849.9530.8.camel@schen9-desk2.jf.intel.com> <54CF8374.80704@suse.cz> In-Reply-To: <54CF8374.80704@suse.cz> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: Hello. On 02/02/2015 05:02 PM, Jiri Slaby wrote: >> From: Tim Chen >> Subject: [PATCH] pci-dma: Fix x86 dma_alloc_coherent to fully clear all pages returned >> Commit d92ef66c4f8f ("x86: make dma_alloc_coherent() return zeroed memory >> if CMA is enabled") changed the dma_alloc_coherent page clearance from >> using an __GFP_ZERO in page allocation to not setting the flag but doing >> an explicit memory clear at the end. >> However the memory clear only covered the memory size that >> was requested, but may not be up to the full extent of the >> last page, if the total pages returned exceed the >> memory size requested. This behavior has caused problem with XHCI >> and caused it to hang: >> kernel: xhci_hcd 0000:00:14.0: Stopped the command ring failed, maybe the host is dead >> kernel: xhci_hcd 0000:00:14.0: Abort command ring failed >> kernel: xhci_hcd 0000:00:14.0: HC died; cleaning up >> kernel: xhci_hcd 0000:00:14.0: Error while assigning device slot ID >> kernel: xhci_hcd 0000:00:14.0: Max number of devices this xHCI host supports is 64. >> Other drivers may have similar issue if it assumes that the pages >> allocated are completely zeroed. >> This patch ensures that the pages returned are fully cleared. >> Signed-off-by: Tim Chen >> Cc: # 3.16+ >> --- >> arch/x86/kernel/pci-dma.c | 2 ++ >> 1 file changed, 2 insertions(+) >> diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c >> index a25e202..e9d8dee 100644 >> --- a/arch/x86/kernel/pci-dma.c >> +++ b/arch/x86/kernel/pci-dma.c >> @@ -125,6 +125,8 @@ again: >> >> return NULL; >> } >> + /* round up to full page size */ >> + size = (size + ~PAGE_MASK) & PAGE_MASK; > Hi, is this an open-coded version of PAGE_ALIGN? Yes, it appears so. :-) WBR, Sergei