From: Robin Murphy <robin.murphy@arm.com>
To: Arnd Bergmann <arnd@arndb.de>, Jim Quinlan <james.quinlan@broadcom.com>
Cc: Linus Walleij <linus.walleij@linaro.org>,
Christoph Hellwig <hch@lst.de>,
bcm-kernel-feedback-list@broadcom.com, jim2101024@gmail.com,
Russell King <linux@armlinux.org.uk>,
Geert Uytterhoeven <geert+renesas@glider.be>,
Russell King <rmk+kernel@armlinux.org.uk>,
Andrew Morton <akpm@linux-foundation.org>,
Jonathan Corbet <corbet@lwn.net>,
Thomas Gleixner <tglx@linutronix.de>,
Sebastian Reichel <sebastian.reichel@collabora.com>,
Mike Rapoport <rppt@kernel.org>,
Eric DeVolder <eric.devolder@oracle.com>,
Nathan Chancellor <nathan@kernel.org>,
"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
Christophe Leroy <christophe.leroy@csgroup.eu>,
"moderated list:ARM PORT" <linux-arm-kernel@lists.infradead.org>,
open list <linux-kernel@vger.kernel.org>,
Claire Chang <tientzu@chromium.org>
Subject: Re: [PATCH v1 1/1] ARM: Select DMA_DIRECT_REMAP to fix restricted DMA
Date: Thu, 28 Sep 2023 16:33:08 +0100 [thread overview]
Message-ID: <f0b03b73-cb01-f613-c4a6-da546ab47464@arm.com> (raw)
In-Reply-To: <1f08bd12-0ac4-43ea-b058-7836521eec12@app.fastmail.com>
On 28/09/2023 4:16 pm, Arnd Bergmann wrote:
> On Thu, Sep 28, 2023, at 10:00, Jim Quinlan wrote:
>> On Thu, Sep 28, 2023 at 9:32 AM Arnd Bergmann <arnd@arndb.de> wrote:
>>>
>>> On Thu, Sep 28, 2023, at 08:07, Jim Quinlan wrote:
>>>> On Wed, Sep 27, 2023 at 7:10 PM Linus Walleij <linus.walleij@linaro.org> wrote:
>>>>>
>>>>> 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?
>>>>
>>>>
>>>> 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.
>>>
>>> Usually when you see a mismatch between the data observed by the
>>> device and the CPU, the problem is an incorrect "dma-coherent"
>>> property in the DT: either the device is coherent and accesses
>>> the cache but the CPU tries to bypass it because the property
>>> is missing, or there is an extraneous property and the CPU
>>> goes the through the cache but the devices bypasses it.
>>
>> I just searched, there are no "dt-coherent" properties in our device tree.
>> Also, even if we did have them, wouldn't things also fail when not using
>> restricted DMA?
>
> Correct, it should be independent of restricted DMA, but it might
> work by chance that way even if it's still wrong. If your DT
> is marked as non-coherent (note: the property to look for
> is "dma-coherent", not "dt-coherent"), can you check the
> datasheet of the SoC to if that is actually correct?
>
> If the chip is designed to support high-speed devices on
> PCIe, it's likely that the PCIe root complex is either coherent
> with the caches, or can (and should) be configured that way
> for performance reasons.
>
>>> It could also be a driver bug if the device mixes up the
>>> address spaces, e.g. passing virt_to_phys(pointer) rather
>>> than the DMA address returned by dma_alloc_coherent().
>>
>> This is an Intel 7260 part using the iwlwifi driver, I doubt it has
>> errors of that kind.
>
> It's unlikely but not impossible, as the driver has some
> unusual constructs, using a lot of coherent mappings that
> might otherwise be streaming mappings, and relying on
> dma_sync_single_for_device(..., DMA_BIDIRECTIONAL) for other
> data, but without the corresponding dma_sync_single_for_cpu().
> If all the testing happens on x86, this might easily lead
> to a bug that only shows up on non-coherent systems but
> is never seen during testing.
Probably the significant thing about restricted DMA is that it forces
all streaming DMA to be bounce-buffered. That should expose busted
synchronisation even more decisively than a lack of coherency. If
there's no IOMMU, then testing the driver in the absence of restricted
DMA but with "swiotlb=force" should confirm or disprove that.
Robin.
> If the problem is not the "dma-coherent" property, can you
> double-check if using a different PCIe device works, or narrow
> down which specific buffer you saw get corrupted?
>
> Arnd
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-09-28 15:33 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-26 17:52 RFC: ARM && restricted DMA apparently not working Jim Quinlan
2023-09-26 17:52 ` [PATCH v1 1/1] ARM: Select DMA_DIRECT_REMAP to fix restricted DMA Jim Quinlan
2023-09-27 7:13 ` kernel test robot
2023-09-27 23:10 ` Linus Walleij
2023-09-28 12:07 ` Jim Quinlan
2023-09-28 13:09 ` Jim Quinlan
2023-09-28 13:32 ` Arnd Bergmann
2023-09-28 14:00 ` Jim Quinlan
2023-09-28 14:01 ` Jim Quinlan
2023-09-28 15:16 ` Arnd Bergmann
2023-09-28 15:33 ` Robin Murphy [this message]
2023-09-28 16:20 ` Arnd Bergmann
2023-09-29 19:24 ` Jim Quinlan
2023-09-29 19:52 ` Arnd Bergmann
2023-09-29 21:13 ` Jim Quinlan
2023-10-01 12:48 ` Jim Quinlan
2023-09-28 15:47 ` Robin Murphy
2023-10-02 12:33 ` Jim Quinlan
2023-10-02 15:08 ` Robin Murphy
2023-10-02 6:16 ` Christoph Hellwig
2023-10-05 17:53 ` Jim Quinlan
2023-10-06 7:40 ` Christoph Hellwig
[not found] ` <CGME20231020081648eucas1p17d2572cfca5762d2f5cbc560dd648564@eucas1p1.samsung.com>
2023-10-20 8:16 ` Marek Szyprowski
2023-10-23 6:16 ` Christoph Hellwig
2023-09-28 16:24 ` Christophe Leroy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=f0b03b73-cb01-f613-c4a6-da546ab47464@arm.com \
--to=robin.murphy@arm.com \
--cc=akpm@linux-foundation.org \
--cc=arnd@arndb.de \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=christophe.leroy@csgroup.eu \
--cc=corbet@lwn.net \
--cc=eric.devolder@oracle.com \
--cc=geert+renesas@glider.be \
--cc=hch@lst.de \
--cc=james.quinlan@broadcom.com \
--cc=jim2101024@gmail.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=nathan@kernel.org \
--cc=rmk+kernel@armlinux.org.uk \
--cc=rppt@kernel.org \
--cc=sebastian.reichel@collabora.com \
--cc=tglx@linutronix.de \
--cc=tientzu@chromium.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®