case DMA_FROM_DEVICE: if (!arch_sync_dma_clean_before_fromdevice()) {
arch_dma_cache_inv(paddr, size); break;
}
fallthrough;
case DMA_BIDIRECTIONAL: /* Skip the invalidate here if it's done later */ if (IS_ENABLED(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU) &&
arch_sync_dma_cpu_needs_post_dma_flush())
arch_dma_cache_wback(paddr, size); else
arch_dma_cache_wback_inv(paddr, size); break;
case DMA_FROM_DEVICE: case DMA_BIDIRECTIONAL: /* FROM_DEVICE invalidate needed if speculative CPU prefetch only */ if (arch_sync_dma_cpu_needs_post_dma_flush())
arch_dma_cache_inv(paddr, size); break;
WARN_TAINT(!coherent && !noncoherent_supported, TAINT_CPU_OUT_OF_SPEC, "%s %s: device non-coherent but no non-coherent operations supported",
dev_driver_string(dev), dev_name(dev));
dev->dma_coherent = coherent;
}
void riscv_noncoherent_supported(void)
{
WARN(!riscv_cbom_block_size, "Non-coherent DMA support enabled without a block size\n");
noncoherent_supported = true;
}
void __init riscv_set_dma_cache_alignment(void)
{ if (!noncoherent_supported)
dma_cache_alignment = 1;
}
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.1Bemerkung:
(vorverarbeitet am 2026-10-12)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.