[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20190529183546.GA12747@archlinux-epyc>
Date: Wed, 29 May 2019 11:35:46 -0700
From: Nathan Chancellor <natechancellor@...il.com>
To: Nicolin Chen <nicoleotsuka@...il.com>
Cc: hch@....de, robin.murphy@....com, m.szyprowski@...sung.com,
vdumpa@...dia.com, linux@...linux.org.uk, catalin.marinas@....com,
will.deacon@....com, chris@...kel.net, jcmvbkbc@...il.com,
joro@...tes.org, dwmw2@...radead.org, tony@...mide.com,
akpm@...ux-foundation.org, sfr@...b.auug.org.au,
treding@...dia.com, keescook@...omium.org, iamjoonsoo.kim@....com,
wsa+renesas@...g-engineering.com,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
linux-xtensa@...ux-xtensa.org, iommu@...ts.linux-foundation.org,
dann.frazier@...onical.com, clang-built-linux@...glegroups.com
Subject: Re: [PATCH v3 1/2] dma-contiguous: Abstract
dma_{alloc,free}_contiguous()
Hi Nicolin,
On Thu, May 23, 2019 at 09:06:32PM -0700, Nicolin Chen wrote:
> Both dma_alloc_from_contiguous() and dma_release_from_contiguous()
> are very simply implemented, but requiring callers to pass certain
> parameters like count and align, and taking a boolean parameter to
> check __GFP_NOWARN in the allocation flags. So every function call
> duplicates similar work:
> /* A piece of example */
> unsigned long order = get_order(size);
> size_t count = size >> PAGE_SHIFT;
> page = dma_alloc_from_contiguous(dev, count, order, gfp & __GFP_NOWARN);
> [...]
> dma_release_from_contiguous(dev, page, size >> PAGE_SHIFT);
>
> Additionally, as CMA can be used only in the context which permits
> sleeping, most of callers do a gfpflags_allow_blocking() check and
> a corresponding fallback allocation of normal pages upon any false
> result:
> /* A piece of example */
> if (gfpflags_allow_blocking(flag))
> page = dma_alloc_from_contiguous();
> if (!page)
> page = alloc_pages();
> [...]
> if (!dma_release_from_contiguous(dev, page, count))
> __free_pages(page, get_order(size));
>
> So this patch simplifies those function calls by abstracting these
> operations into the two new functions: dma_{alloc,free}_contiguous.
>
> As some callers of dma_{alloc,release}_from_contiguous() might be
> complicated, this patch just implements these two new functions to
> kernel/dma/direct.c only as an initial step.
>
> Suggested-by: Christoph Hellwig <hch@....de>
> Signed-off-by: Nicolin Chen <nicoleotsuka@...il.com>
> ---
This commit is causing boot failures in QEMU on x86_64 defconfig:
https://travis-ci.com/ClangBuiltLinux/continuous-integration/jobs/203825363
Attached is a bisect log and a boot log with GCC (just to show it is not
a compiler thing).
My QEMU command line is:
qemu-system-x86_64 -m 512m \
-drive file=images/x86_64/rootfs.ext4,format=raw,if=ide \
-append 'console=ttyS0 root=/dev/sda' \
-nographic \
-kernel arch/x86_64/boot/bzImage
and the rootfs is available here:
https://github.com/ClangBuiltLinux/continuous-integration/raw/master/images/x86_64/rootfs.ext4
I haven't seen a report on this yet so apologize if there is already a
fix in the works. Let me know if you need anythnig from me.
Cheers,
Nathan
View attachment "bisect.log" of type "text/plain" (2382 bytes)
View attachment "boot.log" of type "text/plain" (22042 bytes)
Powered by blists - more mailing lists