Есть pci express устройство, которое пишет данные в память компьютера посредством dma. Память для dma выделяется при помощи pci_alloc_consistent. После завершения транзакции делаю pci_dma_sync_for_cpu, читаю данные из области, потом pci_dma_sync_for_device, запускаю следующую dma передачу и жду подтверждения.
Данные оказываются повреждены. В начале (байтов 300) всё верно, а дальше мусор. Если сделать паузу перед чтением, то целых данных оказывается больше, и так дальше.
Что-то подсказывает, что контроллёр pcie шины буферизирует данные. Как сделать так, что бы после pci_dma_sync_for_cpu данные были уже в памяти полностью?