Мне любопытно обработать передачу драйвера DMA (PEX 8733) и использовать kzalloc для получения части бафа для наблюдения за работающей таблицей дескрипторов DMA.
Это в соответствии со спецификацией DMA, дескрипторформат такой: формат дескриптора
Когда я начинаю свое наблюдение, результат выглядит как ожидаемый пример 1 (порядок: dw0, dw1, dw2, dw3.)или ожидаемый пример 2.
ожидаемый пример 2:
DMA Descriptor Entry 0, (80003c66, 3890, 74ea046c, fff4028e)
DMA Descriptor Entry 1, (c000042e, 3890, 74ea0048, fff4024e)
Через некоторое время (около 2 часов) результат показывает: неожиданный пример 1 или неожиданный пример 2
неожиданный пример 2:
DMA Descriptor Entry 0, (80007c0e, ffff3890, 65da046e, fffc04ee)
DMA Descriptor Entry 1, (c000042e, ffff3890, 65da0040, fffc00c0)
Я не могу понять, что старший байт имеет старший байт 0xffff
в адресе источника.
Я неправильно понимаю или пропускаю что-то в дескрипторе DMA?
Я не уверен в потенциальной проблеме (Дополнительные сообщения), которая связана с адресом высокого src, но появляется, когда DMA работает некоторое время.
Дополнительные сообщения:
DMAR: DRHD: handling fault status reg 402
DMAR: DMAR: [DMA Read] Request device [01:00.2] fault addr fffc0000
DMAR: [fault reason 06] PTE Read access is not set