Asper wrote:В сборке #3486 драйвер HDA ещё работает в VirtualBox 4.2.12 в #3493 уже вешает эмулируемую машину.
Serge wrote:С HDA непонятная ситуация. 3588 иногда зависает, а иногда нет. Закономерность не удаётся уловить. 3592 работает, но причина зависания непонятна совершенно. Надо больше разных тестов.
Классический deadlock из-за недостаточных блокировок - play/stop работают не в контексте прерывания, но использовали спинлок, не блокирующий прерывания. Если в момент play/stop приходило прерывание - обработчик прерывания не мог начать выполняться, пока спинлок не отпущен, а код, захвативший спинлок, не мог продолжить выполняться, пока не завершится обработчик. Я это поправила в r3753. Asper, там в stop всё-всё-всё закомментировано с предисловием "Asper: Hangs system". Это когда появилось и не пора ли это уже убрать для экономии ресурсов после остановки проигрывания?
Два варианта.
1.Формат структуры SRV известен. sound.asm сохраняет точку входа настоящего драйвера, и передаёт управление туда.
2.Переписать всё нафиг.
Asper wrote:В сборке #3486 драйвер HDA ещё работает в VirtualBox 4.2.12 в #3493 уже вешает эмулируемую машину.
Serge wrote:С HDA непонятная ситуация. 3588 иногда зависает, а иногда нет. Закономерность не удаётся уловить. 3592 работает, но причина зависания непонятна совершенно. Надо больше разных тестов.
Классический deadlock из-за недостаточных блокировок - play/stop работают не в контексте прерывания, но использовали спинлок, не блокирующий прерывания. Если в момент play/stop приходило прерывание - обработчик прерывания не мог начать выполняться, пока спинлок не отпущен, а код, захвативший спинлок, не мог продолжить выполняться, пока не завершится обработчик. Я это поправила в r3753.
Спасибо.
CleverMouse wrote:
Asper, там в stop всё-всё-всё закомментировано с предисловием "Asper: Hangs system". Это когда появилось и не пора ли это уже убрать для экономии ресурсов после остановки проигрывания?
Это появилось ещё в тестовой версии 9. Надо проверять, если проблемы больше не возникает, то можно раскомментировать блок.
Прямо сейчас, похоже, stop даже не вызывается - ни при завершении системы из-за промежуточного драйвера, перезаписывающего установленный было [SRV.entry], ни при остановке проигрывания ac97snd, не знаю почему.