Здравствейте коллеги,
помогите разобраться в интересной ситуации. Я разрабатываю модуль ядра для линукс и сталкнулся с интересной проблемой: при вызове hcd_buffer_alloc случается crash с сообщением Unable to handle kernel paging request at virtual address. Я немного изменил функцию и пересобрал ядро откуда стало ясно, что Crash случается на строке bus->controller->dma_mask при этом bus != NULL и bus->controller != NULL. Какое объяснение может быть у такого поведения?
Заранее спасибо.
Здравствуйте, ivrubano, Вы писали:
I>Здравствейте коллеги, I>помогите разобраться в интересной ситуации. Я разрабатываю модуль ядра для линукс и сталкнулся с интересной проблемой: при вызове hcd_buffer_alloc случается crash с сообщением Unable to handle kernel paging request at virtual address. Я немного изменил функцию и пересобрал ядро откуда стало ясно, что Crash случается на строке bus->controller->dma_mask при этом bus != NULL и bus->controller != NULL. Какое объяснение может быть у такого поведения? I>Заранее спасибо.
сначала нужно допустить, что bus != NULL и bus->controller != NULL не есть гарантия нормальности указателей, если только не уверенности что они инициализируются нулем, не затираются никогда, и там указатель на "адекватную" память.
насчет "адекватной" памяти, надо убедиться что там ядровая память, не из юзерспейса.
Здравствуйте, ivrubano, Вы писали: I>Unable to handle kernel paging request at virtual address.
Я на самом деле просто мимо пробегал и в этих ваших юниксах ничего не понимаю, но выглядит так, как будто ты обращаешься к незамапленной на память странице из обработчика прерывания (когда прерывание по отсутствующей странице не может отработать), т.к. неправильно выделяешь память для обработчика (не из невыгружаемого пула).