Очистка кэшированных данных во время операций PIO

На некоторых платформах инструкции и кэши данных в процессоре проявляют аномалии когерентности кэша во время операций чтения PIO.

Заметка Чтобы обеспечить целостность данных во время операций чтения, драйверы, использующие ПИО, должны соответствовать этому руководству: вызов KeFlushIoBuffers в конце каждой операции чтения.

Например, драйвер, выполняющий передачу PIO с устройства на системную память, должен вызывать KeFlushIoBuffers в конце каждой операции передачи устройства. В качестве другого примера драйвер, считывающий последовательность регистров устройств в системную память, должен вызывать KeFlushIoBuffers в конце последовательности. В противном случае такой драйвер может попытаться получить доступ к данным, которые все еще находится в кэше данных процессора, а не в системной памяти на некоторых платформах.

KeFlushIoBuffers не выполняет никаких действий, если процессор обеспечивает поддержание когерентности кэша, поэтому вызовы этой подпрограммы поддержки почти не дают нагрузки на систему на такой платформе.