On 2/26/2018 12:36 AM, Arnd Bergmann wrote:
Unfortunately, this is still broken on all big-endian architectures. You could use __raw_writeq() here to fix it, or change the if() clause at the beginning to include '!IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)' to avoid that. Arnd
Please explain. There doesn't seem to be a definitive guide on which of the several routines for bar mapping and the several routines for memory copying should be used. We've gone with what we tested and measured.
Also, this code is disabled on everything but X86 right now - so the patch should be fine. We settled on the combination which our testing showed the best results. We tried other architectures, but there wasn't a combination that showed great results. If we figure a combination out, we will update the code.
Note: when we used ioremap_wc() both PPC/BE and X86 dropped in overall performance as it seems to make things cacheable and the speculation is the caching aspects delayed the results just enough to make the overall gain go down.
-- james