Messages in this thread | | | Date | Mon, 02 Feb 2015 19:39:18 +0300 | From | Sergei Shtylyov <> | Subject | Re: [PATCH] pci-dma: Fix x86 dma_alloc_coherent to fully clear all pages returned |
| |
Hello.
On 02/02/2015 05:02 PM, Jiri Slaby wrote:
>> From: Tim Chen <tim.c.chen@linux.intel.com> >> 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 <tim.c.chen@linux.intel.com> >> Cc: <stable@vger.kernel.org> # 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
| |