Semaphore_create вызывает панику ядра - PullRequest
2 голосов
/ 11 апреля 2019

Я занимаюсь разработкой расширения ядра. Мне требуется использовать механизм ожидания и сигнала для ожидания определенных событий (логика программирования). Я пытаюсь использовать семафоры как часть расширения ядра для реализации методологии ожидания и сигнала.

Создание семафора вызывает панику ядра. Нужна помощь в выяснении правильной реализации. Дайте мне знать, если я использую его неправильно или есть какой-то другой более простой механизм ожидания и сигнал для разработки ядра.

Текущий код, который я использую.

semaphore_t CreateWaitEvent() {

    semaphore_t sema;
    //The below semaphore_create line is causing the kernel panic
    if (semaphore_create(current_task(), &sema, SYNC_POLICY_FIFO, 0) != KERN_SUCCESS){
       return NULL;
    }
    return sema;
}

void Wait(semaphore_t event) {
    semaphore_wait(event);
}

void Signal(semaphore_t event) {
    semaphore_signal(event);
}

Я запускаю это расширение ядра на ВМ, используя программное обеспечение Parallels на MacBookPro. Я включил отладку ядра.

не знаю, что я делаю неправильно, чтобы вызвать панику ядра.

...