Re: [PATCH v1 1/1] ARM: Select DMA_DIRECT_REMAP to fix restricted DMA
From: Jim Quinlan <hidden>
Date: 2023-09-28 13:09:44
Also in:
lkml
On Thu, Sep 28, 2023 at 8:07 AM Jim Quinlan [off-list ref] wrote:
On Wed, Sep 27, 2023 at 7:10 PM Linus Walleij [off-list ref] wrote:quoted
Hi Jim, thanks for your patch! On Tue, Sep 26, 2023 at 7:52 PM Jim Quinlan [off-list ref] wrote:quoted
Without this commit, the use of dma_alloc_coherent() while using CONFIG_DMA_RESTRICTED_POOL=y breaks devices from working. For example, the common Wifi 7260 chip (iwlwifi) works fine on arm64 with restricted memory but not on arm, unless this commit is applied. Signed-off-by: Jim Quinlan <redacted>(...)quoted
+ select DMA_DIRECT_REMAPChristoph invented that symbol so he can certainly explain what is missing to use this on ARM. This looks weird to me, because:quoted
git grep atomic_pool_initarch/arm/mm/dma-mapping.c:static int __init atomic_pool_init(void) kernel/dma/pool.c:static int __init dma_atomic_pool_init(void) Now you have two atomic DMA pools in the kernel, and a lot more than that is duplicated. I'm amazed that it compiles at all.
Ah, I did not communicate this well at all. The patch compiles on our ARM brcmstb_defconfig for 5.15, 6.1, and upstream. The kernel test-bot tells me it doesn't compile on whatever config it is using (looks like a missing header file). My patch does not work on upstream; I only supplied it to show what "fixes" 6.1 and 5.15. For upstream on ARM, restricted-memory does not work w/ or w/o the patch. For upstream on ARM64, restricted memory does not seem to be working either. Regards, Jim Quinlan Broadcom STB/CM
quoted
Clearly if you want to do this, surely the ARM-specific arch/arm/mm/dma-mapping.c and arch/arm/mm/dma-mapping-nommu.c needs to be removed at the same time? However I don't think it's that simple, because Christoph would surely had done this a long time ago if it was that simple.Hello Linus, Yes, this is the reason I used "RFC" as the fix looked too easy to be viable :-) I debugged it enough to see that the host driver's writes to the dma_alloc_coherent() region were not appearing in memory, and that led me to DMA_DIRECT_REMAP. BTW, I tested "restricted-dma" on the master-tip the other day and it failed for both arm64 and arm. Please take this with a large grain of salt as this was a quick test and I won't have time to confirm and bisect until next week at the earliest. Regards, Jim Quinlan Broadcom STB/CMquoted
Yours, Linus Walleij