Ядро Linux - IRQ (файловая система proc против системного вызова)
Я работаю над проектом ядра Linux. В моем проекте я модифицировал ядро так, чтобы copy_process
вызывается из одного из моих модулей, который отвечает на записи в запись файла proc. В сущности, все выглядит так:
int procfile_write(struct file *file, const char *buffer, unsigned long count,
void *data)
{
//...more code
copy_process(...);
//...more code
}
int init_module()
{
/* create the /proc file */
Our_Proc_File = create_proc_entry(PROCFS_NAME, 0644, NULL);
// more code
Our_Proc_File->write_proc = procfile_write;
return 0; /* everything is ok */
}
Моя проблема в том, что ядро висит внутри copy_process
когда он попадает в очередь:
write_lock_irq(&tasklist_lock);
Теперь я знаю, что эта функция вызывается все время из do_fork
, Что происходит внутри системного вызова.
Мои вопросы:
- Я на правильном пути, думая, что это имеет отношение к записи в запись файла proc против системных вызовов?
- Какие IRQ имеют отношение к записи в записи файла proc?
- Действительно ли запись в запись файла proc отличается от системного вызова? Я имею в виду, как он обрабатывается и в каком контексте он вызывается?
Спасибо!
ОБНОВЛЕНИЕ: Я преобразовал способ вызова моего кода из вызова при обработке записи в файл proc в системный вызов. Ничего не изменилось. По-прежнему зависает при переходе на ту же строку (т.е. блокирует tasklist_lock). Теперь моя проблема, почему он там висит? и как исправить эту проблему?