Ядро 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, Что происходит внутри системного вызова.

Мои вопросы:

  1. Я на правильном пути, думая, что это имеет отношение к записи в запись файла proc против системных вызовов?
  2. Какие IRQ имеют отношение к записи в записи файла proc?
  3. Действительно ли запись в запись файла proc отличается от системного вызова? Я имею в виду, как он обрабатывается и в каком контексте он вызывается?

Спасибо!

ОБНОВЛЕНИЕ: Я преобразовал способ вызова моего кода из вызова при обработке записи в файл proc в системный вызов. Ничего не изменилось. По-прежнему зависает при переходе на ту же строку (т.е. блокирует tasklist_lock). Теперь моя проблема, почему он там висит? и как исправить эту проблему?

0 ответов

Другие вопросы по тегам