Messages in this thread | | | Date | Sun, 30 Jul 2023 22:35:50 +0200 | From | "Arnd Bergmann" <> | Subject | Re: [PATCH v10 3/6] riscv: mm: dma-noncoherent: nonstandard cache operations support |
| |
On Sun, Jul 30, 2023, at 17:42, Emil Renner Berthing wrote: > On Sun, 30 Jul 2023 at 17:11, Jisheng Zhang <jszhang@kernel.org> wrote:
>> > + >> > static inline void arch_dma_cache_wback(phys_addr_t paddr, size_t size) >> > { >> > void *vaddr = phys_to_virt(paddr); >> > >> > +#ifdef CONFIG_RISCV_NONSTANDARD_CACHE_OPS >> > + if (unlikely(noncoherent_cache_ops.wback)) { >> >> I'm worried about the performance impact here. >> For unified kernel Image reason, RISCV_NONSTANDARD_CACHE_OPS will be >> enabled by default, so standard CMO and T-HEAD's CMO platform's >> performance will be impacted, because even an unlikely is put >> here, the check action still needs to be done. > > On IRC I asked why not use a static key so the overhead is just a > single nop when the standard CMO ops are available, but the consensus > seemed to be that the flushing would completely dominate this branch. > And on platforms with the standard CMO ops the branch be correctly > predicted anyway.
Not just the flushing, but also loading back the invalidated cache lines afterwards is just very expensive. I don't think you would be able to measure a difference between the static key and a correctly predicted branch on any relevant usecase here.
Arnd
| |