Я написал драйвер устройства Linux для устройства PCI. Это устройство выполняет операции DMA. Проблема возникает при сбое программы при выполнении операции DMA.
Действительно, при сбое система device_remove()
вызывает функцию (как если бы close()
вызывалось). Эта функция выполняет очистку областей памяти, используемых устройством PCI, правильно освобождает выделенную память. Я имею в виду, что он работает правильно в нормальных условиях.
Но если DMA работает, когда он фактически завершится, он не сможет выполнить очистку DMA, поскольку у него больше нет доступа к данным устройства, которые были освобождены. Простым решением будет ожидание в функции close (). (Это мое понимание, но, может быть, последняя часть функции DMA никогда не выполняется?)
Является ли хорошей идеей вопить о том, что DMA фактически завершается в функции device_remove()
(он же close()
) драйвера устройства? Существуют ли другие способы решения этой проблемы?