В настоящее время я работаю над проблемой, связанной с барьерами памяти на PPC e6500.
Я нахожусь в ситуации, когда я хочу записать что-то в память моего устройства PCI и выполнить чтение иззначение сразу после. Кроме того, я хочу быть уверен, что чтение будет правильным и полностью завершено, когда выполнение моей программы продолжится.
Поскольку PCI (не PCIe) поддерживает переупорядочение операций чтения / записи в зависимости от ситуации во время доступаЯ вполне уверен, что мне нужны барьеры ввода / вывода для достижения этого безопасно и последовательно. Однако я не уверен, какую именно последовательность и какие барьеры мне нужно использовать на моем КПК.
Как я понял, инструкция asm eieio
только гарантирует, что доступ осуществляется в правильном порядке, но он делаетне гарантируйте, что все инструкции, предшествующие eieio
, будут завершены после его завершения.
Однако команда asm sync
, кажется, завершается только тогда, когда все предыдущие инструкции полностью завершены.
Это приводит меня к предположению, что код должен выглядеть примерно так:
Write to PCI device memory
eieio
Read from PCI device memory
sync
continue
Это правильный подход или я что-то неправильно понял относительно барьеров памяти на PPC?
Спасибо большоемного, Майкл